【问题标题】:l1 regularized support for Multinomial Logistic Regresionl1 对多项 Logistic 回归的正则化支持
【发布时间】:2015-08-03 21:35:47
【问题描述】:

当前的 sklearn LogisticRegression 支持多项式设置,但仅允许 l2 正则化,因为求解器 l-bfgs-b 和 newton-cg 仅支持该设置。 Andrew Ng 有一篇论文讨论了为什么 l2 正则化不应该与 l-bfgs-b 一起使用。

如果我使用带有 log loss 和 l1 惩罚的 sklearn 的 SGDClassifier,这是否与通过随机梯度下降最小化 l1 正则化的多项逻辑回归相同?如果没有,是否有任何开源 python 包支持多项逻辑回归的 l1 正则化损失?

【问题讨论】:

  • 能否请您添加对 Ng 论文的引用?

标签: python machine-learning scikit-learn


【解决方案1】:

根据SGD documentation

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

所以我认为使用SGDClassifier 也不能执行多项逻辑回归。


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

下面的例子是从this example修改而来的:

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 正则化拟合模型导致了几个问题,I found to be addressed here as well 环顾四周后,我发现这个名为 Lighting 的包基本上完成了 sklearn 的工作,但更多。 For example, there is multinomial support for l1 regularization via SGD.
  • 我忘了传递alpha 参数,所以它实际上是在没有正则化的情况下拟合的。显然,没有正则化的逻辑回归不能在线性可分的情况下工作。顺便说一句,你找到的包确实是一个很好的解决方案。
【解决方案2】:
猜你喜欢
  • 2021-12-24
  • 2021-08-18
  • 2021-04-10
  • 2020-09-23
  • 1970-01-01
  • 2018-08-09
  • 2015-09-17
  • 1970-01-01
  • 2017-08-26
相关资源
最近更新 更多