不同版本的sklearn给出了截然不同的训练结果

时间:2015-04-18 18:46:23

标签: python scikit-learn logistic-regression

我们将sklearn从旧的0.13-git升级到0.14.1,并发现我们的逻辑回归分类器的性能发生了很大变化。用相同数据训练的两个分类器具有不同的系数,因此经常给出不同的分类结果。

作为实验,我使用5个数据点(高维)来训练LR分类器,结果是:

0.13 GIT中:

clf.fit(data_test.data, y)
LogisticRegression(C=10, class_weight='auto', dual=False, fit_intercept=True,
intercept_scaling=1, penalty='l2', tol=0.0001)
np.sort(clf.coef_)
array([[-0.12442518, -0.11137502, -0.11137502, ..., 0.05428562,
0.07329358, 0.08178794]])

0.14.1:

clf1.fit(data_test.data, y)
LogisticRegression(C=10, class_weight='auto', dual=False, fit_intercept=True,
intercept_scaling=1, penalty='l2', random_state=None, tol=0.0001)
np.sort(clf1.coef_)
array([[-0.11702073, -0.10505662, -0.10505662, ..., 0.05630517,
0.07651478, 0.08534311]])

我会说差异很大,在10 ^( - 2)的范围内。显然,我在这里使用的数据并不理想,因为要素的维度远大于条目的数量。但是,实际情况也是如此。 它与功能选择有关吗?如何使结果与以前一样?我理解新结果不一定比以前更差,但现在重点是尽可能使它们保持一致。 感谢。

1 个答案:

答案 0 :(得分:2)

以下是what's new页面中有关版本0.13的评论:

Fixed class_weight support in svm.LinearSVC and linear_model.LogisticRegression
by Andreas Müller. The meaning of class_weight was reversed as erroneously
higher weight meant less positives of a given class in earlier releases.

但是,更新的说明适用于版本0.13,而不是更高版本。您提到您使用的是版本0.13-git,也许您使用了版本0.13的预发行版,其中未编辑该功能:这样,更新可能与您的问题相关。

通过查看你的系数,它们在新版本中较低,这对于更新的描述表明权重最初降低有点意义。

您可能想要更改新的LogisticRegression(...)参数,并尝试稍微调整一下。