4. 特征工程入门:时域特征提取、频域特征提取、特征选择方法

各位同学,欢迎来到特征工程这一章。

说实话,在风电故障预测这个领域,我踩过最大的坑就是——模型选得再好,数据喂得不对,全白搭。你想想看,原始振动信号里藏着大量噪声和冗余信息,直接扔给模型,它根本学不到东西。特征工程,说白了就是把原始信号里的“金子”筛出来。

4.1 时域特征提取:从波形里找规律

时域特征,就是直接从时间序列信号里算出来的统计量。我习惯把它们分成两类:有量纲的和无量纲的。

有量纲特征,比如均值、峰值、均方根值。这些值跟信号的幅值大小直接相关,能反映设备的负载变化。举个例子,风机叶片转速变了,振动幅值肯定跟着变。

无量纲特征,比如峭度、波形因子、脉冲因子。这些值对工况变化不敏感,但对故障特别敏感。我记得有一次,一个齿轮箱的早期裂纹,均方根值几乎没变化,但峭度值直接翻了一倍。嗯,这就是无量纲特征的厉害之处。

下面是我常用的时域特征列表,你可以直接拿去用:

特征名称 计算公式 物理意义
均值 μ = (1/N) Σx_i 信号直流分量
均方根值 RMS = sqrt((1/N) Σx_i²) 信号能量大小
峭度 K = (1/N) Σ((x_i-μ)/σ)⁴ 信号冲击特性
峰值因子 C = X_peak / RMS 信号尖峰程度
波形因子 S = RMS / |μ| 波形形状特征
我的小技巧: 做特征提取时,别只算一个窗口的统计值。我习惯把信号切成多个重叠窗口,每个窗口算一组特征,这样能捕捉到故障的时变特性。

4.2 频域特征提取:听出故障的“声音”

时域特征只能告诉你“振动有多大”,但频域特征能告诉你“振动来自哪里”。为什么会这样?因为每个机械部件都有自己固有的旋转频率和啮合频率。

我最常用的频域分析工具就是FFT(快速傅里叶变换)。把时域信号变换到频域后,你会看到一个个频率峰值。这些峰值对应的频率,就是故障的“身份证”。

举个例子,风机主轴承的保持架故障,会在某个特定频率上出现边频带。我曾经在项目里遇到过,一个轴承的保持架断裂前两周,频谱图上就出现了微弱的边频。当时我盯着那个边频看了半天,最后还是决定停机检修,结果拆下来一看,保持架已经裂了三分之一。

频域特征提取的常用步骤:

  1. 对原始信号加窗(汉宁窗、海明窗),减少频谱泄露
  2. 做FFT变换,得到频谱
  3. 提取关键频段的幅值、能量、重心频率等
  4. 计算边频带能量比、谐波能量比等高级特征

下面是一段Python代码,展示如何提取频域特征:

import numpy as np
from scipy.fft import fft

def extract_freq_features(signal, fs):
    n = len(signal)
    freqs = np.fft.fftfreq(n, 1/fs)
    spectrum = np.abs(fft(signal))[:n//2]
    freqs = freqs[:n//2]
    
    # 提取特征
    features = {}
    features['重心频率'] = np.sum(freqs * spectrum) / np.sum(spectrum)
    features['均方频率'] = np.sum(freqs**2 * spectrum) / np.sum(spectrum)
    features['频率方差'] = np.sum((freqs - features['重心频率'])**2 * spectrum) / np.sum(spectrum)
    
    # 提取特定频段能量
    idx_1x = np.where((freqs >= 48) & (freqs <= 52))[0]
    features['1倍频能量'] = np.sum(spectrum[idx_1x])
    
    return features
注意: 做FFT之前,一定要检查信号是否平稳。如果信号有明显的趋势项或突变,先做预处理(去趋势、滤波)。我曾经因为没做预处理,直接FFT,结果频谱里全是假峰,浪费了整整两天时间。

4.3 特征选择方法:去粗取精

特征提取完了,你可能得到几十甚至上百个特征。但别急着全扔进模型。你想想看,特征太多,模型容易过拟合,训练时间也长。特征选择,就是帮你挑出最有用的那部分。

我常用的特征选择方法有三种:

  • 过滤法:先算每个特征和目标变量的相关性,挑出相关性高的。速度快,但忽略了特征之间的交互作用。
  • 包裹法:用模型来评估特征子集的好坏。比如递归特征消除(RFE),每次去掉最不重要的特征。效果好,但计算量大。
  • 嵌入法:在模型训练过程中自动选择特征。比如Lasso回归、决策树特征重要性。兼顾速度和效果,我个人最常用。

下面这张图,是我自己总结的特征工程整体流程:

特征工程核心流程 原始振动信号 时域特征提取 频域特征提取 特征池 特征选择(过滤/包裹/嵌入) 最终特征集 → 模型训练 均值、峭度、 峰值因子等 重心频率、 频段能量等

核心原则: 特征选择不是越多越好,而是越精越好。我一般会先做过滤法快速筛选,再用嵌入法精挑细选,最后用包裹法验证一下。三步走,基本不会漏掉重要特征。

最后说一句,特征工程没有标准答案。不同风机、不同故障类型,需要的特征都不一样。我的建议是:多试、多对比、多总结。慢慢你就会形成自己的“特征直觉”。

专注资料整理