本文详细介绍特征工程 (Feature Engineering)。在机器学习界流传着一句名言:“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。”
如果你把机器学习比作做菜,那么:
- 数据就是刚买回来的原材料(带着泥土的土豆、活鱼)。
- 模型就是烹饪工具(炒锅、烤箱)。
- 特征工程就是备菜过程(洗菜、切片、腌制)。
只有菜备得好,炒出来的菜才好吃。
1. 什么是特征工程?
简单来说,特征工程就是把原始数据变成模型能看懂、能更好利用的数据的过程。
计算机很笨,它只认识数字,而且喜欢“规整”的数字。
- 它看不懂“2023年10月1日”,它只知道这是一个字符串。
- 它看不懂“红色”,它只知道这是文字。
- 它看不懂“身高180cm”和“体重70kg”谁大谁小,因为它不知道单位不同。
特征工程就是充当“翻译官”和“加工厂”,把这些原始信息转化为高质量的数值特征。
(图示:原始杂乱的数据经过特征工程的“加工”,变成了模型喜欢的数值形式)
2. 为什么要搞特征工程?
Garbage In, Garbage Out (垃圾进,垃圾出)。
如果你直接把原始数据丢给模型,模型大概率会“消化不良”或者“胡乱猜测”。
- 提高准确率:好的特征能让模型更容易找到规律。
- 降低复杂度:有时候一个好特征顶得上十个烂特征,能让模型跑得更快。
- 增强解释性:处理后的特征往往更能反映业务逻辑。
3. 常见的特征工程“招式”
让我们结合具体的例子来看看怎么做特征工程。
3.1 处理缺失值 (Missing Values)
场景:收集的用户数据里,有些人的“年龄”是空的。
- 直接丢弃:如果空的很少,直接把这行删了。(简单粗暴)
- 填充 (Imputation):
- 填平均值:大家都填 30 岁。
- 填众数:填出现最多的人的年龄。
- 模型预测:根据他的收入、职业猜一个年龄填进去。(高级)
3.2 数值处理 (Numerical Processing)
场景:你要预测房价。
- 归一化/标准化 (Scaling):
- “面积”是 100 平方米,“房间数”是 3 个。
- 数字 100 比 3 大太多,模型可能会误以为“面积”比“房间数”重要 30 倍。
- 解决:把它们都压缩到 0 到 1 之间,或者变成标准正态分布,让它们“平起平坐”。
- 分箱 (Binning):
- 年龄从 1 岁到 100 岁都有。
- 有时候我们不关心具体几岁,只关心是“小孩”、“青年”还是“老人”。
- 解决:把 0-18 岁变成 1,19-60 岁变成 2,60+ 变成 3。这叫离散化。
3.3 类别编码 (Categorical Encoding)
场景:衣服颜色有“红”、“黄”、“蓝”。计算机不认识字。
- 序号编码 (Label Encoding):
- 红=1,黄=2,蓝=3。
- 问题:模型会觉得 3 > 1,难道“蓝”比“红”大?这不合理。
- 独热编码 (One-Hot Encoding):
- 创建三个新列:[是红, 是黄, 是蓝]。
- 红 = [1, 0, 0]
- 黄 = [0, 1, 0]
- 蓝 = [0, 0, 1]
- 这样它们就平等了。
3.4 时间特征 (Date/Time Features)
场景:数据里只有一列“2023-10-01”。
- 拆解:提取出“年”、“月”、“日”、“小时”。
- 周期性:提取“是否周末”、“是否节假日”、“星期几”。
- 业务逻辑:如果是电商数据,提取“距离双十一还有几天”。
3.5 文本特征 (Text Features)
场景:用户评论“这个东西太好用了!”。
- 词袋模型 (Bag of Words):统计每个词出现的次数。
- TF-IDF:计算词的重要性(过滤掉“的”、“了”这种废话)。
- Word2Vec/Embedding:把词变成向量,让“国王”和“王后”在数学空间里靠得很近。
3.6 组合特征 (Feature Combination)
场景:你有“长”和“宽”。
- 创造新特征:计算“面积 = 长 x 宽”。
- 有时候,两个特征单独看没啥用,乘在一起就是神特征。
4. 总结
特征工程是一门艺术,它非常依赖你对业务的理解。
- 如果你懂股票,你会知道“5日均线”比单纯的“今日股价”更有用。
- 如果你懂医疗,你会知道“BMI指数”比单纯的“身高、体重”更能反映健康状况。
好的数据科学家,80% 的时间都在做特征工程,只有 20% 的时间在调模型。