当前的sklearn LogisticRegression支持多项设置,但只允许l2正则化,因为求解器l-bfgs-b和newton-cg仅支持它。 Andrew Ng的论文讨论了为什么l2正则化不应该与l-bfgs-b一起使用。
如果我使用具有对数丢失和l1惩罚的sklearn的SGDC分类器,那么与随机梯度下降最小化l1正则化的多项logistic回归是否相同?如果没有,是否有任何开源python包支持多项逻辑回归的l1正则化损失?
答案 0 :(得分:2)
对于多类别分类,使用“一对一”方法。
所以我认为使用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)