0Pricing
Learn AI with Python · 课时

分类变量编码

标签编码、独热编码、序数编码,以及 pd.get_dummies() 与 sklearn OrdinalEncoder 的比较

分类变量编码 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

为什么要编码类别

大多数机器学习模型需要的是 NUMBERS,而不是“红色”或“小型”这样的文本标签。编码可以将类别变量转换为数值形式,同时保留其含义。

序数型与名义型

序数型类别具有自然顺序(小型 < 中型 < 大型)。名义型类别没有自然顺序(红色、绿色、蓝色)。正确的编码方式取决于类别的类型。

序数型数据的标签编码

LabelEncoder会将每个类别映射为一个整数。对于整数顺序具有实际意义的 ORDINAL 数据,这种方法很合适。

from sklearn.preprocessing import LabelEncoder
sizes = ["small", "large", "medium", "small"]
le = LabelEncoder()
print(le.fit_transform(sizes))   # integers (alphabetical by default)

名义型数据中的风险

将标签编码应用于 NOMINAL 数据存在风险:模型可能会将红色=0、绿色=1、蓝色=2 解读为绿色“位于”红色和蓝色之间,从而凭空产生错误的顺序。请改用独热编码。

使用 get_dummies 进行独热编码

pd.get_dummies会为每个类别创建一个二进制列。每行恰好有一个列的值为 1,不会隐含任何顺序,非常适合名义型变量。

import pandas as pd
df = pd.DataFrame({"color": ["red", "green", "blue", "red"]})
print(pd.get_dummies(df, columns=["color"]))

虚拟变量陷阱

当 k 个类别生成 k 列时,这些列会完全共线(它们的和始终为 1)。这就是虚拟变量陷阱,会破坏线性模型。删除一列即可解决问题。

删除首个类别参数

drop_first=True会移除一个类别,只保留 k-1 列。被删除的类别会成为隐式基准(全为零),从而消除共线性。

print(pd.get_dummies(df, columns=["color"], drop_first=True))
# one fewer column; the dropped color is the baseline

机器学习库中的 OrdinalEncoder

对于管道,OrdinalEncoder是机器学习库中用于 FEATURES 标签编码的对应工具,并且允许您明确指定类别顺序。

from sklearn.preprocessing import OrdinalEncoder
enc = OrdinalEncoder(categories=[["small", "medium", "large"]])
print(enc.fit_transform([["medium"], ["large"], ["small"]]))

机器学习库中的 OneHotEncoder

OneHotEncoder是适合管道使用的独热编码工具。它会从训练数据中学习类别,并将相同的映射应用于新数据,这对生产环境至关重要。

from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(sparse_output=False)
print(ohe.fit_transform([["red"], ["green"], ["blue"]]))

处理未见过的类别

测试数据中可能包含训练时从未见过的类别。请设置 handle_unknown="ignore",这样 OneHotEncoder 会输出全零,而不会引发错误。

ohe = OneHotEncoder(handle_unknown="ignore", sparse_output=False)
ohe.fit([["red"], ["green"]])
print(ohe.transform([["blue"]]))   # all zeros, no error

高基数列

对包含数千个唯一值的列进行独热编码,会使特征数量急剧膨胀。对于高基数数据,可以考虑目标编码、哈希编码,或将罕见类别归入“其他”。

快速检查

请测试您对编码的理解。

回顾

编码工具箱:

  • 序数型数据 -> 整数编码(LabelEncoder / OrdinalEncoder)
  • 名义型数据 -> 独热编码(pd.get_dummies / OneHotEncoder)
  • drop_first=True可以避免虚拟变量陷阱
  • 对于测试数据中未见过的类别,使用 handle_unknown="ignore"
  • 请注意高基数列导致的特征数量膨胀

常见问题解答

「分类变量编码」课时是免费的吗?

是的 — 「分类变量编码」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「分类变量编码」这节课中我会学到什么?

标签编码、独热编码、序数编码,以及 pd.get_dummies() 与 sklearn OrdinalEncoder 的比较 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「分类变量编码」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 异常值检测与移除
  2. 分类变量编码
  3. 特征缩放:归一化与标准化
  4. 构建预处理流程
← 返回 Learn AI with Python