蜗壳机器学习指南:逻辑斯特回归

逻辑斯特回归并不是用来解决回归问题的,而是用于分类。那为什么名字里带有回归呢?并不是大佬们起错了名字,而是因为它在进行分类前需要先得到回归的直线。逻辑斯谛回归函数(实际上就是Sigmoid函数)(公式0):

上式就是我们得到的逻辑斯特回归的预测模型。我们画出它的曲线:

将新的待预测的样本输入到该模型,求出的值,我们设为h(x),即为该样本是正例的概率;则1-h(x)即为该样本是负例的概率。我们比较一下这两个概率的值即可判定样本属于哪一类。

接下来我们来推导逻辑斯特回归的损失函数。首先我们写出给定一个样本x,判断出的它的类别的概率(公式1):

我们可以将这两个式子写在一起(公式2):

分别令y等于1或0,正好对应于前面的两个式子。我们想要求解的参数值w可以使得训练样本观测值的概率最大,所以可以使用最大似然估计来求解参数w。对上式取似然函数(公式3):

接下来,我们使用log函数将乘法变为加法,即取对数似然函数(公式4):

最大似然估计就是要求解使得上式最大的w值。我们可以得到损失函数为(公式5):

于是我们就可以使用梯度下降法来求解上式的最小值,得到的w即为所求。我们来看利用梯度下降法得到的参数w的更新策略。对于上式,利用链式求导法则,对w求导,得(公式6):

其中j=0,1,...,D。D表示样本x的维度。于是可得参数更新的策率为(公式7):

纸上得来终觉浅,接下来我们一起代码实现逻辑斯特回归。首先定义一个类及其初始化方法:

接下来我们来定义整个训练的框架,也就是trian函数:即对于每一次迭代,更新一次权重,每隔一段迭代次数,输出当前的损失。代码如下:

注意到其中有两个关键的函数:Gradient_Descent和Cost_Function。我们现在只需要分别搞定这两个函数。我们现在来Cost_Function,损失函数,就是我们前面推导得到的公式5。我们将公式5用代码实现:

注意到其中使用了一个h(x)函数,就是我们前面的公式0。我们来实现这个公式:

至此我们已经完成了Cost_Function,接下来我们来实现另一个函数Gradient_Descent,进行梯度的更新。即实现公式7,代码如下:

注意到其中用到了公式6。我们进行公式6的实现:

所有公示的实现都是与公式一一对应的。至此我们就完成了训练部分的实现。下面我们来实现测试结果的函数test。

哈,至此我们就完成了整个逻辑斯特回归的代码。最后来利用一个数据集,测试下我们的代码。数据集格式如图所示:

数据读取方式为:

最终我们进行测试:

编辑:蜗壳小肥 马宁馨

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180905G0NI8600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券