如果想要自己编写代码实现逻辑斯谛回归,只要将第2章中的代价函数J替换为下面的代价函数:
该函数通过计算每次迭代过程中训练所有样本的成本,最终得到一个可用的逻辑斯谛回归模型。然而,由于scikit-learn已经有现成的经过高度优化的逻辑斯谛算法,而且还支持多类别分类,因此,我们不再尝试自己实现算法,转而使用sklearn.linear_model.LogisticRegression类来完成,同时使用我们已经非常熟悉的fit方法在鸢尾花训练数据集上训练模型。
在训练集上对模型进行训练后,我们在二维图像中绘制了决策区域、训练样本和测试样本,如下图所示:
分析前面用来训练LogisticRegression模型的代码,你也许会思考:“那个神秘的参数C代表什么?”下一节会先介绍一下过拟合和正则化的概念,然后再来讨论这个神秘的参数。
此外,可以通过predict_proba方法来预测样本属于某一类别的概率。例如,可以预测第一个样本属于各个类别的概率:
通过此代码可得到如下数组:
此数组表明模型预测此样本属于Iris-Virginica的概率为93.7%,属于Iris-Versicolor的概率为6.3%。
可以证明,逻辑斯谛回归中的回归系数更新用到的梯度下降本质上与第2章中的公式是相同的。首先,计算对数似然函数对第j个权重的偏导:
在进入下一步之前,先计算一下sigmoid函数的偏导:
我们的目标是求得能够使对数似然函数最大化的权重值,在此需按如下公式更新所有权重:
由于我们是同时更新所有的权重的,因此可以将更新规则记为:
其中,Δw定义为:
由于最大化对数似然函数等价于最小化前面定义的代价函数J,因此可以将梯度下降的更新规则定义为:
这等价于第2章中的梯度下降规则。