L1正则化支持多项式逻辑回归

3
当前的sklearn逻辑回归支持多项式设置,但只允许使用l2正则化,因为求解器l-bfgs-b和newton-cg仅支持l2正则化。Andrew Ng撰写了一篇论文,讨论了为什么l2正则化不应该与l-bfgs-b一起使用。
如果我使用sklearn的SGDClassifier进行对数损失和l1惩罚,那么是否与使用随机梯度下降最小化的l1正则化的多项式逻辑回归相同?如果不是,有没有任何开源的Python包支持多项式逻辑回归的l1正则化损失?

请问您能否添加一下Ng的论文参考文献? - YuppieNetworking
2个回答

3

根据SGD文档

对于多类分类,使用“一对其他”方法。

因此,我认为使用SGDClassifier也无法执行多项式逻辑回归。


您可以使用statsmodels.discrete.discrete_model.MNLogit,它具有fit_regularized方法,支持L1正则化。

下面的示例修改自此示例

import numpy as np
import statsmodels.api as sm
from sklearn.datasets import load_iris
from sklearn.cross_validation import train_test_split

iris = load_iris()
X = iris.data
y = iris.target
X = sm.add_constant(X, prepend=False) # An interecept is not included by default and should be added by the user.
X_train, X_test, y_train, y_test = train_test_split(X, y)

mlogit_mod = sm.MNLogit(y_train, X_train)

alpha = 1 * np.ones((mlogit_mod.K, mlogit_mod.J - 1)) # The regularization parameter alpha should be a scalar or have the same shape as as results.params
alpha[-1, :] = 0 # Choose not to regularize the constant

mlogit_l1_res = mlogit_mod.fit_regularized(method='l1', alpha=alpha)
y_pred = np.argmax(mlogit_l1_res.predict(X_test), 1)

诚然,这个库的接口不像scikit-learn那样易于使用,但它在统计学方面提供了更高级的内容。


谢谢!然而,我尝试将其分成训练集和测试集。使用l1正则化拟合模型会导致一些问题,我在这里也找到了解决方法。在进一步查找后,我发现了一个叫做lightning的软件包,它基本上可以做sklearn所能做的事情,但更多。例如,通过SGD进行多项式支持的l1正则化。 - user1879926
我忘记传递 alpha 参数,所以实际上是在没有正则化的情况下进行拟合。显然,在线性可分的情况下,没有正则化的逻辑回归是无法工作的。顺便说一句,你找到的包确实是一个很好的解决方案。 - yangjie


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