一句话总结
特征工程就是:换个角度看数据,让 AI 模型更容易看懂。 数据本身没变,只是你观察它的方式变了。
打个比方:一束白光照过来,你只知道"有光";但拿三棱镜一照,你看到了七种颜色------信息没变,角度变了。
第一件事:给数据"化个妆",让模型一眼能看懂
专业名叫:微观投影 / 特征处理
原始数据直接丢给模型,模型可能"看懵了"。所以要先处理一下:
1)分堆(离散化) 年龄直接给数字,模型学得费劲。改成"老年人 / 中年人 / 青年人",模型一下就抓住大规律了。
2)拉平(归一化) "年龄"是 0-100,"气温"是 -20 到 40。模型会误以为年龄比气温更重要(因为数字大)。归一化就是把它们拉到同一个尺度,公平对待------谁重要让模型自己去学,别在数据里偏心。
3)戴眼镜(非线性变换) 有些模型(比如线性模型)只能看懂直线关系,但现实中很多关系是曲线。给数据做个数学变换(比如平方、取对数),相当于给模型戴了副眼镜,曲线就变直线了。
4)组合(特征交叉) 单个特征不够,两个放一起才有意义。比如"性别"和"年龄段"单独看都一般,但"20 岁女性"这个组合就很有价值。(现在复杂模型已经能自动做这件事了)
第二件事:别让数字"骗"了模型
专业名叫:独热编码 / 高维投影
问题: 性别用 0=男、1=女、2=未知 来表示。模型看到数字会想当然地以为:
2 > 1 > 0,也就是"未知 > 女性 > 男性"- 甚至以为"女性 + 女性 = 未知"
这完全是胡扯,但模型就是会这么算。
结果: 模型学了半天发现搞不懂,干脆放弃这个特征,把它的权重学成 0------这么重要的信息就白丢了。
解决办法(独热编码): 给每个类别一个独立的"座位",互不干扰:
| 类别 | 编码 |
|---|---|
| 男 | [1, 0, 0] |
| 女 | [0, 1, 0] |
| 未知 | [0, 0, 1] |
这样三个类别之间没有大小关系,模型不会乱猜。
核心道理: 垃圾进,垃圾出(rubbish in, rubbish out)。你给的数据格式不对,模型再聪明也学不好。
第三件事:让模型知道"谁和谁是一伙的"
专业名叫:语义嵌入 / Word2Vec / 对比学习
独热编码的毛病: 所有词之间的距离都一样。但现实中,"羽毛球"和"高尔夫"明显比"插花"更亲近。怎么让模型也知道?
办法: 从海量文章里统计规律------经常挨在一起出现的词,大概率是一伙的。
比如"羽毛球"经常和"球拍""场地"一起出现,"高尔夫"经常和"球杆""球场"一起出现,模型就知道它们关系近。
两种具体做法:
- Skip-gram: 给你一个词,猜它前后是什么词
- CBOW: 给你前后的词,猜中间是什么词
这个方法叫 Word2Vec,是 AI 理解语言的老祖宗。现在的 GPT,最早就是从这个思路一步步发展来的。
记住这几个词就够了
| 术语 | 大白话 |
|---|---|
| 特征工程 | 换角度看数据,帮模型减负 |
| 离散化 | 把数字分堆(年龄→老中青) |
| 归一化 | 把不同尺度拉平,公平对待 |
| 独热编码 | 给每个类别独立座位,别让数字骗模型 |
| Word2Vec | 从文章里学"谁和谁是一伙的" |
| Skip-gram / CBOW | Word2Vec 的两种具体做法 |
| 对比学习 | 让相似的东西更近,不相似的更远 |
最终记忆口诀
特征工程三步走:
- 化个妆 ------ 数据变形,让模型看得懂
- 排座位 ------ 独热编码,不让数字乱猜
- 拉关系 ------ 语义嵌入,知道谁和谁近