第4章 特征工程(上):时域与频域特征提取

大家好,我是你们的老朋友。今天咱们聊聊特征工程里最基础、也最核心的一块——时域和频域特征提取。说实话,我见过不少同学一上来就堆模型,结果数据质量不行,模型再花哨也白搭。特征工程,说白了就是帮模型“看清”数据里的规律。

核心观点:好的特征工程,能让简单模型跑出复杂效果;差的特征工程,再牛的深度学习也救不回来。

4.1 时域特征:从波形里“抠”出信息

时域特征,就是直接从原始振动信号的时间序列里算出来的统计量。嗯,这里要注意,这些特征虽然简单,但往往非常有效。我在风电项目里,就靠几个时域特征把RUL预测误差降了15%。

4.1.1 均值(Mean)

均值反映信号的“中心趋势”。说白了,就是信号的平均水平。

import numpy as np

def extract_mean(signal):
    return np.mean(signal)

我个人习惯,在提取均值前先检查信号是否平稳。如果信号有趋势项,均值会漂移,这时候直接算均值意义不大。

4.1.2 方差(Variance)

方差衡量信号的波动程度。风机轴承磨损越严重,振动信号的方差往往越大。

def extract_variance(signal):
    return np.var(signal)

避坑指南:我曾经在某个项目里,直接用原始信号的方差做特征,结果模型训练时梯度爆炸。后来发现,方差值太大,需要做归一化处理。

4.1.3 峰值(Peak Value)

峰值就是信号的最大绝对值。它反映信号的“冲击程度”。风机叶片出现裂纹时,峰值会突然增大。

def extract_peak(signal):
    return np.max(np.abs(signal))

你想想看,一个正常运转的风机,振动峰值应该在一个稳定范围内。一旦峰值突然跳变,十有八九是出问题了。

4.1.4 峭度(Kurtosis)

峭度描述信号分布的“尖锐程度”。正常信号接近正态分布,峭度≈3。故障信号往往有更多冲击成分,峭度会明显大于3。

def extract_kurtosis(signal):
    n = len(signal)
    mean = np.mean(signal)
    std = np.std(signal)
    kurt = np.sum((signal - mean)**4) / (n * std**4)
    return kurt

我的经验:峭度对早期故障非常敏感。我在做齿轮箱故障诊断时,峭度值从3.1跳到4.5,就预示着齿面开始出现微裂纹了。

4.2 频域特征:换个角度看信号

时域特征看的是“随时间怎么变”,频域特征看的是“能量分布在哪些频率上”。说白了,就是给信号做“频率体检”。

4.2.1 快速傅里叶变换(FFT)

FFT是把时域信号转换到频域的“神器”。它告诉我们信号里包含哪些频率成分。

def compute_fft(signal, sampling_rate):
    n = len(signal)
    fft_vals = np.fft.fft(signal)
    fft_freq = np.fft.fftfreq(n, d=1/sampling_rate)
    # 只取正频率部分
    half_n = n // 2
    return fft_freq[:half_n], np.abs(fft_vals[:half_n])

注意:FFT的结果是对称的,我们通常只取正频率部分。我刚开始做时,忘了取绝对值,结果画出来的频谱图乱七八糟,排查了半天才发现问题。

4.2.2 频谱能量(Spectral Energy)

频谱能量衡量信号在频域上的“总能量”。风机轴承故障时,高频段的能量会明显增加。

def extract_spectral_energy(fft_magnitude):
    return np.sum(fft_magnitude**2)

实用技巧:我建议把频谱分成低频段(0-500Hz)、中频段(500-2000Hz)、高频段(2000Hz以上)分别计算能量。这样能更精细地捕捉故障特征。

4.3 知识体系总览

下面这张图,是我自己总结的特征工程核心逻辑。你看一遍,基本就明白今天讲的内容在整个流程里的位置了。

特征工程核心流程 原始振动信号 时域特征提取 频域特征提取 时域特征列表 • 均值(Mean) • 方差(Variance) • 峰值(Peak) • 峭度(Kurtosis) 频域特征列表 • FFT频谱 • 频谱能量 • 频段能量分布 • 主频位置 融合特征向量 → 模型输入

4.4 特征提取实战要点

特征名称 物理含义 故障敏感性 注意事项
均值 信号中心趋势 低(对平稳信号有效) 需去除趋势项
方差 信号波动程度 需归一化处理
峰值 信号冲击强度 对噪声敏感
峭度 信号分布尖锐度 极高(早期故障) 需足够样本量
频谱能量 频域总能量 中高 分频段计算更有效

重要提醒:特征提取不是越多越好。我见过有人一口气提取了50多个特征,结果模型过拟合得一塌糊涂。记住,好的特征工程是“少而精”,不是“多而杂”。

好了,今天的内容就到这里。时域和频域特征,是风机RUL预测的“地基”。地基打不牢,上面盖再漂亮的模型也是空中楼阁。下一章,咱们接着聊特征工程的“下半场”——时频域特征和特征选择。到时候见!


专注资料整理