正确准备分类数据是机器学习中一个基本步骤,特别是在使用线性模型时。独热编码(One Hot Encoding)作为一项关键技术脱颖而出,它能够将分类变量转换为机器可理解的格式。这篇博文将告诉您为什么不能直接使用分类变量,并演示了在寻找线性回归中最具预测性的分类特征时,如何使用独热编码。
通过我的书《进阶数据科学》启动您的项目。它提供了带有可运行代码的自学教程。
让我们开始吧。

One Hot 编码:理解数据中的“热”
图片来源:sutirta budiman。保留部分权利。
概述
这篇博文分为三部分;它们是:
- 什么是独热编码?
- 识别最具预测性的分类特征
- 评估单个特征的预测能力
什么是独热编码?
在线性模型的数据预处理中,“独热编码”(One Hot Encoding)是管理分类数据的一项关键技术。在此方法中,“热”(hot)表示类别的存在(编码为1),而“冷”(cold)(或0)表示其不存在,使用二进制向量进行表示。
从测量水平的角度来看,分类数据是**名义数据**,这意味着如果我们使用数字作为标签(例如,男性为1,女性为2),加减法等操作将没有意义。如果标签不是数字,您甚至无法进行任何数学运算。
独热编码将变量的每个类别分离为不同的特征,防止将分类数据错误地解释为在线性回归和其他线性模型中具有某种序数意义。编码后,数字具有意义,并且可以很容易地用于数学方程中。
例如,考虑一个名为“颜色”的分类特征,其值为红色、蓝色和绿色。独热编码将其转换为三个二进制特征(“Color_Red”、“Color_Blue”和“Color_Green”),每个特征表示每个观测值中是否存在(1)或不存在(0)某种颜色。这种表示向模型阐明了这些类别是不同的,没有固有的顺序。
这为什么重要?许多机器学习模型,包括线性回归,都对数值数据进行操作,并假设值之间存在数值关系。直接将类别编码为数字(例如,红色=1,蓝色=2,绿色=3)可能会暗示不存在的层次结构或定量关系,从而可能扭曲预测。独热编码避免了这个问题,以模型可以准确解释的形式保留了数据的分类性质。
让我们将此技术应用于Ames数据集,并通过一个示例演示转换过程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 仅从 Ames 数据集中加载没有缺失值的分类列 import pandas as pd Ames = pd.read_csv("Ames.csv").select_dtypes(include=["object"]).dropna(axis=1) print(f"独热编码前 DataFrame 的形状为: {Ames.shape}") # 导入 OneHotEncoder 并将其应用于 Ames from sklearn.preprocessing import OneHotEncoder encoder = OneHotEncoder(sparse=False) Ames_One_Hot = encoder.fit_transform(Ames) # 将编码结果转换回 DataFrame Ames_encoded_df = pd.DataFrame(Ames_One_Hot, columns=encoder.get_feature_names_out(Ames.columns)) # 显示新的 DataFrame 及其扩展后的形状 print(Ames_encoded_df.head()) print(f"独热编码后 DataFrame 的形状为: {Ames_encoded_df.shape}") |
这将输出
1 2 3 4 5 6 7 8 9 10 11 |
独热编码前 DataFrame 的形状为: (2579, 27) MSZoning_A (agr) ... SaleCondition_Partial 0 0.0 ... 0.0 1 0.0 ... 0.0 2 0.0 ... 0.0 3 0.0 ... 0.0 4 0.0 ... 0.0 [5 行 x 188 列] 独热编码后 DataFrame 的形状为: (2579, 188) |
正如所见,Ames 数据集的分类列被转换为 188 个不同的特征,这说明了独热编码提供的复杂性和详细表示的扩展。这种扩展虽然增加了数据集的维度,但在对线性回归中分类特征和目标变量之间的关系进行建模时,是一个至关重要的预处理步骤。
想开始学习进阶数据科学吗?
立即参加我的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
识别最具预测性的分类特征
理解了独热编码在线性模型中的基本原理和应用之后,我们分析的下一步是确定哪个分类特征对预测我们的目标变量贡献最大。在下面的代码片段中,我们遍历数据集中的每个分类特征,应用独热编码,并结合交叉验证使用线性回归模型评估其预测能力。这里,`OneHotEncoder` 函数中的 `drop="first"` 参数起着至关重要的作用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# 在上述代码的基础上识别顶级分类特征 来自 sklearn.linear_model 导入 LinearRegression from sklearn.model_selection import cross_val_score # 将 'SalePrice' 设置为目标变量 y = pd.read_csv("Ames.csv")["SalePrice"] # 存储特征名称及其对应的平均 CV R² 分数的字典 feature_scores = {} for feature in Ames.columns: encoder = OneHotEncoder(drop="first") X_encoded = encoder.fit_transform(Ames[[feature]]) # 初始化线性回归模型 model = LinearRegression() # 执行 5 折交叉验证并计算 R^2 分数 scores = cross_val_score(model, X_encoded, y) mean_score = scores.mean() # 存储平均 R^2 分数 feature_scores[feature] = mean_score # 根据其平均 CV R² 分数按降序对特征进行排序 sorted_features = sorted(feature_scores.items(), key=lambda item: item[1], reverse=True) print("预测能力最高的特征选择:", sorted_features[0][0]) |
`drop="first"` 参数用于减轻完全共线性。通过删除第一个类别(将其隐式编码为某个特征的所有其他类别的零),我们减少了冗余和输入变量的数量,同时不丢失任何信息。这种做法简化了模型,使其更容易解释,并通常能提高其性能。上述代码将输出:
1 |
预测能力最高的特征选择: Neighborhood |
我们的分析表明,“Neighborhood”是数据集中预测能力最高的分类特征。这一发现突出了位置对Ames数据集中房价的显著影响。
评估单个特征的预测能力
在深入理解独热编码并识别最具预测性的分类特征之后,我们现在将分析扩展到揭示对房价有显著影响的五个顶级分类特征。这一步骤对于微调我们的预测模型至关重要,使我们能够专注于在预测结果方面提供最大价值的特征。通过评估每个特征的平均交叉验证R²分数,我们不仅可以确定这些特征的个体重要性,还可以深入了解房产的不同方面如何对其整体估值做出贡献。
让我们深入研究这个评估。
1 2 3 4 |
# 在上述代码的基础上,确定前5个分类特征的性能 print("前5个分类特征:") for feature, score in sorted_features[0:5]: print(f"{feature}: 平均 CV R² = {score:.4f}") |
我们的分析结果揭示了影响房价的关键因素的快照:
1 2 3 4 5 6 |
前 5 个分类特征 Neighborhood: 平均 CV R² = 0.5407 ExterQual: 平均 CV R² = 0.4651 KitchenQual: 平均 CV R² = 0.4373 Foundation: 平均 CV R² = 0.2547 HeatingQC: 平均 CV R² = 0.1892 |
这个结果强调了“Neighborhood”(社区)特征作为主要预测因素的重要性,强化了位置显著影响房价的观点。紧随其后的是“ExterQual”(外部材料质量)和“KitchenQual”(厨房质量),这突出表明买家对建筑和装修质量的高度重视。“Foundation”(地基)和“HeatingQC”(供暖质量和状况)也表现出重要性,尽管预测能力较低,这表明结构完整性和舒适性特征是购房者的关键考虑因素。
进一步阅读
API
教程
Ames 住房数据集和数据字典
总结
在这篇文章中,我们重点讨论了为线性模型准备分类数据的关键过程。从解释独热编码开始,我们展示了该技术如何通过创建二进制向量使分类数据可用于线性回归。我们的分析确定“Neighborhood”是对房价影响最大的分类特征,强调了位置在房地产估价中的关键作用。
具体来说,你学到了:
- 独热编码在将分类数据转换为线性模型可用格式中的作用,防止算法误解数据的性质。
- 独热编码中 `drop='first'` 参数的重要性,以避免线性模型中的完全共线性。
- 如何在线性模型的背景下评估单个分类特征的预测能力并对其性能进行排名。
您有任何问题吗?请在下面的评论中提出您的问题,我将尽力回答。
暂无评论。