轴承故障诊断实战用Python自动化特征工程与模型优化轴承作为旋转机械的核心部件其健康状态直接影响设备寿命。传统人工特征提取方法不仅耗时费力还容易遗漏关键特征。本文将手把手带您用Python构建端到端的智能诊断系统从振动信号处理到模型部署全程代码驱动。1. 数据准备与探索性分析假设我们已从设备振动传感器获取了CSV格式的原始数据包含正常状态和多种故障类型内圈故障、外圈故障、滚动体故障等。首先加载并快速了解数据分布import pandas as pd import matplotlib.pyplot as plt # 加载示例数据集实际替换为您的数据路径 df pd.read_csv(bearing_vibration.csv) print(f数据维度{df.shape}) print(前5行数据\n, df.head()) # 绘制不同状态的振动信号示例 plt.figure(figsize(12,6)) for i, state in enumerate(df[label].unique()[:4]): plt.subplot(2,2,i1) sample df[df[label]state].iloc[0,:-1].values plt.plot(sample) plt.title(f状态类型{state}) plt.tight_layout() plt.show()常见数据问题处理技巧缺失值传感器中断可能导致数据缺失连续缺失5%线性插值填充连续缺失5%考虑丢弃该段数据标签不平衡某些故障样本量不足过采样少数类SMOTE算法调整类别权重class_weight参数2. 特征工程自动化实践传统方法需要手动计算时域、频域特征而现代工具可以自动完成这些工作。我们对比两种实现方式2.1 传统手动特征提取from scipy.stats import kurtosis, skew import numpy as np def manual_features(signal): features { mean: np.mean(signal), std: np.std(signal), kurtosis: kurtosis(signal), skewness: skew(signal), peak_to_peak: np.ptp(signal), # 可添加更多时域特征... } return features # 应用特征提取 manual_feats df.iloc[:,:-1].apply(lambda x: manual_features(x), axis1) manual_feats pd.DataFrame(list(manual_feats))2.2 自动化特征生成推荐from tsfresh import extract_features from tsfresh.utilities.dataframe_functions import roll_time_series # 滚动窗口处理假设每个样本是1秒数据窗口大小500ms df_rolled roll_time_series(df, column_idid, column_sorttime) # 自动提取794种特征可根据需求筛选 auto_feats extract_features(df_rolled, column_idid, column_sorttime, default_fc_parametersEfficientFCParameters())特征选择策略对比方法类型耗时特征数量需要专业知识适合场景手动提取中10-30高小数据集、特定领域自动生成短100低大数据集、探索阶段深度学习长自动学习中端到端解决方案3. 模型构建与优化我们构建完整的机器学习Pipeline包含特征标准化、降维和分类器from sklearn.pipeline import Pipeline from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler from sklearn.ensemble import RandomForestClassifier from sklearn.svm import SVC from sklearn.model_selection import cross_val_score # 构建Pipeline pipelines { rf: Pipeline([ (scaler, StandardScaler()), (pca, PCA(n_components0.95)), (clf, RandomForestClassifier(n_estimators200)) ]), svm: Pipeline([ (scaler, StandardScaler()), (pca, PCA(n_components0.95)), (clf, SVC(kernelrbf, class_weightbalanced)) ]) } # 交叉验证比较 results {} for name, pipeline in pipelines.items(): scores cross_val_score(pipeline, X_train, y_train, cv5, scoringf1_weighted) results[name] scores.mean() print(f{name}模型平均F1分数{scores.mean():.3f})超参数优化技巧from sklearn.model_selection import GridSearchCV param_grid { pca__n_components: [0.85, 0.90, 0.95], clf__C: [0.1, 1, 10], clf__gamma: [scale, auto] } grid_search GridSearchCV(pipelines[svm], param_grid, cv3, scoringf1_weighted) grid_search.fit(X_train, y_train) print(最佳参数组合, grid_search.best_params_)4. 部署与实时监测将训练好的模型部署为实时监测系统import joblib from sklearn.metrics import classification_report # 保存最佳模型 best_model grid_search.best_estimator_ joblib.dump(best_model, bearing_model.pkl) # 模拟实时数据流处理 def process_stream(data_chunk): model joblib.load(bearing_model.pkl) features extract_features(data_chunk) # 使用相同的特征工程 pred model.predict(features) proba model.predict_proba(features) return pred, proba # 测试新数据 y_pred best_model.predict(X_test) print(classification_report(y_test, y_pred))实际部署注意事项数据漂移监测定期检查输入数据统计特性变化模型衰减检测保留测试集作为基准参考在线学习考虑部分可更新模型如SGD分类器在工业现场部署时建议将模型封装为REST API或使用PyInstaller打包成可执行文件。对于边缘设备可以考虑使用ONNX格式转换模型以减少依赖。