1

当使用 sklearn LogisticRegression 函数对不平衡的训练数据集(例如,85% pos 类与 15% neg 类)进行二元分类时,将 class_weight 参数设置为 'balanced' 与将其设置为 {0:0.15, 1 之间是否存在差异: 0.85} ? 根据文档,在我看来,使用“平衡”参数与提供字典的作用相同。

类重量

“平衡”模式使用 y 的值自动调整与输入数据中的类频率成反比的权重,如 n_samples / (n_classes * np.bincount(y))。

4

1 回答 1

1

是的,意思是一样的。使用该class_weight='balanced参数,您无需传递确切的数字,您可以自动平衡它。

您可以在此链接中看到更广泛的解释:

https://scikit-learn.org/dev/glossary.html#term-class-weight

确认下一个属性的相似性:

  • class_weight = '平衡'
  • class_weight = {0:0.5, 1:0.5}
  • class_weight = 无

我已经生成了这个实验:

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression

X, y = load_iris(return_X_y=True)
clf_balanced = LogisticRegression(class_weight='balanced', random_state=0).fit(X, y)
clf_custom = LogisticRegression(class_weight={0:0.5,1:0.5}, random_state=0).fit(X, y)
clf_none = LogisticRegression(class_weight=None, random_state=0).fit(X, y)

print('Balanced:',clf_balanced.score(X, y))
print('Custom:',clf_custom.score(X, y))
print('None:',clf_none.score(X, y))

输出是:

Balanced: 0.9733333333333334
Custom:   0.9733333333333334
None:     0.9733333333333334

因此,我们可以凭经验得出结论,它们是相同的。

于 2020-06-15T21:59:07.000 回答