下采样
在逻辑回归中,下采样是一种处理数据不平衡问题的方法,特别是在处理二分类问题时,如果某一类的样本数量远多于另一类,就可能导致模型偏向于多数类,从而忽略了少数类的特征。下采样通过减少多数类样本的数量,使得两类样本的数量接近,从而改善模型的性能。
优缺点
- 优点:
- 可以有效减少多数类样本的数量,使数据更加平衡。
- 有助于提高模型对少数类的识别能力。
- 缺点:
- 可能会导致信息损失,因为删除了部分多数类样本。
- 如果删除的样本中包含重要信息或特征,可能会影响模型的泛化能力。
那么我们如何知道,什么时候使用下采样方法呐?
下采样步骤
实验数据:
链接:训练数据
提取码:0qw2
- 数据观察:首先,需要观察数据集的分布情况,特别是目标变量的分布,以确定是否存在数据不平衡问题。
#一、数据预处理
data = pd.read_csv('creditcard.csv')
data = data.drop('Time',axis=1)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data['Amount'] = scaler.fit_transform(data[['Amount']])
#二、绘制图像,查看正负样本个数
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus'] = False
lei_count = pd.value_counts(data['Class'])
plt.title('样本数')
plt.xlabel('类别')
plt.ylabel('数量')
lei_count.plot(kind = 'bar')
plt.show() #通过可视化查看样本数量差异
#(此处发现,样本数相差数量过大,进行下取样操作)
可以发现,类别为1的样本数量几乎不可见,样本极度不均衡。
- 选择样本:采用下采样,从多数类样本中随机选择一部分样本,选择的样本数量通常与少数类的样本数量相等或接近,以达到数据平衡的目的。
#进行下采样
#分别取出类别为0和1的数据
category_0 = data[data['Class'] == 0]
category_1 = data[data['Class'] == 1]
#将需要进行下采样的数据使用sample方法下采样
np.random.seed(seed=4)
choose_0 = category_0.sample(len(category_1)) #随机取出和类别1长度相等的数据
new_data = pd.concat([choose_0,category_1]) #将随机取出的0类数据与1类数据上下合并
#这样我们就得到了此刻的训练数据new_data:是由抽取的部分类别为0的数据以及类别为一的数据组成
#此处我们还可以再看看视图,查看样本数
- 构建模型:使用下采样后的数据集来训练逻辑回归模型。由于数据已经平衡,模型在训练过程中会更加关注少数类的特征,从而提高对少数类的识别能力。
from sklearn.linear_model import LogisticRegression
x = new_data.drop('Class',axis=1)
y = new_data.Class
#分割训练集和测试集
train_x,test_x,train_y,test_y = \
train_test_split(x,y,test_size=0.3,random_state=0)
lr = LogisticRegression(max_iter=1000)
lr.fit(train_x,train_y)
- 模型评估:使用测试集对模型进行评估,观察模型在少数类和多数类上的表现。需要注意的是,由于下采样过程中删除了部分多数类样本,因此评估结果可能受到一定影响。
from sklearn import metrics
test_x_predict = lr.predict(test_x)
print(metrics.classification_report(test_y,test_x_predict))
-------------------------
precision recall f1-score support
0 0.91 0.97 0.94 147
1 0.97 0.90 0.93 149
accuracy 0.94 296
macro avg 0.94 0.94 0.94 296
weighted avg 0.94 0.94 0.94 296
总结
本篇介绍了:
- 什么是下采样:一种处理数据不平衡问题的方法。
- 下采样的过程:从多数类样本中随机选择一部分样本,选择的样本数量通常与少数类的样本数量相等或接近。
- 如何进行下采样:使用sample方法取出和少数类数量相等的数据,再将新得到的样本同原本少数类的样本合并,作为新的训练集。