我们将 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 更新日志:
修复了 svm 中的
class_weight
支持。线性SVC和linear_model。逻辑回归作者:安德烈亚斯·穆勒。class_weight
的含义被错误地颠倒了在早期版本中,较高的权重意味着给定类的积极性较小。
但是,更新的说明适用于版本 0.13,而不是更高版本。您提到您使用了版本 0.13-git
,也许您使用了未编辑该功能的 0.13 版的预发布版本:这样,更新相对于您的问题可能有意义。
通过查看您的系数,它们在新版本中较低,这与更新的描述说明最初降低了权重有点道理。
您可能希望更改新LogisticRegression(...)
的参数并尝试稍微调整一下。