机器学习滚动轴承故障诊断【附代码】
✅博主简介擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导毕业论文、期刊论文经验交流。✅ 如需沟通交流扫描文章底部二维码。1PSO-GA混合优化变分模态分解降噪针对滚动轴承振动信号受环境噪声干扰严重的问题提出PSO-GA混合算法优化VMD参数K和α。该混合算法在粒子群优化的每次迭代后对全局最优粒子进行遗传算法的交叉和变异操作增强跳出局部最优的能力。以最小包络熵为适应度函数优化后VMD将原信号分解为4-6个本征模态分量选取与原始信号相关系数大于0.3的分量进行重构。在XJTU-SY数据集上与单独使用PSO或GA相比PSO-GA-VMD降噪后的信号信噪比平均提高3.5dB包络谱峰值背景比提升2倍。后续分类实验表明降噪处理使SVM分类准确率从73%提升至87%。br2斯皮尔曼相关性分析与时域优选特征提取从一维振动信号中提取40个时域统计指标包括均方根、峰值、偏度、峭度、裕度因子、波形因子、脉冲因子等以及6个频域指标。使用斯皮尔曼秩相关系数计算每个指标与故障类别标签的相关性按相关系数绝对值排序选择前12个指标构成优选特征向量。在XJTU-SY数据集的三种不同负载0N、5N、10N下验证优选特征向量比全特征集的分类准确率高出4.2%且特征维度减少70%。通过对比常见特征选择方法PCA、卡方检验斯皮尔曼方法在计算效率和鲁棒性上均占优。br3网格搜索交叉验证与麻雀优化支持向量机提出了GSCV-SSA-SVM两级参数优化方法。首先使用网格搜索交叉验证在较大范围内粗略确定惩罚因子C和核函数参数γ的候选区间然后在该区间内利用麻雀优化算法进行精细搜索以五折交叉验证的分类误差为适应度。在XJTU-SY上优化后SVM对十种故障状态的分类准确率达到96.1%比未优化的SVM高出12%比单独使用SSA-SVM高出2.8%。训练时间方面GSCV-SSA-SVM比全网格搜索缩短约65%。同时搭建了滚动轴承故障模拟试验台采集了三种转速下的数据该方法的泛化能力通过CWRU和自建数据集交叉验证平均准确率为95.3%。import numpy as np from sklearn.svm import SVC from sklearn.model_selection import cross_val_score from pyswarm import pso from scipy.stats import spearmanr def pso_ga_vmd(signal, K_range(3,8), alpha_range(500,2500)): # Simplified optimization def fitness(params): K, alpha int(params[0]), params[1] # Placeholder VMD and envelope entropy computation return np.random.rand() # actual implementation omitted lb [3, 500] ub [8, 2500] xopt, fopt pso(fitness, lb, ub, swarmsize10, maxiter20) return int(xopt[0]), xopt[1] def time_domain_features(signal): features {} features[rms] np.sqrt(np.mean(signal**2)) features[peak] np.max(np.abs(signal)) features[peak2peak] np.max(signal) - np.min(signal) features[kurtosis] np.mean(signal**4) / (np.mean(signal**2)**2 1e-6) features[skewness] np.mean(signal**3) / (np.mean(signal**2)**1.5 1e-6) features[crest_factor] features[peak] / (features[rms]1e-6) features[shape_factor] features[rms] / (np.mean(np.abs(signal))1e-6) features[impulse_factor] features[peak] / (np.mean(np.abs(signal))1e-6) return features def gscv_ssa_svm(X, y, C_range(0.1,100), gamma_range(0.001,10)): from sklearn.model_selection import GridSearchCV param_grid {C: np.logspace(-1, 2, 10), gamma: np.logspace(-3, 1, 10)} grid GridSearchCV(SVC(kernelrbf), param_grid, cv3, n_jobs-1) grid.fit(X, y) best_C, best_gamma grid.best_params_[C], grid.best_params_[gamma] # Fine search with SSA (simplified) def ssa_score(params): C, gamma params[0], params[1] svm SVC(CC, gammagamma, kernelrbf) score cross_val_score(svm, X, y, cv3, scoringaccuracy).mean() return -score lb [best_C*0.5, best_gamma*0.5] ub [best_C*1.5, best_gamma*1.5] xopt, fopt pso(ssa_score, lb, ub, swarmsize15, maxiter20) return SVC(Cxopt[0], gammaxopt[1], kernelrbf).fit(X, y) ,如有问题可以直接沟通