![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=1739021257-nPDiUMG20GWRP1RjYC33q8hCfPDmuERD-0-44cfe114f9e29494b431369ca157151c)
其中,为超平面的法向量,
为偏置。
超平面上方的点都满足:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P29_11212.jpg?sign=1739021257-OHXtSQm6PNAHZ6PziQNDX0CAdeUoMj0e-0-05ccb99c2fee751797b8250458a5437c)
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P30_11221.jpg?sign=1739021257-qs3Bo8eOQqw2GV4f6FXPvCOt5LmLlkQx-0-efd8d692a0ad810ac604ec23e0fe0cb8)
图2-1
而超平面下方的点都满足:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P30_11225.jpg?sign=1739021257-nXv7SPEtwweLHHnVgSLMkKajrA3kvBTC-0-c526550fffec5328f163d1427f82428c)
这意味着,我们可以根据以下的线性函数的值(与0的比较结果)判断实例的类别:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P30_11231.jpg?sign=1739021257-6Jgd7CVz4HCuwycirtkgqzHqyJiamZ0I-0-143a3b5f78b25d6e3d5d5223c770f99d)
分类函数以为输入,输出预测的类别:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P30_11237.jpg?sign=1739021257-lt9uQJEdbDkvhWIChzVury4R2xeZVViR-0-8031eded92fec4b32633d4cc7baac94a)
以上便是线性分类器的基本模型。
2.1.2 logistic函数
显然,最理想的分类函数为单位阶跃函数:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P30_11242.jpg?sign=1739021257-Q2OkER7u73eAuE7HgrSK9OBFxFiIdfil-0-75bdc2aacbe9730de1668e97e9758b1b)
但单位阶跃函数作为分类函数有一个严重缺点:它不连续,所以不是处处可微,这使得一些算法不能得以应用(如梯度下降)。我们希望找到一个在输入输出特性上与单位阶跃函数类似,并且单调可微的函数来替代阶跃函数,logistic函数便是一种常用替代函数。
logistic回归函数定义为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P31_11257.jpg?sign=1739021257-t6OCpVes5WrcjCbtLwZBWmFcvP63VPFe-0-6fac47f082719a5b3e7dfd007f96a6f9)
其函数图像如图2-2所示。
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P31_11260.jpg?sign=1739021257-pgEkTcnwdUbfhjbXy0kkBLq10OMaKshT-0-ba58e94e24ebd080dcca6c1a68544d69)
图2-2
logistic函数是一种Sigmoid函数(S型)。从图2-2可以看出,logistic函数的值域在(0, 1)之间连续,函数的输出可视为条件下实例为正例的条件概率,即:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P31_11267.jpg?sign=1739021257-otaTrngrmnmRtR25KSu429EHluSWxXsw-0-5a20a0bcf5e46061088a8ed8d28490fc)
那么,条件下实例为负例的条件概率为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P31_11273.jpg?sign=1739021257-8S1DYuRwdgp901mso87bEpGINGsSh3ZB-0-2b4b81eb14367096cb54cafe77b02873)
以上概率的意义是什么呢?实际上,logistic函数是对数概率函数的反函数。一个事件的概率(odds)指该事件发生的概率与该事件不发生的概率
的比值。那么,对数概率为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P31_11282.jpg?sign=1739021257-J0BSUdNJQhx0qhvVvfQ9DviYxaitwrcs-0-c0515edc2fb251f8c3ca2eecf5025450)
对数概率大于0表明是正例的概率大,小于0表明是负例的概率大。
Logistic回归模型假设一个实例为正例的对数概率是输入的线性函数,即:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11293.jpg?sign=1739021257-W1xdwpfhhCzYfLbduVvHYddunt3KUs1W-0-c9c3db1f4014e3356d66a55b9fad87a4)
反求上式中的便可得出:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11299.jpg?sign=1739021257-17Vl1UwMXpZvcqCPWJwFVBz5DMslFxXF-0-6aa5a0dded2a86a2e95c9360b9bdb0f2)
理解上述logistic函数概率的意义,是后面使用极大似然法的基础。
另外,logistic函数还有一个很好的数学特性,的一阶导数形式简单,并且是
的函数:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11308.jpg?sign=1739021257-XuuTOkWikvEdib40rtSSiHmuYwUMcyEq-0-de060d73f097528b65aae36ce3c4ced7)
2.1.3 Logistic回归模型
Logistic回归模型假设函数为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11312.jpg?sign=1739021257-B4rC90wm8OIWrjBEkgHNq7Due3hRDAdd-0-4cb3bf451fb4fbb85f366a1e8e97712b)
为了方便,通常将纳入权向量
,作为
,同时为输入向量
添加一个常数1作为
:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11330.jpg?sign=1739021257-H7HfpA6DuAp3ffylP36KYWWB9nSoYsc4-0-f29d6e3a28cf0fcfa90189a944514362)
此时:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11333.jpg?sign=1739021257-LUHBMoT6CpZayR1rTT2xUeCYxI2uHeCR-0-824f7fe8e85248d1f04b68aac6ab24d8)
假设函数为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11336.jpg?sign=1739021257-IMEMxmn8XoX3BAVXdVTeJ0EXbyASyAF0-0-e063f5613cac94ebee2eef582fc79a6e)
的输出是预测
为正例的概率,如果通过训练确定了模型参数
,便可构建二元分类函数:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P32_11346.jpg?sign=1739021257-qf3X5cRGkFTjwPSr8ZKsi4ATo2xi4aAK-0-36d08ccbd64c01339e48b2e6375f13ba)
2.1.4 极大似然法估计参数
确定了假设函数,接下来训练模型参数。对于给定的包含m个样本的数据集
,可以使用极大似然估计法来估计
。
根据的概率意义,有:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P33_11372.jpg?sign=1739021257-BB8SMljk4R6cFo2LnwTRjlONsErN3C4r-0-d26c89df79c329e262231398ff86f8af)
综合上述二式可得出,训练集中某样本
,模型将输入实例
预测为类别
的概率为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P33_11387.jpg?sign=1739021257-qNdWrVkbAnwNCsW0Mgq40M6U87IhxbV0-0-2ad6feb9de55fff44d38d0a87478565e)
训练集中各样本独立同分布,因此我们定义似然函数
来描述训练集中m个样本同时出现的概率为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P33_11396.jpg?sign=1739021257-Kp3mrVF5SuCEjP3cFZMzjm0ZQtvuelty-0-3a4c15d7f21c35064fffa3e2031c4b6f)
极大似然法估计参数的核心思想是:选择参数
,使得当前已经观测到的数据(训练集中的m个样本)最有可能出现(概率最大),即:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P33_11405.jpg?sign=1739021257-R4wjPKd65lBkzLc34qVFmj0THzkjSWxM-0-21b704ae949a2a040c599ef29b116787)
是一系列项之积,求导比较麻烦,不容易找出其最大值点(即求出最大值)。
函数是单调递增函数,因此可将问题转化为找出对数似然函数
的最大值点,即:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P33_11415.jpg?sign=1739021257-uuaJDgIcBltBQhNAewuYPGj4ayIKcdhX-0-a9758f45446c6c1dc13d1ef9feed0c74)
根据定义,对数似然函数为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P33_11418.jpg?sign=1739021257-9ZBAbywy4Yc4QE5dAys33w63Etp158HZ-0-e2227f67fa5e23e51116173f3b1702d2)
经观察可看出,以上对数似然函数是一系列项之和,求导简单,容易找到最大值点,即求出最大值。
2.1.5 梯度下降更新公式
习惯上,我们通常定义模型的损失函数,并求其最小值(找出最小值点)。对于Logistic回归模型,可以定义其损失函数为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P34_11427.jpg?sign=1739021257-VgmV10EWMmjAI2tL5sknVrUDLRIywkLi-0-f2aacfdef07d28c562a162c1f13d1555)
此时,求出损失函数最小值与求出对数似然函数最大值等价。求损失函数最小值,依然可以使用梯度下降算法,最终估计出模型参数。
下面计算损失函数的梯度,从而推出梯度下降算法中
的更新公式。
计算对分量
的偏导数:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P34_11445.jpg?sign=1739021257-m0wZCeD5rnhNbibOtuoIsNe1KvL9CjXa-0-cf56ed3d56a1c6e1186480adcc337ccf)
其中,可解释为模型预测
为正例的概率与其实际类别之间的误差。
由此可推出梯度计算公式为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P34_11457.jpg?sign=1739021257-vNHWXUmzfuKiuW1xkWwLphHh3IgyQiMt-0-c60af564eca84e75c32dbf0af57bb463)
对于随机梯度下降算法,每次只使用一个样本来计算梯度(m=1),相应梯度计算公式为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P34_11463.jpg?sign=1739021257-fVKZ960eEj2vRiL955zZ80zCuoQQSvFF-0-39b26ef06a731eca9f4801e7a4906d0a)
假设梯度下降(或随机梯度下降)算法的学习率为,模型参数
的更新公式为:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P35_11475.jpg?sign=1739021257-iHqIv4fqin8MJH8tUjMdAuZgiBHtxddx-0-f1f76cdd75ed411fe453069c1bd5ac1f)