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

Python 在SKLearn Logistic回归中,class=Balanced有助于使用不平衡数据运行模型?此选项使用什么方法,python,scikit-learn,random-forest,logistic-regression,sampling,Python,Scikit Learn,Random Forest,Logistic Regression,Sampling,在阅读了随机欠采样、随机过采样和SMOTE之后,我试图了解SKlearn包中用于逻辑回归或随机林的默认实现所使用的方法。 我查过文件了 balanced模式使用y值自动调整权重,与输入数据中的类别频率成反比,如n个样本/(n个类别*np.bincount(y)) 我无法理解在样本多数类或样本少数类下创建平衡集的方法,因为它们非常不同 SMOTE将改变数据,并通过过采样使数据集保持平衡(这意味着它将生成与少数类相似的外观数据,以增加其样本。因此创建新的数据集 在LR中,它不会使数据集保持平衡。它不

在阅读了随机欠采样、随机过采样和SMOTE之后,我试图了解SKlearn包中用于逻辑回归或随机林的默认实现所使用的方法。 我查过文件了

balanced模式使用y值自动调整权重,与输入数据中的类别频率成反比,如n个样本/(n个类别*np.bincount(y))


我无法理解在样本多数类或样本少数类下创建平衡集的方法,因为它们非常不同

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


在LR中,它不会使数据集保持平衡。它不会创建新的数据。它只会进一步惩罚少数群体的错误分类。因此,该模型将非常小心地处理该类。这就是为什么它被称为“类权重”

它们非常不同

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


在LR中,它不会使数据集保持平衡。它不会创建新数据。它只会进一步惩罚少数类的错误分类。因此,模型会非常小心地处理该类。这就是为什么它被称为
“class\u weight”

,因为numpy.bincount的文档说明,每个bin都给出了f的索引值为x()。因此,由于在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()      

正如numpy.bincount的文档所述,每个bin以x()表示其索引值的出现次数。因此,由于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()      

谢谢你,这是有意义的!谢谢你,这是有意义的!本博客提供了与OP相关的良好信息。因此,当使用class_权重,而不是通常的交叉熵时,它使用加权交叉熵作为损失函数。加权交叉熵=−w1*YLG(p)− w2*(1)−y) 日志(1)−p) 本博客提供了与OP相关的良好信息。因此,当使用class_权重时,而不是通常的交叉熵,它使用加权交叉熵作为损失函数。加权交叉熵=−w1*YLG(p)− w2*(1)−y) 日志(1)−(p)