首页/新闻资讯/正文详情

SMOTE算法解决机器学习中的类别不平衡问题

发布时间:2026/11/11 12:05:27 来源:云帆数科 栏目:资讯中心
SMOTE算法解决机器学习中的类别不平衡问题
1. 不平衡分类问题的现实挑战在机器学习分类任务中我们经常会遇到一个令人头疼的问题——类别不平衡。想象一下你正在训练一个信用卡欺诈检测模型真实场景中可能每10000笔交易里只有1笔是欺诈交易。这种情况下如果直接拿原始数据训练模型算法很可能会直接躺平把所有样本都预测为正常交易因为这样就能轻松达到99.99%的准确率。我在金融风控领域工作多年见过太多新手掉进这个陷阱。记得2018年我们团队接手一个银行贷款违约预测项目时原始数据中正常还款客户占比高达98.7%。当时有个实习生直接用这个数据训练随机森林模型测试集准确率高达98.5%看起来很美对吧但实际一查模型把所有样本都预测为正常还款对违约客户的召回率是0这种模型放到生产环境就是灾难。2. SMOTE算法的核心思想2.1 传统过采样方法的局限性在SMOTE出现之前处理类别不平衡最直接的方法就是过采样——简单复制少数类样本。但这种方法存在明显缺陷容易导致过拟合因为模型会反复看到完全相同的样本无法增加决策边界附近的关键样本信息对噪声样本也会等比例放大我在早期项目中尝试过简单过采样发现模型在训练集上表现很好但测试集效果很差。后来分析发现模型只是记住了重复样本的特征并没有真正学到区分边界。2.2 SMOTE的创新之处SMOTESynthetic Minority Over-sampling Technique由Nitesh Chawla等人于2002年提出其核心思想不是简单复制少数类样本而是智能地生成新样本。具体来说对每个少数类样本x找到它的k个最近邻通常k5随机选择一个邻居x在x和x的连线上随机选择一个点作为新样本数学表达式为 x_new x λ × (x - x) 其中λ是[0,1]间的随机数这种方法的优势在于增加了决策边界附近的样本密度生成的样本具有多样性避免简单复制能有效扩展少数类的特征空间3. SMOTE的完整实现流程3.1 基础环境准备Python实现推荐使用imbalanced-learn库imblearn这是scikit-learn生态中专用于不平衡学习的工具包。安装命令pip install imbalanced-learn基础导入import numpy as np from sklearn.datasets import make_classification from imblearn.over_sampling import SMOTE from collections import Counter3.2 数据准备与可视化我们先创建一个明显不平衡的数据集用于演示# 生成不平衡数据集 X, y make_classification(n_classes2, class_sep2, weights[0.9, 0.1], n_informative3, n_redundant1, flip_y0, n_features20, n_clusters_per_class1, n_samples1000, random_state42) print(f原始数据分布{Counter(y)}) # 输出原始数据分布Counter({0: 900, 1: 100})可视化原始数据分布使用前两个特征import matplotlib.pyplot as plt plt.scatter(X[:, 0], X[:, 1], cy, alpha0.5) plt.title(原始数据分布) plt.show()3.3 SMOTE应用实践应用SMOTE进行过采样sm SMOTE(random_state42) X_res, y_res sm.fit_resample(X, y) print(f过采样后分布{Counter(y_res)}) # 输出过采样后分布Counter({0: 900, 1: 900})可视化结果plt.scatter(X_res[:, 0], X_res[:, 1], cy_res, alpha0.5) plt.title(SMOTE过采样后分布) plt.show()3.4 结合机器学习流程在实际项目中我们需要将SMOTE整合到完整的机器学习流程中特别注意数据泄漏问题from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import classification_report # 先划分训练测试集 X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.3, random_state42) # 只在训练集上应用SMOTE sm SMOTE(random_state42) X_train_res, y_train_res sm.fit_resample(X_train, y_train) # 训练模型 model RandomForestClassifier(random_state42) model.fit(X_train_res, y_train_res) # 评估 y_pred model.predict(X_test) print(classification_report(y_test, y_pred))4. SMOTE的变体与进阶技巧4.1 Borderline-SMOTE原始SMOTE对所有少数类样本一视同仁但实际边界样本更重要。Borderline-SMOTE先识别处于边界区域的少数类样本然后只对这些样本进行过采样。实现方法from imblearn.over_sampling import BorderlineSMOTE bsmote BorderlineSMOTE(kindborderline-1, random_state42) X_res, y_res bsmote.fit_resample(X, y)4.2 SVM-SMOTE使用SVM支持向量机先找到决策边界然后在边界附近生成新样本from imblearn.over_sampling import SVMSMOTE svmsmote SVMSMOTE(random_state42) X_res, y_res svmsmote.fit_resample(X, y)4.3 ADASYN自适应地根据样本密度决定生成数量在分布稀疏区域生成更多样本from imblearn.over_sampling import ADASYN adasyn ADASYN(random_state42) X_res, y_res adasyn.fit_resample(X, y)5. 实战经验与避坑指南5.1 常见问题排查内存不足错误当少数类样本特征维度很高时SMOTE可能消耗大量内存解决方案先使用PCA降维过采样后再转换回原空间分类性能下降有时过采样后模型表现反而变差可能原因噪声样本被过度放大解决方案先清洗数据或尝试Borderline-SMOTE类别间重叠严重当两类本身就有大量重叠时SMOTE可能生成不合理的样本解决方案先分析特征可分性考虑使用ADASYN5.2 参数调优经验SMOTE的关键参数是k_neighbors默认5较小的k值生成样本更接近原始样本多样性低较大的k值样本更分散但可能生成不合理样本我的经验法则当少数类样本数100时设置k3样本数在100-1000时k5样本数1000时可以尝试k75.3 与其他技术的结合SMOTE 欠采样from imblearn.combine import SMOTEENN smote_enn SMOTEENN(random_state42) X_res, y_res smote_enn.fit_resample(X, y)SMOTE 特征选择 先使用SMOTE过采样再用递归特征消除(RFE)选择重要特征SMOTE 异常检测 先用隔离森林检测并去除噪声点再应用SMOTE6. 效果评估与对比实验6.1 评估指标选择在不平衡分类中准确率是无效指标。应关注召回率True Positive Rate精确率Positive Predictive ValueF1-score召回率和精确率的调和平均AUC-ROC曲线6.2 对比实验设计我们对比几种方法在同一个数据集上的表现from sklearn.metrics import roc_auc_score from imblearn.under_sampling import RandomUnderSampler methods { 原始数据: (X_train, y_train), 随机过采样: RandomOverSampler(random_state42).fit_resample(X_train, y_train), SMOTE: SMOTE(random_state42).fit_resample(X_train, y_train), 欠采样: RandomUnderSampler(random_state42).fit_resample(X_train, y_train), SMOTE欠采样: SMOTEENN(random_state42).fit_resample(X_train, y_train) } results {} for name, (X_res, y_res) in methods.items(): model RandomForestClassifier(random_state42) model.fit(X_res, y_res) y_prob model.predict_proba(X_test)[:, 1] auc roc_auc_score(y_test, y_prob) results[name] auc print(pd.DataFrame.from_dict(results, orientindex, columns[AUC]))6.3 实际案例分享在电信客户流失预测项目中原始数据流失率仅7%。我们尝试了多种方法原始数据AUC0.72随机过采样AUC0.81SMOTEAUC0.85Borderline-SMOTEAUC0.87SMOTE特征选择AUC0.89最终方案选择了Borderline-SMOTE结合LightGBM模型在生产环境中将高价值客户流失预警准确率提升了40%。

