机器学习滚动轴承故障诊断【附代码】
✅博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 如需沟通交流,扫描文章底部二维码。
(1)PSO-GA混合优化变分模态分解降噪:
针对滚动轴承振动信号受环境噪声干扰严重的问题,提出PSO-GA混合算法优化VMD参数(K和α)。该混合算法在粒子群优化的每次迭代后,对全局最优粒子进行遗传算法的交叉和变异操作,增强跳出局部最优的能力。以最小包络熵为适应度函数,优化后VMD将原信号分解为4-6个本征模态分量,选取与原始信号相关系数大于0.3的分量进行重构。在XJTU-SY数据集上,与单独使用PSO或GA相比,PSO-GA-VMD降噪后的信号信噪比平均提高3.5dB,包络谱峰值背景比提升2倍。后续分类实验表明降噪处理使SVM分类准确率从73%提升至87%。<br>
(2)斯皮尔曼相关性分析与时域优选特征提取:
从一维振动信号中提取40个时域统计指标,包括均方根、峰值、偏度、峭度、裕度因子、波形因子、脉冲因子等,以及6个频域指标。使用斯皮尔曼秩相关系数计算每个指标与故障类别标签的相关性,按相关系数绝对值排序,选择前12个指标构成优选特征向量。在XJTU-SY数据集的三种不同负载(0N、5N、10N)下验证,优选特征向量比全特征集的分类准确率高出4.2%,且特征维度减少70%。通过对比常见特征选择方法(PCA、卡方检验),斯皮尔曼方法在计算效率和鲁棒性上均占优。<br>
(3)网格搜索交叉验证与麻雀优化支持向量机:
提出了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, swarmsize=10, maxiter=20) 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(kernel='rbf'), param_grid, cv=3, 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(C=C, gamma=gamma, kernel='rbf') score = cross_val_score(svm, X, y, cv=3, scoring='accuracy').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, swarmsize=15, maxiter=20) return SVC(C=xopt[0], gamma=xopt[1], kernel='rbf').fit(X, y) ",如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇
