第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]
    # 训练并评估模型

注意:交叉验证不是用来「调优」的。如果你用交叉验证的结果去反复调整模型参数,那其实又陷入了过拟合——你是在「拟合」验证集。

知识体系总览

下面这张图,是我自己总结的本章核心逻辑。你可以把它当作一张「地图」:

机器学习基础 特征工程 缺失值·归一化·构造 训练/测试划分 时序切分·避免泄露 过拟合 vs 欠拟合 偏差·方差·正则化 交叉验证 K折·时序CV 核心目标:让模型在「新数据」上也能表现良好

这四个知识点,环环相扣。特征工程做不好,后面全白搭;划分不对,评估就是自欺欺人;过拟合不解决,模型就是纸老虎;交叉验证不做,你都不知道模型到底行不行。

好了,这一章就到这里。记住一句话:在风电领域,一个简单但稳健的模型,远胜于一个复杂但脆弱的模型。下一章我们开始动手写代码,用真实的风电数据跑一遍完整的流程。


蓝海数据掘金营,专注资料整理