在 SKLearn Logistic 回归中,class = Balanced 有助于 运行 具有不平衡数据的模型?此选项使用什么方法

In SKLearn Logistic Regression, class = Balanced helps run the model with imbalanced data? what methodology does this option use

阅读了关于随机欠采样、随机过采样和 SMOTE 的内容后,我试图了解 SKlearn 包中用于逻辑回归或随机森林的默认工具使用的是什么方法. 我检查了文档 here

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 或样本少数 class 下创建平衡集

它们非常不同。

SMOTE 将改变数据并通过过采样使数据集平衡(意味着它将生成与少数 class 相似的数据以增加其样本。因此 已创建新 数据集。

在LR中,它并没有使数据集平衡。它不会创建新数据。它只是更多地惩罚少数人 class 的错误 class 化。所以模型会足够小心地处理 class。这就是为什么它被称为 'class_weight'.

正如 numpy.bincount 的文档所述,每个 bin 给出其索引值在 x (https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.bincount.html) 中出现的次数。因此,由于在 sklearn bincounts 使用的表达式中是分母,因此具有高频的 类 获得低权重,而具有低频率的 类 获得高权重。让我们看看实际效果:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame({'classes': [0, 0, 1, 1, 2, 0, 1, 1, 0, 2, 3]})

n_samples = df.shape[0]
classes = df['classes'].unique()
bins = np.bincount(df['classes'])
n_classes = bins.shape[0]

weights = n_samples/(n_classes*bins)

sns.barplot(classes, weights)
plt.xlabel('class label')
plt.ylabel('weight')
plt.show()