我理论上知道上述所有内容,但我不确定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代码(仅适用于二元情况)。同时这也启发了我进行了灵感创作
希望有所帮助。