sklearn上的逻辑回归函数



我正在从sklearn学习逻辑回归,并遇到了这个:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression

我已经创建了一个实现,它向我展示了训练和测试的准确性分数。然而,目前尚不清楚这是如何实现的。我的问题是:最大似然估计是什么?这是怎么计算出来的?误差测量是什么?使用什么优化算法?

理论上我知道上述所有,但我不确定何时何地以及如何。learn计算它,或者我需要在某个时候实现它。我有83%的准确率,这是我的目标,但我很困惑scikit learn是如何实现的。

有人能给我指个正确的方向吗?

我最近开始自己学习LR,我仍然不知道推导的很多步骤,但我想我知道使用的是哪些公式。

首先,让我们假设您正在使用最新版本的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为真才有效

误差测量是什么?

对不起,我不确定。

使用的优化算法是什么?

请参阅代码中的以下行: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代码拆开(它只适用于二进制情况)。这也起到了启发作用

希望能有所帮助。

查看Andrew Ng教授关于逻辑回归的机器学习笔记(从第16页开始):http://cs229.stanford.edu/notes/cs229-notes1.pdf

在逻辑回归中,你最小化交叉熵(反过来最大化y给定x的可能性)。为了做到这一点,交叉熵(成本)函数的梯度正在被计算,并用于更新分配给每个输入的算法的权重。简单地说,逻辑回归是一条线,它通过改变参数,使交叉熵不断下降,从而最好地区分两个二值类。83%的准确率(我不确定这是什么准确率;你应该把你的数据投入到训练/验证/测试中),这意味着逻辑回归用于分类的那条线可以在83%的时间内正确地分离类别。

我会看看github上的以下内容:

https://github.com/scikit-learn/scikit-learn/blob/965b109bf2ac3a61dcbd02bc29dd8c9598c2b54c/sklearn/linear_model/logistic.py

链接是sklearn逻辑回归的实现。它包含了所使用的优化算法,包括牛顿共轭梯度(newton-cg)和bfgs (broyden fletcher goldfarb shanno算法),所有这些算法都需要计算损失函数(_logistic_loss)的黑方差。_logistic_loss是似然函数。

相关内容

  • 没有找到相关文章

最新更新