一、基本概念
过采样是指对训练集中的少数类样本进行重复采样或生成新的合成样本,以增加其数量,从而使正负样本的比例达到平衡或接近平衡。这样做的目的是提高模型对少数类的识别能力,避免模型因忽略少数类而导致的偏差。
二、过采样在逻辑回归中的应用
在逻辑回归中,过采样通常用于预处理阶段,以平衡数据集。一旦数据集被平衡,就可以使用逻辑回归模型进行训练和预测。然而,需要注意的是,过采样可能会引入一些额外的计算成本,特别是在处理大规模数据集时。此外,虽然过采样可以提高模型对少数类的识别能力,但也可能导致模型在预测新数据时出现偏差。因此,在实际应用中,通常需要结合欠采样、调整模型参数或使用特殊算法(如集成学习方法)等策略来综合处理不平衡问题。
三、实例
这里我们通过讲解信用卡贷款的问题来为大家展示过采样的相关用法,包括过采样、模型搭建、混淆矩阵、数据标准化和交叉验证等多种代码的实现与应用。
1、导入相关的包
上述代码主要是导入相关的包并绘制混淆矩阵;
pandas:用于数据处理和分析
numpy:提供高性能多维数组的对象和相关操作的运用。
matplotlib.pylab:用来绘制图像,这里通过绘制图像来展示数据之间的关系
2、对数据进行预处理
读取数据:通过pandas库的read_csv读取数据集。
数据标准化:引入sklearn库,对Amount列数据进行标准化,这里我们对其进行Z标准化操作,将其列内的数据限制在(-1,1)范围内,以便减小Amount列对数据集的影响,同时删除无用列Time并将数据再次赋值给data。
数据集分割:引入sklearn库,同时将data中除去Class列的所有数据全部给X_whole,将Class列给y_whole。通过sklearn库中的train_test_split方法将X_whole与y_whole按随机种子为0,测试数据为原数据的30%来切分成测试集与训练集。
需要注意的是,axis为1的时候代表的是列,为0的时候代表的是行;
random_state是一个随机种子,用于控制随机过程(如样本的选择和合成),以确保每次运行代码时都能得到相同的结果。
3、进行过采样操作
过采样:导入SMOTE类,并通过SMOTE建立一个实例,使用fit_resample方法将SMOTE用于训练训练集数据特征x_train_w与变量y_train_w,并将过采样后的数据返回到特征os_x_train与变量os_y_train中去。
绘制图像:将过采样后返回的数据进行图像绘制,以便查看0、1数据的数量。
拟合操作:对过采样数据再次进行切分,按照测试集为30%的方法切分新的测试集与训练集,让过采样后的数据先进行内部测试。
4、执行交叉验证操作
设置参数:依次设置内部参数,C为正则化强度,正则化系数λ的倒数,float类型,默认为1.0。必须是正浮点型数。penalty为正则化方式,有l1和l2两种,这里我们选择l2方式。Solver为优化拟合参数算法选择,默认为liblinear,这里我们选择lbfgs。max_iter为最大迭代次数,这里我们设置为1000。
交叉验证:通过K折交叉验证来选择最优的惩罚因子,防止过拟合。这里K设置为8。然后计算8次验证后的召回率将其返回到scores中。
寻找最优正则化强度:通过np.argmax方法寻找最大召回率对应的C值
建立模型:取出最优值,然后进行最优的模型建立。
5、模型评估与测试
6、运行结果
四、总结
过采样是逻辑回归中处理不平衡数据集的一种有效方法。通过增加少数类样本的数量,可以平衡数据集,提高模型对少数类的识别能力。然而,在选择过采样方法时,需要考虑其潜在的缺点,并结合实际情况选择最适合的方法。