博舍

逻辑回归算法原理及python实现 人工智能逻辑回归算法原理是什么意思啊知乎

逻辑回归算法原理及python实现

文章目录引言逻辑回归算法原理逻辑回归损失函数python实现逻辑回归决策边界python实现多项式逻辑回归sklearn中的逻辑回归逻辑回归中的正则化sklearn实现逻辑回归引言

逻辑回归(LogisticRegression)是一种分类学习算法,其本质是将样本的特征和样本发生的概率联系起来,由于发生的概率是一个数值,因此称为回归算法。主要解决2分类问题,例如:一个垃圾邮件过滤系统,x是邮件的特征,预测的y值就是邮件的类别(是垃圾邮件还是正常邮件)。

逻辑回归算法原理

逻辑回归算法步骤如下

计算样本发生的概率值,即p^=f(x)hatp=f(x)p^​=f(x)根据样本发生的概率分类y^={1 , p^≥0.50 , p^≤0.5haty=egin{cases}1,\hatpgeq0.5\0,\hatpleq0.5\end{cases}y^​={1 , p^​≥0.50 , p^​≤0.5​

逻辑回归算法既可以看作回归算法,也可以看作分类算法,只执行第一步时就是回归算法,但是逻辑回归算法通常作为回归算法用,主要解决2分类问题。在线性回归算法中,样本预测值y^=f(x)=θT⋅xbhaty=f(x)= heta^{T}cdotx_by^​=f(x)=θT⋅xb​其值域为(−∞,+∞-infty,+infty−∞,+∞),而概率的值域为[0,1],因此需要对f(x)f(x)f(x)函数进行处理,使之值域处于[0,1]即p^=σ(θT⋅xb)hatp=sigma( heta^{T}cdotx_b)p^​=σ(θT⋅xb​),一般σ(t)=11+e−tsigma(t)=frac{1}{1+e^{-t}}σ(t)=1+e−t1​

σ(t)sigma(t)σ(t)值域为(0,1),当t>0时,p>0.5;当ty=1时,p越小,损失越大y=0时,p越大,损失越大​

下面函数刚好满足条件

cost={−log(p^) ,       if  y=1−log(1−p^) ,if  y=0cost=egin{cases}-log(hatp),\\\if\y=1\-log(1-hatp),if\y=0\end{cases}cost={−log(p^​) ,       if  y=1−log(1−p^​) ,if  y=0​画出cost函数图像可以看出,当样本实际值为1时,预测概率值x为0,−log⁡(x)-log(x)−log(x)趋于正无穷,即损失趋于正无穷,当x=1即符合实际值,损失为0;当样本实际值为0时,预测值概率值x为1,−log⁡(1−x)-log(1-x)−log(1−x)趋于正无穷,即损失趋于正无穷,当x=0即符合实际值,损失为0。损失函数可以合为1个,即最终得到损失函数J(θ)=−1m∑i=1my(i)+log⁡(p^(i))+(1−y(i))log⁡(1−p^(i))J( heta)=-frac{1}{m}sum_{i=1}^{m}{y^{(i)}+log(hatp^{(i)})+(1-y^{(i)})log(1-hatp^{(i)})}J(θ)=−m1​i=1∑m​y(i)+log(p^​(i))+(1−y(i))log(1−p^​(i))

p^(i)=σ(Xb(i)θ)=11+e−Xb(i)θhatp^{(i)}=sigma(X_b^{(i)} heta)=frac{1}{1+e^{-X_b^{(i)} heta}}p^​(i)=σ(Xb(i)​θ)=1+e−Xb(i)​θ1​

最后可以通过梯度下降法,求出使损失函数最小的θ hetaθ,求得的损失函数梯度如下

python实现逻辑回归importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitclassLogisticRegression:def__init__(self):self.coef_=Noneself.intercept_=Noneself._theta=Nonedef_sigmoid(self,t):return1/(1+np.exp(-t))deffit(self,x_train,y_trian,n):defJ(theta,x_b,y):y_hat=self._sigmoid(x_b.dot(theta))return-np.sum(y*np.log(y_hat)+(1-y)*np.log(1-y_hat))/len(y)defdJ(theta,x_b,y):returnx_b.T.dot(self._sigmoid(x_b.dot(theta))-y)/len(y)defgradient_descent(x_b,y,initial_theta,alpha=0.01,n_iters=1e4,epsilon=1e-8):theta=initial_thetaiter=0whileiter

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