第 10 章:特征工程:人类最后一次手工教机器
本章问题:模型学习之前,人类要先告诉它看什么?
10.1 原始世界不是数字
上一章我们讲了统计学习的核心思路:给算法一堆标注好的数据,让它自己找出输入和输出之间的规律。
但在实践中,有一个前置步骤被跳过去了:你如何把现实世界变成"输入"?
算法不看世界。它们看数字。
银行想用机器学习做贷款审批。"这个申请人"——在现实世界里是一个人,有一份工作记录、一张银行流水、一叠资产证明。在算法眼里,它必须被压缩成一行数字:收入多少、工作年限多长、现有贷款多少笔、信用分多少……
原始世界是混乱的。照片是像素矩阵。一段话是文字的排列。心跳数据是时间序列。交易记录是表格。这些数据和"能不能贷款"之间的关联并不是数据自己带着标签的。人必须决定:让算法看什么。
这个步骤就是特征工程:把原始信息变成"特征"——一组可以被算法处理的数字,用来预测输出。
在深度学习的端到端思维普及之前,特征工程曾经是机器学习中最核心、最消耗时间、也最考验经验的工作。行业内有一句话经常被重复:"数据和特征决定了机器学习效果的上限,而模型和算法只是在逼近这个上限。"
10.2 什么是好特征?
好特征没有统一的公式。但通常有几个准则。
相关性。 特征应该和你要预测的目标有关——房价和面积有关,和房子漆成什么颜色基本无关(除非那是极端情况下的古怪偏好)。
可计算性。 特征必须能被稳定地从原始数据中提取出来。"这个人看起来可靠吗"不是特征,因为算法不知道什么叫"看起来可靠"。"这个人过去两年内按时还款的比例"是特征,因为它可以从还款记录里算出。
相互独立。 如果一个特征可以通过另一个特征直接推导出来(比如"年龄"和"出生年份"),那么只保留一个就够了。信息冗余不会让模型变得更聪明,只会增加不必要的复杂度。
稳定性。 特征的定义应该在不同时间、不同场景下保持一致。"上个月消费的 Z-score"比"上个月花了多少钱"更稳定——前者自动适应一个人消费水平的整体变化,后者会因涨工资而失去比较意义。
在实践上,设计好特征需要三种不同的能力叠加:领域知识(知道在这个具体的行业里什么因素重要)、数据直觉(知道数据里哪些模式可能承载信息)和数学工具(知道怎么把这些直觉变成可计算的特征)。这也就是为什么好的特征工程师很难找。
10.3 当特征可以"变":核方法的巧思
特征工程的直觉其实贯穿了 1990 年代到 2000 年代初的很多机器学习研究。一个特别漂亮的例子是 SVM——支持向量机及其"核技巧"。
SVM 在最原始的版本里,也只能画一条直线来分类——和感知机差不多。但研究者很快发现一个想法:如果你把数据从原始空间"投射"到一个更高维的空间,在那里它们可能变得可以被直线分开。
用人类的语言说:两个类别的点在二维平面上混在一起,一条直线死活分不开。但如果你给每个点加一个"高度"——把它从二维升到三维——有些点飞到上方,有些落到下方,你就可能用一个平面把它们切开。
做这个转换的函数叫"核函数"。核函数的巧妙之处在于:你不需要真的把所有数据都升维——那计算量大到不可承受。核方法通过一个数学恒等变换,让你在高维空间中"计算距离"所需的所有信息,都来自于原始空间中已有的低维计算。
这在当时是一个令人赞叹的优雅方案——你不必靠人设计海量新特征,你的核函数在隐式地把数据推向更可分的空间。但它也有一个根本的问题:选择合适的核函数仍然需要经验。 你是用高斯核,还是多项式核?它们各自的参数怎么调?这些决策最后还是要靠领域知识和反复试验来做出。
特征工程走了半步——核方法让人不用手动写每一个特征了,但仍然没有让机器自己学会"什么特征重要"。不过,这半步已经让 SVM 在 1990 年代到 2000 年代初成为最有效的分类器之一,尤其在手写数字识别、文本分类和生物信息学中表现出色。
10.4 另一条路:把决策拆成树状
特征工程不是唯一在进步的路线。同一时期,基于树的模型也在进化。
决策树的直觉异常简单:它把决策过程拆成一组"是/否"的问题链。以贷款为例——"收入大于 5000?"→ 是 → "有房产?"→ 是 → "批准"。每个分叉是一个判断,每条路径的终点是一个决策。
决策树和符号主义的规则系统看起来很相似——都是用规则链来推理。但决策树的规则不是人手写的。它的构建算法(如 ID3、C4.5 和 CART)会从数据中自动选择"最优的分割点"——在哪个特征上、按哪个值来切分,能最有效地区分出两类样本。
但单棵决策树容易出问题:如果你让它一直往下长,它会严重过拟合——把训练数据里的每一点随机噪声都变成一条"规则"。如果你限制它的深度,它可能又学不到足够细致的关系。
解决这个问题的方法就是——多种几棵树。
随机森林的训练思路很简单:从原始数据中做多次随机采样,每次用一种不同的"视角"看数据的一部分;每颗树独立训练,最后投票决定预测结果。多种树在一起比任意一棵单独的树更稳定、更不容易过拟合——因为每棵树看到的随机噪声各不相同,但真正的规律会在大多数树上反复出现。
随机森林虽然不像 SVM 的核方法那样有漂亮的数学框架,但它在实践中非常强大、调参需求也远低于 SVM——甚至对特征缩放之类的人为操作都不敏感。在很多表格数据的竞赛和工业场景里,随机森林在深度学习出现之前是事实上的基准方案。
10.5 特征工程的代价
到这里你可能会注意到一个让人不太舒服的模式:不管是 SVM 还是随机森林,特征都得由人来选。
你选择了让算法看哪些特征,也就划定了它能发现什么规律的边界。如果有效的信息在"直觉上不显眼"的特征里——比如银行流水中某个看似不相关的指标加在一起才揭示了高风险——那么你很可能永远不会想到把它加入特征集,算法也就永远不会学到它。
这意味着:特征工程的瓶颈不是算法的学习能力,而是人类的想象力。
这个瓶颈在传统机器学习的很多应用中都暴露了。在图像中,人类设计的特征——边缘、角点、颜色分布——能捕捉浅层信息,但很难提取语义信息("这是一个笑脸")。在语音识别里,人类设计的声学特征在干净环境里不错——但背景一嘈杂就不行了。在自然语言中,人类可以标注"这是一个名词""这是一个介词短语"——但"这段话的隐含态度是讽刺"完全无法通过浅层特征来编码。
特征工程的困境和专家系统的困境在本质上同源:当系统的上限由"人能把什么写成特征/规则"来定义时,系统的能力就被人的表达能力锁住了。
10.6 末代手艺
在深度学习到来之前,特征工程是机器学习中最吃功夫的手艺。
最优秀的数据科学竞赛选手,往往不是因为他们掌握的算法比别人多,而是因为他们在特征设计上有更好的直觉。他们能盯着数据看好几个小时后,突然发现——把"早上八点的交易数量"除以"晚上十点的交易数量"这个比值,和欺诈行为高度相关。这种能力部分靠天赋、部分靠经验、部分靠反复试错。
在这段时期,人工智能的进步节奏是这样的:
- 在新数据集上尝试既有模型;
- 效果不好→回到特征工程,设计更好的特征;
- 新特征提出来→重新训练→效果好转;
- 再遇到天花板→再思考还有哪些隐藏信息没被转换成特征。
每一次进步,主要不是来自更好的学习算法,而是来自更好的手工特征。
但这也意味着另一个问题:已经设计好的特征,很难迁移到其他任务。 如果你为一套邮件分类系统精心打磨了三百个特征,当你转去做短信诈骗识别时,其中可能只有十个还能用——剩下的需要重做。
这是手工特征的本质限制:特征是在"任务层"而不是"世界层"的知识。 它们教机器如何解决一个具体问题,而不是教机器理解这组数据背后的世界。
下一章,我们会看到特征工程在它最得意的领域——计算机视觉——中达到了什么高度,以及它为什么会在这里撞上一堵墙。图像让"人工设计特征"的局限性暴露得比任何其他领域都更刺眼。
10.7 本章小实验:设计三个特征
找一件你每天做的事情——比如判断什么时候该洗衣服了,或者判断今天地铁会不会拥挤。
现在,假装你要写一个机器学习系统来替你自动做这个判断。
列出三个你认为最有效的"特征"——三个可以被量化的数字,用来预测你的目标。
洗衣服的例子:
- 你最近三天穿过的衣服总数;
- 衣柜里剩余的干净衣服数量;
- 距离上一次洗衣服已经过了几天。
地铁拥挤的例子:
- 今天是周几(周一=1,周日=7);
- 当前时间距离上班高峰期(8:00)的分钟数的绝对值;
- 今天是普通工作日还是假期(0 或 1)。
然后问自己:
- 这三个特征够吗?如果不够,还缺什么信息?
- 你有没有一个直觉上很重要、但完全不知道该怎么量化的因素?(比如"我今天的心情")
- 如果你有了这三个特征并且系统效果不好,你觉得是因为特征选错了,还是因为你能想到的所有特征都不真的和信息源有高相关性?
这个实验应该能让你直觉上体会到:数据里不一定包含你需要的信号——而你设计的特征只能捕捉数据里已有的信息。 特征工程的天花板不在于技巧,而在于数据本身的丰富度。
10.8 本章地图
10.9 本章结语:最后一次,由人来画图纸
特征工程是人工智能在"让机器自己学"和"仍然靠人教"之间的最后一次妥协。
它比写规则进了一步——模型不再像专家系统那样完全依赖人写的逻辑,但比深度学习退了一步——模型还是需要人来告诉它应该注意什么。
在这种妥协中,AI 取得了它在大数据时代最扎实的进步:垃圾邮件检测、信用卡欺诈识别、手写数字识别、早期的语音和图像分类。每一个成果背后,除了训练数据外,都有一群特征工程师在背后做了大量不被看到的设计工作。
但它也留下了一个悬而未决的问题:如果人没有能力设计出足够的特征怎么办?如果真正的规律,存在于人类"不知道应该看哪里"的那部分空间里?
这个问题,正是深度学习要接过来回答的。
但在那之前,还有一件事值得看清:在计算机视觉这个特定领域里,"手工特征"到底被推到了什么高度——以及它在什么分界点开始崩塌。下一章,我们看 HOG、SIFT 与早期视觉的辉煌和它的极限。
Discussion
留言区 · GitHub-powered comments via Giscus