机器学习实践项目(二)- 房价预测 - 处理数据

从混乱到整洁:Kaggle房价预测数据清洗与特征处理

📘 本文是 Kaggle 房价预测系列第二篇,带你从原始数据走向机器可理解的干净特征矩阵。
我们将一步步完成数据合并、特征编码、缺失值填补和标准化,为后续建模打好地基。


📖 目录

  1. 数据合并与目标变量分离
  2. 类别特征处理(One-Hot 编码)
  3. 缺失值填补
  4. 数值标准化
  5. 生成训练与测试数据
  6. 小结

一、数据合并与目标变量分离

在 Kaggle 房价项目中,训练集和测试集的字段完全一致。
为了保证处理方式统一,我们先将两者合并。

import numpy as np
import pandas as pd

train_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_trainX_test 就是干净统一的特征矩阵,可以直接喂给模型使用。


六、小结

✅ 至此,我们完成了数据清洗的关键步骤:

步骤操作目的
数据合并拼接 train/test确保一致性
One-Hot 编码类别 → 0/1模型可识别
缺失值填补用均值补全防止错误
标准化调整量纲稳定训练

🚀 在下一篇《Kaggle房价预测(三)——从模型到预测》
我们将正式进入建模阶段,使用岭回归与随机森林进行预测。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值