我正在学习sklearn中的逻辑回归,并发现了这个链接: http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression
我已经创建了一个实现,可以显示训练和测试的准确性得分。然而,我不太清楚这是如何实现的。我的问题是:什么是最大似然估计?这是如何计算的?错误度量是什么?使用的优化算法是什么?
我理论上了解上述所有内容,但是我不确定scikit-learn在哪里、何时以及如何计算这些,或者我是否需要在某个时候实现这些。我的准确率达到了83%,这是我的目标,但我对scikit-learn是如何实现这一点感到非常困惑。
有谁能指导我正确的方向吗?
回答:
我最近也开始学习逻辑回归,我仍然不理解许多推导步骤,但我认为我理解了使用哪些公式。
首先,让我们假设你使用的是scikit-learn的最新版本,并且使用的求解器是 solver='lbfgs'
(我认为这是默认的)。
代码在这里: https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/logistic.py
什么是最大似然估计?这是如何计算的?
计算似然估计的函数是这个: https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/logistic.py#L57
有趣的一行是:
# Logistic loss is the negative of the log of the logistic function.out = -np.sum(sample_weight * log_logistic(yz)) + .5 * alpha * np.dot(w, w)
这是这个教程的公式7。该函数还计算似然的梯度,然后传递给最小化函数(见下文)。一个重要的事情是,截距是教程中公式的 w0
。但这仅在 fit_intercept
为 True 时有效。
错误度量是什么?
对不起,我不确定。
使用的优化算法是什么?
查看代码中的以下几行: https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/logistic.py#L389
这是这个函数 http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_l_bfgs_b.html
一个非常重要的事情是,类别是+1或-1!(对于二元情况,文献中常见的是0和1,但这行不通)
还要注意,所有公式中都使用了numpy的广播规则。(这就是为什么你看不到迭代)
这是我尝试理解代码的努力。我慢慢地变得疯狂,直到拆解scikit-learn的代码(仅适用于二元情况)。这也作为纯Python实现的灵感
希望这对你有帮助。