当前位置: 首页 > news >正文

改进SMOTE类不平衡故障诊断【附代码】

博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 如需沟通交流,扫描文章底部二维码。


(1)基于多数类样本分布的改进SMOTE算法MSMOTE:

针对传统SMOTE在边界样本处理上的不足,提出MSMOTE算法。该算法首先识别每个少数类样本周围的多数类样本分布密度,只有那些位于多数类稀疏区域的少数类样本才进行过采样。在生成新样本时,不是单纯在少数类样本之间线性插值,而是沿着与多数类分类超平面垂直的方向拓展,使得合成样本尽可能远离多数类区域。在TE过程数据集的20类故障中,利用MSMOTE增强后,支持向量机分类器的G-mean值从0.72提升到0.89。

(2)局部敏感判别分析与MSMOTE结合的类间不平衡处理:

将MSMOTE过采样后的数据输入到局部敏感判别分析降维,LSDA在降维过程中同时保持同类样本局部邻域的紧凑性和异类样本的分离性。具体地,构建类内图权重和类间图权重,求解广义特征值问题得到投影矩阵。将原始特征从52维降至15维后,使用最邻近分类器,在TE过程故障9(物料温度上升)上的召回率从0.53提升到0.91。

(3)基于聚类的改进SMOTE算法CISMOTE处理类内不平衡:

针对同一故障类别内部不同子簇样本量不均衡,提出CISMOTE。首先对少数类样本进行K-means聚类(K自动确定),对每个簇计算样本稀疏度,重点在样本稀疏的簇内进行过采样。过采样时不仅考虑簇内的样本对,还从邻近簇中借用特征进行插值,增加子簇间多样性。在TE过程故障5(冷凝器冷却水入口温度变化)中,CISMOTE增强后,决策树分类器的F1-score从0.61提升至0.88,验证了对关键故障子模式的识别增强效果。

import numpy as np from sklearn.cluster import KMeans from sklearn.neighbors import NearestNeighbors class MSMOTE: def __init__(self, k_neighbors=5): self.k = k_neighbors def fit_resample(self, X_min, X_maj): # 计算每个少数类样本的多数类密度 nbrs = NearestNeighbors(n_neighbors=self.k).fit(X_maj) densities = [] for x in X_min: dist, _ = nbrs.kneighbors(x.reshape(1,-1)) densities.append(dist[0].mean()) density_th = np.percentile(densities, 50) selected = X_min[np.array(densities) < density_th] # 合成新样本 synthetic = [] for i in range(len(selected)): neighbor_idx = np.random.randint(len(selected)) diff = selected[neighbor_idx] - selected[i] # 沿垂直多数类超平面的方向调整 synthetic.append(selected[i] + np.random.rand() * diff) return np.vstack([X_min, np.array(synthetic)]) class CISMOTE: def __init__(self, n_clusters=3): self.n_clusters = n_clusters def fit_resample(self, X_min): kmeans = KMeans(n_clusters=self.n_clusters, random_state=0) labels = kmeans.fit_predict(X_min) clusters = {c: X_min[labels==c] for c in range(self.n_clusters)} synthetic = [] for c, data in clusters.items(): n_to_gen = max(0, int(len(X_min)/self.n_clusters) - len(data)) for _ in range(n_to_gen): if len(data) >= 2: i1, i2 = np.random.choice(len(data), 2, replace=False) new = data[i1] + np.random.rand() * (data[i2] - data[i1]) synthetic.append(new) return np.vstack([X_min, np.array(synthetic)]) if __name__ == '__main__': X_min = np.random.rand(30, 10) X_maj = np.random.rand(300, 10) ms = MSMOTE() X_res = ms.fit_resample(X_min, X_maj) print(f'MSMOTE生成后样本数: {len(X_res)}')


如有问题,可以直接沟通

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

http://www.jsqmd.com/news/730114/

相关文章:

  • Twitter自动化工具怎么选?实测3种运营方式效果对比(附真实思路)
  • PureThermal 3热成像开发板硬件解析与应用指南
  • 双USB车载充电器设计方案与实现
  • MMD Tools:如何让Blender成为MMD创作者的专业工作站?
  • Java SFTP递归下载踩坑实录:Hutool 5.8.16版本下处理空文件夹和符号链接
  • TongWeb8.0默认 开启 了JNDI缓存导致应用卡
  • Taotoken透明计费与详细账单如何帮助个人开发者控制预算
  • 新手开发者首次接入大模型API可能遇到的常见问题与排查思路
  • 乐山当地人认可的钵钵鸡店排行 附真实消费参考 - 优质品牌商家
  • MySql(高级操作符--高级操作符练习(2))
  • 【ML】K均值聚类及Python手写实现(详细)
  • 3分钟掌握完整网页截图:告别零碎片段,拥抱完整内容保存
  • 冰雪传奇点卡版官方网站:三端互通全解析,随时随地畅玩
  • W55MH32 芯片 MicroPython 实战 (2):GPIO 通用输入输出
  • 中文乱码 ubuntu autodl
  • Windows下PyGMT安装报错‘GMTCLibNotFoundError’?手把手教你从零配置GMT 6.3.0环境
  • LLM在文本分析与差异检测中的实践应用
  • 技术日报|mattpocock技能库三连冠单日揽星7321总量破3.7万,微软VibeVoice语音AI再度上榜
  • SpringBoot 接口性能如何快速定位?轻量级应用监控工具开源啦,一键接入,轻松定位!
  • DIO32321 低功耗 USB2.0 高速开关技术文档
  • 从非结构化数据到结构化:Anything-Extract项目实战与架构解析
  • 传承与奉献:资深技术人如何做好“传帮带”?
  • 桌面美化与效率结合,这款免费桌面工具能管理倒计时、宠物和加密
  • 海棠山铁哥戳破《灵魂摆渡・浮生梦》伪 AI 骗局,《第一大道》纯 AI 写实告别躺平
  • DeepSeek V1 到 V4 完整技术路线:每一代到底解决了什么问题?
  • taotoken 多模型聚合能力如何赋能智能客服场景开发
  • 从播客剪辑到游戏音效:用GoldWave 6.78搞定你的所有音频需求(附基础操作指南)
  • 协同自动驾驶中的V2V-GoT框架:技术原理与工程实践
  • CS3106 双节电池均衡芯片技术文档(完整版)
  • AArch64 SIMDFP寄存器存储指令详解与优化实践