【发布时间】:2014-12-02 11:27:36
【问题描述】:
作为对我工作的检查,我一直在比较 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]
【问题讨论】:
-
您可以尝试更改惩罚权重 alpha。它可能没有与之相关的相同标准化,我怀疑它们是否以相同的方式定义或缩放,可能与样本量有关。但我从未检查过。