逻辑回归 - class_weight balanced vs dict argument

Logistic Regression - class_weight balanced vs dict argument

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

class_weight

The “balanced” mode uses the values of y to automatically adjust weights inversely proportional to class frequencies in the input data as n_samples / (n_classes * np.bincount(y)).

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

您可以在 link:

中看到更详尽的解释

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

确认下属性相似度:

  • class_weight = 'balanced'
  • class_weight = {0:0.5, 1:0.5}
  • class_weight = None

我生成了这个实验:

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

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