机器学习入门 9-4 实现逻辑回归算法

  • 2020 年 2 月 26 日
  • 筆記

把现在的工作做好,才能幻想将来的事情,专注于眼前的事情,对于尚未发生的事情而陷入无休止的忧虑之中,对事情毫无帮助,反而为自己凭添了烦恼。

全文字数:864字

阅读时间:8分钟

前言

本系列是《玩转机器学习教程》一个整理的视频笔记。本小节主要依据sklearn的设计理念封装我们自己的逻辑回归算法,最后在jupyter中调用并实现。

a

实 现 逻 辑 回 归 算 法

在之前的小节中详细推导了逻辑回归算法的损失函数。由于逻辑回归算法没有解析解,只能通过梯度下降算法更新迭代求解,因此我们又详细推导了损失函数相应的梯度向量以及向量化的梯度表达式。

通过之前的学习我们知道逻辑回归算法和线性回归算法有很多相似之处,我们完全可以在原来实现的LinearRegression基础上修改成LogisticRegression。

接下来就具体的实现我们自己的逻辑回归算法:

  • 导入相应的模块

由于逻辑回归算法解决的是分类问题,所以通过accuracy_score准确率来评估模型的好坏。

在这里我们仿照sklearn中的设计模式,将LogisticRegression封装成类,通过在类中定义方法实现相应的算法逻辑。

  • 初始化类的方法
  • 实现批量梯度下降法

逻辑回归没有数学解析解,所以只能通过梯度下降算法来求解。在本小节先不实现随机梯度下降法,只实现批量梯度下降法。

相对于线性回归来说,添加了私有的Sigmoid函数,更改了计算损失函数的J函数以及计算梯度值的dJ函数。

  • 实现预测方法

逻辑回归能够判断样本属于某一个类别的概率值,为了得到概率值创建一个新的predict_proba函数,它的功能是给定待预测数据集X_predict,返回表示X_predict结果的概率向量。

  • 评估模型准确度函数

完整的逻辑回归LogisticRegression类:

接下来就可以在jupyter中调用我们封装好的LogisticRegression了。

b

调 用 封 装 好 的 LogisticRegression

分类准确度为1,表示模型把测试样本都分类正确了。当然这是因为鸢尾花数据集太简单了。

模型对于每一个测试样本都有一个概率值,我们可以直接调用封装好的predict_proba函数来得到概率值向量。对于一个样本,模型估计的概率值越接近于1,模型越倾向于将这个样本划分成"类别1",模型评估的概率值越接近于0,模型越倾向于将这个样本划分成"类别0"。