机器学习实践项目(二)- 房价预测 - 处理数据
从混乱到整洁:Kaggle房价预测数据清洗与特征处理
📘 本文是 Kaggle 房价预测系列第二篇,带你从原始数据走向机器可理解的干净特征矩阵。
我们将一步步完成数据合并、特征编码、缺失值填补和标准化,为后续建模打好地基。
📖 目录
- 数据合并与目标变量分离
- 类别特征处理(One-Hot 编码)
- 缺失值填补
- 数值标准化
- 生成训练与测试数据
- 小结
一、数据合并与目标变量分离
在 Kaggle 房价项目中,训练集和测试集的字段完全一致。
为了保证处理方式统一,我们先将两者合并。
import numpy as np
import pandas as pdtrain_df = pd.read_csv('./input/train.csv')
test_df = pd.read_csv('./input/test.csv')# 取出目标变量并取对数
y_train = np.log1p(train_df.pop("SalePrice"))# 合并训练集与测试集
all_df = pd.concat((train_df, test_df), axis=0)
二、类别特征处理:One-Hot 编码
模型无法直接理解字符串型类别数据,因此我们需要将它们转换为数值形式。
最常用的方法是 独热编码(One-Hot Encoding)。
all_dummy_df = pd.get_dummies(all_df, dtype=int)
all_dummy_df.head()
独热编码会为每个类别生成一个 0/1 变量。
例如,MSSubClass原本有 16 个取值,就会被展开为 16 个特征。
三、缺失值填补
现实世界的数据总有缺失。我们先检查缺失列:
all_dummy_df.isnull().sum().sort_values(ascending=False).head()
然后用每列的均值来填补数值型缺失:
mean_cols = all_dummy_df.mean()
all_dummy_df = all_dummy_df.fillna(mean_cols)
如果是类别特征缺失,
pd.get_dummies()已自动将其视为 0/1。
对数值型列,这种均值填充是快速又稳妥的方式。
四、数值标准化
线性模型、岭回归等算法对特征量纲敏感。
因此,我们要对数值特征做标准化(均值为 0,方差为 1)。
numeric_cols = all_df.columns[all_df.dtypes != 'object']for col in numeric_cols:all_dummy_df[col] = (all_dummy_df[col] - all_dummy_df[col].mean()) / all_dummy_df[col].std()
五、生成训练与测试数据
数据清洗完成后,我们重新拆分训练集与测试集:
dummy_train_df = all_dummy_df.iloc[train_df.index]
dummy_test_df = all_dummy_df.iloc[test_df.index]X_train = dummy_train_df.values
X_test = dummy_test_df.values
现在,X_train 和 X_test 就是干净统一的特征矩阵,可以直接喂给模型使用。
六、小结
✅ 至此,我们完成了数据清洗的关键步骤:
| 步骤 | 操作 | 目的 |
|---|---|---|
| 数据合并 | 拼接 train/test | 确保一致性 |
| One-Hot 编码 | 类别 → 0/1 | 模型可识别 |
| 缺失值填补 | 用均值补全 | 防止错误 |
| 标准化 | 调整量纲 | 稳定训练 |
🚀 在下一篇《Kaggle房价预测(三)——从模型到预测》
我们将正式进入建模阶段,使用岭回归与随机森林进行预测。
