SGD分类器结果和statsmodels的差异导致l1的逻辑结果

时间:2014-10-07 22:10:49

标签: scikit-learn statsmodels

作为对我工作的检查,我一直在将scikit learn的SGDClassifier逻辑实现的输出与statsmodels逻辑进行比较。一旦我将一些l1与分类变量结合起来,我得到的结果就大不相同了。这是不同解决方案技术的结果还是我没有使用正确的参数?

我自己的数据集存在很大差异,但使用mtcars仍然相当大:

 df = sm.datasets.get_rdataset("mtcars", "datasets").data

 y, X = patsy.dmatrices('am~standardize(wt) + standardize(disp) + C(cyl) - 1', df)

 logit = sm.Logit(y, X).fit_regularized(alpha=.0035)

 clf = SGDClassifier(alpha=.0035, penalty='l1', loss='log', l1_ratio=1,
                n_iter=1000, fit_intercept=False)
 clf.fit(X, y)

给出:

sklearn: [-3.79663192 -1.16145654  0.95744308 -5.90284803 -0.67666106]
statsmodels: [-7.28440744 -2.53098894  3.33574042 -7.50604097 -3.15087396]

1 个答案:

答案 0 :(得分:3)

我一直在解决一些类似的问题。我认为简短的回答可能是SGD只用少量样本就不能很好地工作,但是(更多)用更大的数据表现。我有兴趣听听sklearn开发者的消息。比较,例如,使用LogisticRegression

clf2 = LogisticRegression(penalty='l1', C=1/.0035, fit_intercept=False)
clf2.fit(X, y)

非常类似于l1惩罚的Logit。

array([[-7.27275526, -2.52638167,  3.32801895, -7.50119041, -3.14198402]])