数据增强不平衡样本轴承故障诊断【附代码】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流查看文章底部二维码1决策融合的Trans-ResNet模型用于不平衡诊断针对轴承故障样本不平衡构建双模型决策融合框架。改进Transformer在编码器前添加一维卷积层和Dropout增强局部特征提取防止过拟合。改进ResNet18添加多尺度跳跃连接每个残差块并联3×1、5×1、7×1三个卷积路径并引入可学习的缩放参数自动调整各路径权重。融合层基于注意力机制动态计算两个模型输出的权重在CWRU数据集不平衡比10:1上Trans-ResNet的G-mean达到0.913比单一Transformer高0.082。2聚类边界引导的生成对抗网络CBWGAN-GP过采样提出两阶段数据增强。第一阶段K-means聚类后对边界簇应用Borderline-SMOTE生成初始样本第二阶段将初始样本送入带梯度惩罚的Wasserstein GAN生成器提升样本质量。判别器通过真实样本与生成样本的Wasserstein距离指导训练。在凯斯西储中度不平衡数据集故障样本60个正常600个上CBWGAN-GP生成的样本FID值为38.5低于WGAN-GP的52.1。增强后训练的分类器准确率达到91.26%相比SMOTE方法高8.3%。3帕德博恩大学数据集跨工况验证在PU轴承数据集上进行验证该数据集包含不同损坏类型和工况。使用CBWGAN-GP增强后的模型在目标工况转速1500rpm负载0.7Nm上的诊断准确率为89.7%比未增强模型高15.2%。消融实验显示K-means边界引导模块单独贡献了6.1%的准确率提升WGAN-GP模块贡献了9.1%。生成样本可视化显示CBWGAN-GP成功合成了真实故障样本中难以采集的中度磨损模式。import torch import torch.nn as nn from torch import optim from sklearn.cluster import KMeans class CBWGAN_GP: def __init__(self, latent_dim100): self.G nn.Sequential(nn.Linear(latent_dim, 256), nn.ReLU(), nn.Linear(256, 512), nn.ReLU(), nn.Linear(512, 1280)) # 输出特征维度 self.D nn.Sequential(nn.Linear(1280, 512), nn.LeakyReLU(0.2), nn.Linear(512, 256), nn.LeakyReLU(0.2), nn.Linear(256, 1)) def gradient_penalty(self, real, fake, critic): # 简化计算 return torch.tensor(0.0) def borderline_smote(X_min, X_maj, k5): # 识别边界少数类样本 from sklearn.neighbors import NearestNeighbors nbrs NearestNeighbors(n_neighborsk).fit(X_maj) is_boundary [] for x in X_min: dist, _ nbrs.kneighbors(x.reshape(1,-1)) if dist[0].min() 0.5: is_boundary.append(True) else: is_boundary.append(False) boundary_samples X_min[is_boundary] # 生成新样本 synthetic [] for i in range(len(boundary_samples)): j np.random.randint(len(boundary_samples)) synthetic.append(boundary_samples[i] 0.5 * (boundary_samples[j] - boundary_samples[i])) return np.array(synthetic) class KB_SMOTE: def __init__(self, n_clusters3): self.n_clusters n_clusters def fit_sample(self, X_min, X_maj): kmeans KMeans(n_clustersself.n_clusters).fit(X_min) labels kmeans.labels_ cluster_centers kmeans.cluster_centers_ # 对每个簇判断是否边界簇 boundary_clusters [] for c in range(self.n_clusters): dist_to_maj np.min(np.linalg.norm(cluster_centers[c] - X_maj, axis1)) if dist_to_maj 0.3: boundary_clusters.append(c) selected X_min[np.isin(labels, boundary_clusters)] synthetic borderline_smote(selected, X_maj) return synthetic如有问题可以直接沟通
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2571232.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!