第4章:机器学习基础:特征工程、训练集/测试集划分、过拟合与欠拟合、交叉验证
各位同学,欢迎来到机器学习实战的第一站。说实话,很多搞风电的朋友一听到「机器学习」就觉得头大,觉得那是算法工程师的事。但我要告诉你,在风电智能决策系统里,机器学习不是玄学,它就是我们手里的一把扳手——关键是要知道拧哪里、怎么拧。
这一章,我们不讲复杂的数学公式,只讲四个最核心、最实用的概念。你把这四个东西吃透了,后面搭建模型时就不会走弯路。
4.1 特征工程:数据里的「黄金」怎么挖?
我经常跟团队说一句话:「垃圾进,垃圾出」。模型再牛,喂进去的数据不行,结果就是废的。特征工程,说白了就是把你手里的原始数据——风速、功率、温度、振动信号——变成模型能听懂的语言。
核心观点:特征工程决定了模型性能的上限,而算法只是逼近这个上限。
我在风电项目里遇到过一件事。某台风机的齿轮箱温度数据,原始值看起来毫无规律。后来我做了个简单的操作——计算过去1小时内的温度变化率(即一阶差分),结果这个新特征直接让故障预测的准确率提升了15%。
常见的特征工程手段包括:
- 缺失值处理:风电数据经常丢包,别直接删掉。我习惯用前向填充或插值法。
- 归一化/标准化:风速是0-30m/s,功率是0-2000kW,量纲不同。不做归一化,模型会「偏科」。
- 特征构造:比如把「风速」和「桨距角」组合成「有效风速」;或者提取振动信号的FFT频域特征。
- 特征选择:不是特征越多越好。我见过有人把50个特征全扔进模型,结果过拟合得一塌糊涂。
我的小技巧:先画相关性热力图,把跟目标变量(比如功率)相关性低于0.1的特征直接扔掉。干净利落。
4.2 训练集/测试集划分:别让模型「作弊」
你想想看,如果考试前你把答案都背下来了,考试时当然满分。但换一套题呢?立马露馅。机器学习也一样。
训练集就是「课本」,测试集就是「考试卷」。模型只能看课本,不能提前看到试卷。否则就是数据泄露。
划分比例上,我个人习惯用80%训练、20%测试。但风电数据有个特点——它是时间序列。你不能随机打乱,否则模型会学到未来的信息。
避坑指南:我曾经犯过一个低级错误——用随机划分处理时序数据。结果模型在测试集上表现极好,但上线后一塌糊涂。后来才发现,模型「偷看」了未来的风速数据。
正确的做法是:按时间顺序切分。比如用前18个月的数据训练,后6个月的数据测试。代码很简单:
# 按时间顺序划分
train_size = int(len(df) * 0.8)
train_data = df.iloc[:train_size]
test_data = df.iloc[train_size:]
4.3 过拟合与欠拟合:模型的两个「极端」
这两个概念,我换个说法你就懂了:
- 欠拟合:模型太笨,连训练集都学不会。就像让小学生做微积分——根本不在一个量级。
- 过拟合:模型太「聪明」,把训练集里的噪声都背下来了。就像考试时只背了标准答案,题目稍微变一下就不会了。
在风电场景里,过拟合尤其要警惕。为什么?因为风机数据噪声大、工况复杂。模型如果记住了某个特定风速下的异常振动,但那个异常其实是传感器误报——那这个模型就废了。
| 状态 | 训练集误差 | 测试集误差 | 典型表现 |
|---|---|---|---|
| 欠拟合 | 高 | 高 | 模型太简单,比如用线性模型拟合非线性关系 |
| 过拟合 | 低 | 高 | 模型太复杂,记住了噪声而非规律 |
| 正常 | 较低 | 较低 | 两者误差接近,且都在可接受范围 |
怎么判断?我一般看训练集和测试集的误差差距。如果训练集误差0.01,测试集误差0.3——嗯,过拟合了。赶紧加正则化或者减少特征。
4.4 交叉验证:让评估更靠谱
你可能会问:只做一次训练/测试划分,万一运气不好,测试集选到了特别简单或特别难的数据呢?
没错,这就是交叉验证要解决的问题。说白了,就是把数据分成K份,轮流拿其中1份做测试,其余K-1份做训练。最后取K次结果的平均值。
我常用的方法是5折交叉验证。为什么是5?不是3也不是10?嗯,经验之谈。3折方差太大,10折计算量太大,5折是个不错的平衡点。
对于时序数据,我建议用时间序列交叉验证——每次训练集都往前推,测试集永远是「未来」的数据。这样更贴近实际部署场景。
from sklearn.model_selection import TimeSeriesSplit
tscv = TimeSeriesSplit(n_splits=5)
for train_idx, test_idx in tscv.split(X):
X_train, X_test = X[train_idx], X[test_idx]
# 训练并评估模型
注意:交叉验证不是用来「调优」的。如果你用交叉验证的结果去反复调整模型参数,那其实又陷入了过拟合——你是在「拟合」验证集。
知识体系总览
下面这张图,是我自己总结的本章核心逻辑。你可以把它当作一张「地图」:
这四个知识点,环环相扣。特征工程做不好,后面全白搭;划分不对,评估就是自欺欺人;过拟合不解决,模型就是纸老虎;交叉验证不做,你都不知道模型到底行不行。
好了,这一章就到这里。记住一句话:在风电领域,一个简单但稳健的模型,远胜于一个复杂但脆弱的模型。下一章我们开始动手写代码,用真实的风电数据跑一遍完整的流程。