sklearn中的逻辑回归函数

5
我正在学习来自sklearn的逻辑回归,并发现了这个网址:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression 我已经创建了一个实现,可以显示训练和测试的准确率分数。然而,这是如何实现的非常不清楚。我的问题是:什么是最大似然估计?这是如何计算的?什么是误差度量?使用的优化算法是什么?
我理论上知道上述所有内容,但我不确定scikit.learn何时何地以及如何计算它,或者是否需要在某些时候实现它。我有一个83%的准确率,这是我想要的,但我对scikit learn如何实现它感到非常困惑。
有人能指点我吗?
3个回答

11

最近我开始自学逻辑回归,虽然我仍然不理解其演导的许多步骤,但我认为我理解了使用的哪些公式。

首先假设您正在使用最新版本的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代码(仅适用于二元情况)。同时这也启发了我进行了灵感创作

希望有所帮助。


谢谢,那非常有帮助。 - user2233834

2
请查看吴恩达教授有关逻辑回归的机器学习笔记(从第16页开始):http://cs229.stanford.edu/notes/cs229-notes1.pdf 在逻辑回归中,您最小化交叉熵(从而最大化给定x时y的可能性)。为了做到这一点,计算交叉熵(成本)函数的梯度,并用它来更新分配给每个输入的算法权重。简单地说,逻辑回归通过改变其参数,找到最能区分两个二进制类别的线条,以使交叉熵不断下降。83%的准确率(我不确定这是什么准确率; 您应该将数据分成训练/验证/测试)意味着逻辑回归用于分类的线条可以正确地分离类别的83%的时间。

1
这个答案部分正确。是的,LR最大化交叉熵,但scikit-learn实现使用坐标下降,而不是梯度下降。 - Fred Foo

1

最好发表更加实质性的回答,而不仅仅是一个链接,请进行扩展。 - EdChum
由于CG和L-BFGS(而不是BFGS!)代码仅在上周合并到代码库中,因此很可能OP没有运行此代码。 - Fred Foo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接