逻辑回归 - 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
因此,我们可以根据经验得出结论,它们是相同的。
当使用 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
因此,我们可以根据经验得出结论,它们是相同的。