4、特征工程基础:特征提取、特征选择、特征降维
设备画像建得好不好,七成功夫在特征工程上。这话不是我说的,是干这行久了自然就明白的道理。你想想看,原始数据就像一堆没洗过的矿石,直接拿去建模,出来的东西肯定不靠谱。
我个人习惯把特征工程分成三步走:先提取,再选择,最后降维。每一步都有它的门道,咱们一个一个说。
4.1 特征提取:从原始数据里挖金子
特征提取,说白了就是把设备的各种原始信号转成有意义的数值。我见过不少新手,上来就把几十个传感器数据直接扔进模型,结果模型跑出来一团糟。
设备数据通常分三类:
- 时域特征:均值、方差、峰值、均方根值
- 频域特征:频谱能量、主频幅值、频率重心
- 统计特征:偏度、峰度、百分位数
举个例子,我在处理风机振动数据时,光看原始波形根本看不出问题。但提取出均方根值和峰值因子后,轴承磨损的特征就非常明显了。
核心原则:特征提取不是越多越好,而是要跟设备故障机理对应上。你提取的特征如果跟物理规律没关系,那就是在制造噪声。
这里给一段简单的特征提取代码,用Python实现:
import numpy as np
import pandas as pd
def extract_features(signal, fs=1000):
features = {}
# 时域特征
features['rms'] = np.sqrt(np.mean(signal**2))
features['peak'] = np.max(np.abs(signal))
features['crest_factor'] = features['peak'] / features['rms']
# 频域特征
fft_vals = np.fft.fft(signal)
freqs = np.fft.fftfreq(len(signal), 1/fs)
features['spectral_centroid'] = np.sum(freqs * np.abs(fft_vals)) / np.sum(np.abs(fft_vals))
return features
小技巧:提取特征时,建议同时保留原始数据的采样频率和采集时间。我在项目里吃过亏,特征提取完忘了记录采样参数,后面做频域分析时全乱套了。
4.2 特征选择:去粗取精的艺术
特征提取完了,你可能得到上百个特征。但别高兴太早,这里面至少有一半是冗余的。特征选择就是帮你挑出真正有用的那部分。
常用的方法有三种:
| 方法类别 | 代表算法 | 适用场景 | 我的经验 |
|---|---|---|---|
| 过滤法 | 方差阈值、卡方检验 | 特征数量大,快速筛选 | 适合做第一道粗筛 |
| 包裹法 | 递归特征消除 | 特征数量适中,精度要求高 | 计算量大,但效果好 |
| 嵌入法 | Lasso回归、随机森林 | 特征与模型一起优化 | 我最常用的方法 |
为什么会这样?因为不同方法看问题的角度不一样。过滤法只看单个特征跟目标的关系,包裹法看特征组合的效果,嵌入法则把特征选择嵌在模型训练里。
我曾经在一个设备故障诊断项目里,用随机森林的特征重要性排序,把200多个特征砍到只剩15个。模型精度反而从82%提升到了91%。你想想看,特征多了不一定是好事。
避坑指南:我曾经犯过一个错误——用全量特征训练模型,然后看特征重要性排序。结果模型过拟合严重,排序出来的特征全是噪声。正确的做法是先做交叉验证,再用验证集上的特征重要性做选择。
4.3 特征降维:化繁为简的智慧
特征选择和降维有什么区别?我打个比方你就明白了。特征选择是「挑水果」,从一堆水果里挑出好的。特征降维是「榨果汁」,把多种水果混合榨成汁,保留营养但形态变了。
降维的核心思想,就是把高维空间的数据映射到低维空间,同时尽量保留原始数据的结构信息。
常用的降维方法:
- PCA(主成分分析):线性降维,保留方差最大的方向
- t-SNE:非线性降维,擅长可视化
- UMAP:兼顾全局结构和局部结构
我个人习惯在设备画像构建中优先用PCA。原因很简单:它计算快,结果可解释,而且对设备数据的线性结构保留得不错。
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
# 标准化很重要,不然量纲差异会主导主成分
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# PCA降维,保留95%方差
pca = PCA(n_components=0.95)
X_pca = pca.fit_transform(X_scaled)
print(f"原始特征数: {X.shape[1]}")
print(f"降维后特征数: {X_pca.shape[1]}")
print(f"各主成分方差解释率: {pca.explained_variance_ratio_}")
实用建议:做PCA之前一定要做标准化。我见过有人直接拿原始数据跑PCA,结果第一主成分完全被量纲最大的特征主导,失去了降维的意义。
4.4 三者的关系与选择策略
特征提取、选择、降维,这三者不是互斥的,而是可以组合使用的。我一般按这个流程走:
- 先提取:从原始数据中生成尽可能多的候选特征
- 再粗筛:用过滤法快速剔除明显无用的特征
- 后精选:用嵌入法或包裹法做精细选择
- 最后降维:如果特征维度仍然很高,用PCA做最终降维
下面这张图展示了整个特征工程的流程:
嗯,这里要注意一点:不是所有场景都需要走完这三步。如果原始特征本来就不多,比如只有二三十个,那直接做特征选择就够了,没必要再降维。
4.5 实战中的避坑指南
做了这么多年设备画像,我总结了几条血泪教训:
- 不要盲目追求特征数量:特征多不等于模型好。我见过有人提取了500多个特征,结果模型精度还不如用20个关键特征。
- 注意特征的时间对齐:设备数据往往是时间序列,不同传感器采样频率可能不同。提取特征时一定要对齐时间戳,不然特征之间会有相位差。
- 保留原始数据的备份:特征工程做完了,原始数据别删。我吃过这个亏,后来发现特征提取逻辑有bug,但原始数据已经清掉了,只能重新采集。
- 特征工程要跟业务对齐:别光看统计指标,要跟设备工程师聊。他们知道哪些参数对设备状态最敏感,这些信息比任何算法都值钱。
总结一句话:特征工程不是纯技术活,它是技术跟业务经验的结合。你做的每一个特征选择,背后都应该有设备机理或业务逻辑支撑。这样建出来的设备画像,才真正能用、好用。