相关推荐

【TCP】心跳保活机制、粘包与拆包处理
【TCP】心跳保活机制、粘包与拆包处理

TCP与UDP协议基础TCP特性:面向连接、可靠传输、有序交付、流量控制、拥塞控制。UDP特性:无连接、不可靠传输、无序交付、低开销。适用场景对比:TCP适合文件传输、Web请求;UDP适合实时视频、游戏。长连接与短连接模型长连接&#x… · 2026/10/16 8:39:34

5个一线电路板维修真实案例:很多人修不好,不是手艺差,是思路错了
5个一线电路板维修真实案例:很多人修不好,不是手艺差,是思路错了

干电路板维修久了,常会碰到一种尴尬:同一块故障板,有人折腾一周换遍元件也修不好,有人上手半小时就锁定问题。不是后者的烙铁更高级,也不是他运气好,往往只是排查思路差了一点点——前者盯着零件挨个试错&a… · 2026/10/16 4:52:47

Claude Code 里的 Skill 和 Subagent,别把工具箱和外包小队混在一起
Claude Code 里的 Skill 和 Subagent,别把工具箱和外包小队混在一起

今天讨论 Claude Code 的扩展体系,很容易卡在一个看似简单的问题上,已经有了 Skill,为什么还要 Subagent。两者都能让 Claude Code 变强,都能封装经验,都能减少重复沟通,但它们解决的不是同一类问题。Skill 更像我们放在团队工具箱里的标准件,API 设计规范、发布流程、代… · 2026/10/16 10:14:02

