l1正规化支持多项Logistic Regresion

时间:2015-08-03 21:35:48

标签: python machine-learning scikit-learn

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

如果我使用具有对数丢失和l1惩罚的sklearn的SGDC分类器,那么与随机梯度下降最小化l1正则化的多项logistic回归是否相同?如果没有,是否有任何开源python包支持多项逻辑回归的l1正则化损失?

2 个答案:

答案 0 :(得分:2)

根据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那么容易使用,但它提供了更高级的统计数据。

答案 1 :(得分:1)