经典算法(二):逻辑回归

  目录

     一、逻辑回归数学来源

    二、极大似然法

    三、逻辑回归算法过程

    四、逻辑回归算法Python实战

 

 一、逻辑回归数学来源       

       说到算法,我们首先想到的是线性回归和逻辑回归这两种基础算法,上一篇博文详细学习线性回归,我们都知道线性回归是回归算法,可以得到实值。而在名称上类似的逻辑回归虽然也有“回归”两个字,但是逻辑回归属于分类算法,逻辑回归也称为对数几率回归。那为什么逻辑回归也叫回归呢?原因是逻辑回归的形式与线性回归的形式有部分是相同的。下面我们具体来学习逻辑回归。

       数据集有多个自变量x=\left ( x_{1} ,x_{2}...,x_{n}\right ),自变量与因变量同样存在线性关系

                                                            z=\theta _{0}x_{0}+\theta _{1}x_{1}+...+\theta _{n}x_{n}

       逻辑回归主要用于二分类,输出标记为y\in \left \{ 0,1 \right \},而线性回归模型产生的预测值是实值z,从线性回归到逻辑回归,也就是从实值z转化为0/1值。首先想到的是阶跃函数

                                                               g\left ( z \right )=\left\{\begin{matrix} 0 & z<0\\ 0.5& z=0 \\ 1&z>0 \end{matrix}\right.

        但是阶跃函数不连续,所以考虑一个连续的单调可微函数---Sigma函数

                                                                g\left ( z \right )=\frac{1}{1+e^{-z}}

        图像表示如下:

                                                                        

     Sigma函数取值范围在0~1之间,将0~1之间的取值归为两类

                                                  g\left ( z \right )=\left\{\begin{matrix} 0 & z<0.5\\ 1& z\geq 0.5 \end{matrix}\right.

     令y=\frac{1}{1+e^{-z}},将线性模型z=\theta _{0}x_{0}+\theta _{1}x_{1}+...+\theta _{n}x_{n}代入Sigma函数,得

                                                y=\frac{1}{1+e^{-\theta ^{T}x}}

     对上式化简得

                                                 y\left ( 1+e^{-\theta ^{T}x} \right )=1

                                                  y+ye^{-\theta ^{T}x} \right )=1

                                                  \frac{1-y}{y}=e^{-\theta ^{T}x}

     两边取对数

                                                   ln\frac{1-y}{y}=-\theta ^{T}x

                                                   ln\frac{y}{1-y}=\theta ^{T}x              ------------------(1)

    式子(1)就是逻辑回归的表达式。

    若将y视为样本x作为正例的可能性,则1-y是其反例可能性,两者的比值

                                                       \frac{y}{1-y}

    称为“几率”,反映了x作为正例的相对可能性。对几率取对数则得到“对数几率”

    则式子(1)可以写成

                                                   ln\frac{p\left ( y=1|z \right )}{p\left ( y=0|z \right )}=\theta ^{T}x

    根据Sigma函数归为0类的表示为:

                                                  p(y=0|x)=\frac{1}{1+e^{-\theta ^{T}x}}

    而归为1类的表示为:

                                                 p(y=1|z)=1-\frac{1}{1+e^{-\theta ^{T}x}}=\frac{e^{-\theta ^{T}x}}{1+e^{-\theta ^{T}x}}

  二、极大似然法   

     于是我们通过极大似然法来估计w和b,具体过程如下:                                            

     前面提到的Sigma函数是用y表示,但是为了接下来的求偏导容易理解,这里Sigma函数表示为:

                                                 h_{\theta }\left ( x \right )=g\left (\theta ^{T}x \right )=\frac{1}{1+e^{-\theta ^{T}x}}

     则0/1类表示为:

                                                  p\left ( y=1|x;\theta \right )=h_{\theta }\left ( x \right )

                                                 p\left ( y=0|x;\theta \right )=1-h_{\theta }\left ( x \right )

    将上面两个式子合并成一个式子

                                                 p\left ( y_{i} \right )=\left ( h_{\theta }\left ( x_{i} \right ) \right )^{y_{i}}\cdot \left ( 1-h_{\theta }\left ( x _{i}\right ) \right )^{1-y_{i}}    ---------------------(2)

    当i=0时,

                                               p\left ( y_{0} \right )= 1-h_{\theta }\left ( x _{i}\right )

    当i=1时,

                                              p\left ( y_{1} \right )= h_{\theta }\left ( x _{i}\right )

    由式子(2)连乘得到似然函数

                              L\left ( \theta \right )=\prod_{i=1}^{m}p\left (y _{i}|x_{i};\theta \right )=\prod_{i=1}^{m}\left ( h_{\theta }\left (x _{i} \right ) \right )^{y_{i}}\left ( 1-h_{\theta }\left ( x_{i} \right ) \right )^{1-y_{i}}    ---------------(3)

    极大似然估计是取θ使得似然函数最大,对似然函数(3)取对数,得

                              l\left ( \theta \right )=log\left ( L\left ( \theta \right ) \right ) =log\left ( \sum_{i=1}^{m}p\left ( y_{i} |x_{i};\theta \right ) \right )

                                       =\sum_{i=1}^{m}\left (y _{i} logh_{\theta }\left (x _{i}\right )+\left ( 1-y_{i} \right )log\left ( 1-h_{\theta } \left ( x_{i} \right )\right )\right )

       上式中要求使得概率最大的θ,而学习算法思想是根据损失函数最小化原理来求西塔,如何将概率最大化问题转化为损失函数最小化问题呢?其实很简单,只需要加上负号就可以得到损失函数,但避免损失函数受样本数量的影响,需要做平均,所以得到损失函数J\left ( \theta \right )=-\frac{1}{m}l\left ( \theta \right ),则将概率最大化问题转化为损失函数最小化问题,求解损失函数最小化的θ的思路和线性回归的思路大同小异。

        损失函数为:

                                         J\left ( \theta \right )=-\frac{1}{m}\sum_{i=1}^{m}\left (y _{i} logh_{\theta }\left (x _{i}\right )+\left ( 1-y_{i} \right )log\left ( 1-h_{\theta } \left ( x_{i} \right )\right )\right )

        对θ求导

            \frac{\partial J\left ( \theta \right )}{\partial \theta }=-\frac{1}{m}\sum_{i=1}^{m}\left ( y_{i}\frac{1}{h_{\theta }\left ( x_{i} \right )}\frac{\partial h_{\theta }\left ( x_{i} \right )}{\partial \theta } -\left ( 1-y_{i} \right )\frac{1}{1-h_{\theta }\left ( x_{i} \right )} \frac{\partial h_{\theta }\left ( x_{i} \right )}{\partial \theta } \right )

                         =-\frac{1}{m}\sum_{i=1}^{m}\left ( y_{i}\frac{1}{ g\left ( \theta ^{T} x_{i}\right )}-\left ( 1-y_{i} \right )\frac{1}{1- g\left ( \theta ^{T} x_{i}\right )} \right ) \frac{\partial }{\partial \theta } g\left ( \theta ^{T} x_{i}\right )

                         =-\frac{1}{m}\sum_{i=1}^{m}\left ( y_{i}\frac{1}{ g\left ( \theta ^{T} x_{i}\right )}-\left ( 1-y_{i} \right )\frac{1}{1- g\left ( \theta ^{T} x_{i}\right )} \right ) g\left ( \theta ^{T} x_{i}\right )\left ( 1-g\left ( \theta ^{T} x_{i}\right ) \right ) \frac{\partial }{\partial \theta } \theta ^{T} x_{i}

                         =-\frac{1}{m}\sum_{i=1}^{m}\left ( y_{i}\left ( 1-g\left ( \theta ^{T} x_{i}\right ) \right )-\left ( 1-y_{i} \right )g\left ( \theta ^{T} x_{i}\right ) \right ) x_{i}^{j}

                        =-\frac{1}{m}\sum_{i=1}^{m}\left ( y_{i}-g\left ( \theta ^{T} x_{i}\right ) \right ) x_{i}^{j}

                        =-\frac{1}{m}\sum_{i=1}^{m}\left (h_{\theta }\left ( x_{i} \right )- y_{i} \right ) x_{i}^{j}

   根据梯度下降法进行参数更新:

                          \theta _{j}:=\theta _{j}+\alpha\frac{1}{m}\sum_{i=1}^{m} \left (h_{\theta }\left ( x_{i} \right )- y_{i} \right ) x_{i}^{j}

   其中,\alpha是步长,如果样本量较大,则改为随机梯度下降法:

                          \theta _{j}:=\theta _{j}+\alpha\left (h_{\theta }\left ( x_{i} \right )- y_{i} \right ) x_{i}^{j}   , for i in range(n)

  三、逻辑回归算法过程

  四、逻辑回归算法python实战                     

#导入模块
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn import datasets
#加载python自带的iris数据集
iris=datasets.load_iris()
#划分变量和标签
X=iris.data
y=iris.target
#划分训练集和测试集
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)
#建立模型
clf=LogisticRegression(C=1.0,penalty='l1',tol=1e-6)
#训练模型
clf.fit(X_train,y_train)
#预测结果
pre=clf.predict(X_test)
#计算准确率
pred=0
for i in range(len(y_test)):
    if pre[i]-y_test[i]< 1e-1:
        pred+=1
print("Accuracy:",(pred*100.0/len(y_test)),"%")
Accuracy: 100.0 % 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值