低压电工作业理论题通过率揭秘:证书过期了不知道怎么复审延期?
低压电工作业理论题通过率揭秘:证书过期了不知道怎么复审延期?

低压电工作业理论题通过率揭秘:证书过期了不知道怎么复审延期? 证书过期了不知道怎么复审延期?低压电工作业理论题的考试内容和通过率一直是很多从业者最关心的问题。尤其是那些已经在一线工作多年,证书快到期了却不知从何下手的电工朋友,更需要一份清晰… · 2026/11/11 12:05:04

江西萍乡电工证查询怎么网上查最靠谱
江西萍乡电工证查询怎么网上查最靠谱

江西萍乡电工证查询怎么网上查最靠谱 你是不是正为找个工作发愁?手上没有电工证,连面试资格都拿不到。江西萍乡电工证查询是很多人眼下最关心的事,尤其在找工作压力大的时候, 网上查询… · 2026/11/11 12:05:04

青岛电工证报名电话怎么找?电子证书怎么换?外省电工证也能转!
青岛电工证报名电话怎么找?电子证书怎么换?外省电工证也能转!

青岛电工证报名电话怎么找?电子证书怎么换?外省电工证也能转! 之前考的证在外省能不能转过来?这个是很多人在考电工证前会问的第一个问题。其实,只要你的电工证是 电子证书… · 2026/11/11 12:05:04

电工作业存在哪些风险?上岗必备的避坑经验分享
电工作业存在哪些风险?上岗必备的避坑经验分享

电工作业存在哪些风险?上岗必备的避坑经验分享 工地太忙根本没时间复习考试,这种话听起来耳熟不?我是平顶山一个劳务班组的负责人,干这行七八年了,见过太多电工兄弟因为证书没办、没复审,甚至因为操作不当出事故。今天就把电工作业存在的风险说透,也教… · 2026/11/11 12:05:04

咸阳市办电工证在哪考?工地太忙根本没时间复习考试怎么办?
咸阳市办电工证在哪考?工地太忙根本没时间复习考试怎么办?

咸阳市办电工证在哪考?工地太忙根本没时间复习考试怎么办? 工地太忙根本没时间复习考试,这几乎是所有一线施工人员的心声。尤其是电工这类特种作业岗位,既要承担高压设备操作,又要面对复杂的安全隐患, 考证和复审成了绕不开的门槛… · 2026/11/11 12:05:04

特种工现场多久拿证能上岗?外省证怎么转过来
特种工现场多久拿证能上岗?外省证怎么转过来

特种工现场多久拿证能上岗?外省证怎么转过来 之前考的证在外省能不能转过来?这是很多特种作业从业者最关心的问题,尤其对于在驻马店从事房建工程的特种工来说, 多久拿证… · 2026/11/11 12:04:04

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/10 2:16:10

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/10 17:46:39

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/10 17:11:43

_中职电工证最新政策解读
_中职电工证最新政策解读

中职电工证在哪考?工地太忙根本没时间复习考试的救星来了 工地太忙根本没时间复习考试,这是很多正在备考 中职电工证 的建筑工友的真实写照。你不是不想考,而是真的没时间。但别担心,这期内容是 新乡初次报考人员… · 2026/11/11 0:00:52

昆明电工证培训价格值不值得考?老电工告诉你真相
昆明电工证培训价格值不值得考?老电工告诉你真相

昆明电工证培训价格值不值得考?老电工告诉你真相 之前考的证在外省能不能转过来?这个问题是很多在外地打工、换城市生活、或者是想在昆明发展的朋友最关心的。尤其是现在云南发展快,很多企业都在招持证上岗的电工,如果你手头有证但不在本地,那这个证是不… · 2026/11/11 0:00:52

特种电缆张工网上查询全攻略:外省证如何转过来
特种电缆张工网上查询全攻略:外省证如何转过来

特种电缆张工网上查询全攻略:外省证如何转过来 之前考的证在外省能不能转过来?这是很多特种作业从业者最关心的问题,尤其是像特种电缆张工这类证书,直接关系到日常工作是否合规、能否顺利晋升。很多小伙伴因为证书归属地的问题,陷入职业发展的瓶颈,甚至… · 2026/11/11 0:00:52

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 20:19:29

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:22:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 17:00:47

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码