【机器学习】--过采样原理及代码详解

过采样(Oversampling)是一个在多个领域都有应用的技术,其具体含义和应用方法会根据领域的不同而有所差异。以下是对过采样技术的详细解析,主要从机器学习和信号处理两个领域进行阐述。

一、机器学习中的过采样

在机器学习中,过采样是一种处理样本不平衡问题的方法。具体来说,它通过增加少数类别的样本数量,以平衡训练数据集中各个类别之间的比例,从而提高机器学习模型对少数类别的分类性能。

过采样的优点在于能够提高模型对少数类别的分类性能,降低误分类率。然而,过度依赖过采样可能导致模型对训练数据过拟合,从而在未知数据上表现不佳。因此,在实施过采样时需要注意适度和合理性,避免过度泛化。

二、过采样SMOTE算法

SMOTE算法的基本思想是对少数类样本进行分析并根据这些样本人工合成新样本添加到数据集中,从而使得原始数据中的类别分布更加均衡。该算法通过K近邻(KNN)技术来模拟生成新的少数类样本,从而避免了随机过采样中简单复制样本可能导致的过拟合问题。

1.SMOTE算法步骤

计算K近邻:对于少数类中的每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,并进行排序,从而得到其K个最近邻(KNN)。

随机选择近邻并生成新样本:1)根据样本不平衡比例设置一个采样比例(如采样倍率N),对于每一个少数类样本x,从其K个近邻中随机选择N个样本(实际操作中,N可能小于或等于K)。

2)对于每一个随机选出的近邻xn,根据原样本x和近邻xn的特征值,通过线性插值的方式生成新的样本。具体来说,可以在x和xn的特征值之间插入一个随机因子(范围在0到1之间),然后将这个因子乘以两者之间的差值,并加到原样本x的特征值上,从而得到新的样本。

合并数据集:将所有生成的新样本与原数据集合并,形成新的训练集。

原始数据:

SMOTE过采样后:

代码示例:

python 复制代码
from collections import Counter
from sklearn.datasets import make_classification
from imblearn.over_sampling import SMOTE
import numpy as np

# 创建一个不平衡的数据集作为示例  
X, y = make_classification(n_classes=2, class_sep=2,
                           weights=[0.1, 0.9], n_informative=3, n_redundant=1, flip_y=0,
                           n_features=4, n_clusters_per_class=1, n_samples=1000, random_state=10)

print('原始数据集形状 %s' % Counter(y))

# 应用SMOTE算法  
sm = SMOTE(random_state=42)
X_res, y_res = sm.fit_resample(X, y)

print('重采样后的数据集形状 %s' % Counter(y_res))

# 可选:使用matplotlib来可视化结果(这里仅展示数据形状的变化,可视化原始数据和高维数据通常更复杂)  
import matplotlib.pyplot as plt

# 由于数据是高维的,我们无法直接绘制,但我们可以绘制重采样前后类别的数量  
labels = ['original data', 'smote data']
counts = [Counter(y)[0], Counter(y_res)[0]]  # 假设我们关注的是少数类  

plt.bar(labels, counts, color=['blue', 'orange'])
plt.xlabel('datasets')
plt.ylabel('data')
plt.title('SMOTE')
plt.show()

总结

SMOTE(Synthetic Minority Over-sampling Technique)是一种针对不平衡数据集的有效过采样方法。它通过在少数类样本之间插值来生成新的合成样本,从而增加少数类样本的数量,使得数据集在类别分布上更加平衡。这种方法有助于改善分类算法在处理不平衡数据集时的性能,减少模型对多数类的偏见。

总的来说,SMOTE是一种实用且强大的技术,能够有效解决数据不平衡问题,提升分类模型的准确性和鲁棒性。

相关推荐
howdoyoudo2026062 分钟前
AI审计手记 #30:从“政府网站”到“商业平台”——腾讯云沙箱AI代理越界事件的审计分析
大数据·人工智能·安全·机器学习·语言模型·云计算·腾讯云
大貔貅喝啤酒6 分钟前
Unittest框架使用教程
自动化测试·python
产品设计大观7 分钟前
AI生成冷链仓储温控异常处置后台实战:从告警到质控复核的完整案例
人工智能
data analyse 4567 分钟前
页面卸载时埋点上报总丢失?sendBeacon 上报与补偿方案
大数据·运维·服务器·前端·数据库·人工智能·数据分析
企查查数据服务8 分钟前
充电桩集采准入:用企业数据做供应商失信批量核验
大数据·数据库·人工智能
xier_ran10 分钟前
【infra之路】AI 编译器学习笔记(八):向量化——把小块变成 SIMD 指令
人工智能·笔记·学习
·云扬·12 分钟前
大模型幻觉:为什么会编造,如何缓解
人工智能·ai
chaoyuanl17 分钟前
超元力VR大空间CS项目落地解决方案:五大选购要点,开店全程扶持
大数据·人工智能·vr
aneasystone本尊19 分钟前
学习大模型训练的分词器:从语料到词表
人工智能
Geeys20 分钟前
多多搜索操作指南|拼多多商家从 0 到 1 实操教程(自定义 + OCPX、选词、出价、投产优化)
大数据·网络·人工智能