![Python机器学习算法: 原理、实现与案例](https://wfqqreader-1252317822.image.myqcloud.com/cover/317/27563317/b_27563317.jpg)
2.1 Logistic回归
2.1.1 线性模型
Logistic回归是一种广义线性模型,它使用线性判别式函数对实例进行分类。举一个例子,图2-1中有两种类别的实例,o表示正例,x表示负例。
我们可以找到一个超平面将两类实例分隔开,即正确分类,假设超平面方程为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P29_11203.jpg?sign=1739308083-wOcVtctw6zBalvfQRsTmh1UeZihHiKJP-0-7c8e7118fe229cca030cfbb45bbe9670)
其中,为超平面的法向量,
为偏置。
超平面上方的点都满足:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P29_11212.jpg?sign=1739308083-4gwhITScQXni8sUAtwkn4PeYXBpqr14B-0-00dd5d6e117d88d9b523bde9cdd4a457)
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P30_11221.jpg?sign=1739308083-fhthE0KaRxI5oYJ6BSBdgdwJDtL56zC2-0-34b03163d68e370606a3880bc1e23dea)
图2-1
而超平面下方的点都满足:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P30_11225.jpg?sign=1739308083-6Aw7ElcM78o0mC3E6sjvwDhdJaJFVWZi-0-dd3e363dfdaf6ff6dc9f9b151f51f4da)
这意味着,我们可以根据以下的线性函数的值(与0的比较结果)判断实例的类别:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P30_11231.jpg?sign=1739308083-ILOUQ8ionnK4SNW6E0xiBKUnIIIVBFJ7-0-59dc2a6d3ca180736ff50152b8225d97)
分类函数以为输入,输出预测的类别:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P30_11237.jpg?sign=1739308083-cF2wFxNSd8mc3DOJlufWgTtjSsDP1xbS-0-2ff31c59b123aa13c7719bb96c11fdb3)
以上便是线性分类器的基本模型。
2.1.2 logistic函数
显然,最理想的分类函数为单位阶跃函数:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P30_11242.jpg?sign=1739308083-JGhprOEboFm6yD26C6F5ChnRrxKlwUSC-0-929aa89485bbacf20c250e44fd40832f)
但单位阶跃函数作为分类函数有一个严重缺点:它不连续,所以不是处处可微,这使得一些算法不能得以应用(如梯度下降)。我们希望找到一个在输入输出特性上与单位阶跃函数类似,并且单调可微的函数来替代阶跃函数,logistic函数便是一种常用替代函数。
logistic回归函数定义为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P31_11257.jpg?sign=1739308083-6ZglCI94omX0v9v8KY4dmmWb0gsF3Rkb-0-12b9a9426a27bea6fdaf0c47ced2626b)
其函数图像如图2-2所示。
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P31_11260.jpg?sign=1739308083-V3rdPp8gD8zcpxNOMLRtuCsDQdmkddvj-0-170020da25a28f683bc81e716696f54e)
图2-2
logistic函数是一种Sigmoid函数(S型)。从图2-2可以看出,logistic函数的值域在(0, 1)之间连续,函数的输出可视为条件下实例为正例的条件概率,即:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P31_11267.jpg?sign=1739308083-l1mctCg9L43GGY6lnqfaynav9PpXToPG-0-c02c4dab833ce5e003582794cfbb9ee2)
那么,条件下实例为负例的条件概率为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P31_11273.jpg?sign=1739308083-sgo6g4JTFGr5dpqCpzvIxq48iQSp25mu-0-a4410eb22d007250de76fc26f40b57e6)
以上概率的意义是什么呢?实际上,logistic函数是对数概率函数的反函数。一个事件的概率(odds)指该事件发生的概率与该事件不发生的概率
的比值。那么,对数概率为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P31_11282.jpg?sign=1739308083-0KzImn3yxRpj1xO3qEFJ0tkWkbiin2Q4-0-e8ec6e4c2cbadeba65ea1f52ef81706f)
对数概率大于0表明是正例的概率大,小于0表明是负例的概率大。
Logistic回归模型假设一个实例为正例的对数概率是输入的线性函数,即:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11293.jpg?sign=1739308083-McnKYwO0NE9TtPaTmAha6hlmeDBJDv3L-0-3adcb3d7c9db339fe1d321e8b58e72a4)
反求上式中的便可得出:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11299.jpg?sign=1739308083-b3PyZkqJohqovII02QGq09dQS0SIp1vQ-0-472bb3b7e864a330d6697a2b367c67ec)
理解上述logistic函数概率的意义,是后面使用极大似然法的基础。
另外,logistic函数还有一个很好的数学特性,的一阶导数形式简单,并且是
的函数:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11308.jpg?sign=1739308083-KQYp3S7L1UpmBP7zfYu8sjSw1ovXMgCW-0-7764fab620b5473c154f12d29e9cb352)
2.1.3 Logistic回归模型
Logistic回归模型假设函数为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11312.jpg?sign=1739308083-iCU4wT3oYbgWJ3eIjGTGKgAVZ6PTbLjz-0-e35f4499bbb42c71dd24224b42569d83)
为了方便,通常将纳入权向量
,作为
,同时为输入向量
添加一个常数1作为
:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11330.jpg?sign=1739308083-zbRfuJwIHSedn0FPVS5XxjYsY0sRxtv1-0-ae226fe982c8913d3b6b861c29ab4654)
此时:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11333.jpg?sign=1739308083-Eqlkm0bJttvreQWd6BuBKJnX8SO9riOU-0-6206d20af15b0d64e1d89e4431c740ae)
假设函数为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11336.jpg?sign=1739308083-4zhBSzhOW7zx5mGqOLORuc7KtBWyc2KK-0-e410df2114325327fb24bcc80f42c864)
的输出是预测
为正例的概率,如果通过训练确定了模型参数
,便可构建二元分类函数:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11346.jpg?sign=1739308083-qvHPMiruKkltwNR69KHt37fnyMorcgPL-0-7c816a4aee4cae5dcf98ffb53e130fc6)
2.1.4 极大似然法估计参数
确定了假设函数,接下来训练模型参数。对于给定的包含m个样本的数据集
,可以使用极大似然估计法来估计
。
根据的概率意义,有:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P33_11372.jpg?sign=1739308083-xrgYqSNc9u6RAod9xfCezsKwUi804JDf-0-4bd75fb824d1fe71c46996437d1a88cc)
综合上述二式可得出,训练集中某样本
,模型将输入实例
预测为类别
的概率为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P33_11387.jpg?sign=1739308083-RlK1BWOlhKiKYpn4xtiQ90hM3YuvjTwu-0-a91b12de02b87454e1c2e686837abdcb)
训练集中各样本独立同分布,因此我们定义似然函数
来描述训练集中m个样本同时出现的概率为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P33_11396.jpg?sign=1739308083-ArWNsJ2exc9QmHnrdYUjxuq1mPg43yD5-0-881c021764e1bbd95bc9d882795a26c5)
极大似然法估计参数的核心思想是:选择参数
,使得当前已经观测到的数据(训练集中的m个样本)最有可能出现(概率最大),即:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P33_11405.jpg?sign=1739308083-5UNxeckZ8btpSU6Np0g5Gahavn5x8ai5-0-419feb44a3743f9cd8cacedbd27fab6e)
是一系列项之积,求导比较麻烦,不容易找出其最大值点(即求出最大值)。
函数是单调递增函数,因此可将问题转化为找出对数似然函数
的最大值点,即:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P33_11415.jpg?sign=1739308083-bd2QUftytNWj4PlLWfaud9JylQ331BZz-0-f745f3ff31853db358c5d7674abf0aa0)
根据定义,对数似然函数为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P33_11418.jpg?sign=1739308083-W5Uz47vegxO0PZJc2HLRAbgsXuuUkVwM-0-c2c825225ab29968e6a755f1075913f0)
经观察可看出,以上对数似然函数是一系列项之和,求导简单,容易找到最大值点,即求出最大值。
2.1.5 梯度下降更新公式
习惯上,我们通常定义模型的损失函数,并求其最小值(找出最小值点)。对于Logistic回归模型,可以定义其损失函数为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P34_11427.jpg?sign=1739308083-Qdk18RxgjJ42VAPmZ5e2Ochp1tmyVmCj-0-b58db01c0de7cecf9470f40df4bdd76c)
此时,求出损失函数最小值与求出对数似然函数最大值等价。求损失函数最小值,依然可以使用梯度下降算法,最终估计出模型参数。
下面计算损失函数的梯度,从而推出梯度下降算法中
的更新公式。
计算对分量
的偏导数:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P34_11445.jpg?sign=1739308083-Ofcrgiqge3p44w33PB9swiMQoZa4WPwz-0-debdda4adfc842fe738c9a9c2a9e9084)
其中,可解释为模型预测
为正例的概率与其实际类别之间的误差。
由此可推出梯度计算公式为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P34_11457.jpg?sign=1739308083-4K6LOd7U0nGINC4o5bUcfgNUfFNElJXG-0-be5afee4ca2613e9590105aad6866e3f)
对于随机梯度下降算法,每次只使用一个样本来计算梯度(m=1),相应梯度计算公式为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P34_11463.jpg?sign=1739308083-HskLfUr252byGGWmufkjfwOwai6X97BQ-0-78d612b17ae88b30fdcaf29ff3c9a851)
假设梯度下降(或随机梯度下降)算法的学习率为,模型参数
的更新公式为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P35_11475.jpg?sign=1739308083-xw2aofDfmddurru0ZTsANctq4jcIxQCw-0-f057399b9f684aaf02b22f8e73f1d13a)