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

标签 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) 的范围内。显然我这里使用的数据并不理想,因为特征的维度远远大于条目的数量。然而,实践中也经常出现这种情况。 它与特征选择有关吗?我怎样才能使结果和以前一样?我明白新的结果不一定比以前差,但现在的重点是让它们尽可能一致。 谢谢。

最佳答案

来自 0.13 版 changelog :

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(...) 的参数并尝试稍微调整一下。

关于python - 不同版本的 sklearn 给出了截然不同的训练结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29721386/

相关文章:

python - 在 Python 中获取 MP3 文件句柄的长度

python - 为什么FunctionTransformer会通过check_inverse?

linux - 当我从 scikit-learn 导入一些东西时,我有大量的上下文切换

python - sklearn.linear_model.LogisticRegression 每次都返回不同的系数,尽管设置了 random_state

python - Seaborn Regplot 和 Scikit-Learn 逻辑模型的计算方式不同?

用于简单 Logistic 回归的 Python Vanilla 代码

python - 在 Geany (Ubuntu) 上从 python 禁用/关闭/退出/退出终端屏幕

python - 路径 '%s' 不能是绝对路径"% 路径名

python - 了解类内的 python 变量范围

python - 如何获得 tf-idf 分类器的最佳特征?