![Python机器学习算法: 原理、实现与案例](https://wfqqreader-1252317822.image.myqcloud.com/cover/317/27563317/b_27563317.jpg)
上QQ阅读APP看书,第一时间看更新
2.3 编码实现
2.3.1 Logistic回归
我们基于梯度下降实现一个Logistic回归分类器,代码如下:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P37_33068.jpg?sign=1739694351-GSo0HxfdDxo3eOlDc6aPXQTUWD44gV9i-0-af9b60d2001cf53d0292e6db8d518a97)
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P39_33070.jpg?sign=1739694351-RELsOiqS3XAGHaavu6RWu7rONmsk7kMl-0-299c7d947b6c4c6f3c46f88c1f57da69)
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P40_33071.jpg?sign=1739694351-k7x7DixTuyI31SSUREnEaI07ucPf6FLb-0-16a8d85db421361d149e504179d567cc)
上述代码简要说明如下(详细内容参看代码注释):
- __init__()方法:构造器,保存用户传入的超参数。
- _z()方法:实现线性函数
,计算
与
的内积(即点积,或称为数量积)。
- _sigmoid()方法:实现logistic函数
。
- _predict_proba()方法:实现概率预测函数
,计算
为正例的概率。
- _loss()方法:实现损失函数
,计算当前
下的损失,该方法有以下两个用途。
- ◆ 供早期停止法使用:如果用户通过超参数tol启用早期停止法,则调用该方法计算损失。
- ◆ 方便调试:迭代过程中可以每次打印出当前损失,观察变化的情况。
- _gradient()方法:计算当前梯度
。
- _gradient_descent()方法:实现批量梯度下降算法。
- _preprocess_data_X()方法:对
进行预处理,添加
列并设置为1。
- train()方法:训练模型。该方法由3部分构成:
- ◆ 对训练集的X_train进行预处理,添加
列并设置为1。
- ◆ 初始化模型参数w,赋值较小的随机数。
- ◆ 调用_gradient_descent()方法训练模型参数
。
- ◆ 对训练集的X_train进行预处理,添加
- predict()方法:预测。对于
中每个实例,若模型预测其为正例的概率大于等于0.5,则判为正例,否则判为负例。
2.3.2 Softmax回归
我们再基于随机梯度下降实现一个Softmax回归分类器,代码如下:
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P41_33072.jpg?sign=1739694351-R7o4OMYKlhioQuyK43QtxjXqHu6smaJC-0-6c9f260aeec2eba77f8b810c60cd341a)
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P42_33074.jpg?sign=1739694351-Y3QQE3cuk0LkbZW5VHcNqP5u3vuHR7AK-0-2b26b5b369d79c6e0a61ef94496b97c2)
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P43_33075.jpg?sign=1739694351-k9zdR7SUoTVmtmQr0mLzZJtY1gfpXdIK-0-64d6d3b3d1cda8d445ec7772c10bd513)
![](https://epubservercos.yuewen.com/889FA0/15825992205221106/epubprivate/OEBPS/Images/Figure-P44_33076.jpg?sign=1739694351-VG3h1sgVwZ3H4q3L35VA8aPJ9PsmzT6s-0-03f54581433d90da2bf62fc5eafeb227)
上述代码简要说明如下(详细内容参看代码注释)。
- __init__()方法:构造器,保存用户传入的超参数。
- _z()方法:实现线性函数
,计算各个
与
的内积。
- _softmax()方法:实现softmax函数
。
- _predict_proba()方法:实现概率预测函数
,计算
为各个类别的概率。
- _loss()方法:实现损失函数
,计算当前
下的损失。该方法有以下两个用途:
- ◆ 供早期停止法使用:如果用户通过超参数tol启用早期停止法,则调用该方法计算损失。
- ◆ 方便调试:迭代过程中可以每次打印出当前损失,观察变化的情况。
- _gradient()方法:计算当前梯度
。
- _stochastic_gradient_descent()方法:实现随机梯度下降算法。
- _preprocess_data_X()方法:对
进行预处理,添加
列并设置为1。
- train()方法:训练模型。该方法由3部分构成:
- ◆ 对训练集的X_train进行预处理,添加
列并设置为1。
- ◆ 初始化模型参数w,赋值较小的随机数。
- ◆ 调用_stochastic_gradient_descent()方法训练模型参数
。
- ◆ 对训练集的X_train进行预处理,添加
- predict()方法:预测。对于
中每个实例,计算由各线性函数值
构成的向量
,以其最大分量的索引作为预测类别。