机器学习入门实战:从Label/Feature到完成1个房价预测模型

1. 项目概述与核心概念

房价预测是机器学习领域经典的回归问题,它能帮助我们理解如何将现实问题转化为数学模型。这个项目会带你完整走通数据加载、特征工程、模型训练与评估的全流程,最终得到一个可实际运行的预测模型。

核心概念快速解析

  • Label(标签) :在房价预测中,这就是我们要预测的房屋价格。它是模型的"参考答案",在训练数据中以数值形式存在(如325000元)。
  • Feature(特征) :影响房价的各种因素,比如:
    • 房屋面积(平方米)
    • 卧室数量
    • 所在楼层
    • 建筑年代
    • 周边学校评分

专业提示:特征工程的质量直接决定模型上限。好的特征应该与标签有强相关性且彼此间独立性较强。

2. 环境准备与数据加载

2.1 工具链配置

推荐使用Python生态中的经典组合:

# 基础数据处理
import pandas as pd
import numpy as np

# 可视化
import matplotlib.pyplot as plt
import seaborn as sns

# 机器学习
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

2.2 数据加载与初探

我们使用经典的波士顿房价数据集(也可替换为实际业务数据):

# 加载数据
from sklearn.datasets import load_boston
boston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['PRICE'] = boston.target

# 查看数据结构
print(df.head())
print(f"\n数据集形状:{df.shape}")

典型数据格式示例:

CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTRATIO B LSTAT PRICE
0.006 18 2.31 0 0.538 6.575 65.2 4.09 1 296 15.3 396.9 4.98 24.0

3. 特征工程实战

3.1 数据清洗

处理缺失值和异常值是首要任务:

# 检查缺失值
missing_values = df.isnull().sum()
print("缺失值统计:\n", missing_values)

# 处理异常值(以房间数RM为例)
q1 = df['RM'].quantile(0.25)
q3 = df['RM'].quantile(0.75)
iqr = q3 - q1
df = df[~((df['RM'] < (q1 - 1.5*iqr)) | (df['RM'] > (q3 + 1.5*iqr)))]

3.2 特征分析与选择

通过相关性分析筛选重要特征:

# 计算特征相关性
corr_matrix = df.corr()
plt.figure(figsize=(12,8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')

# 选择与房价相关性高的特征
high_corr_features = corr_matrix['PRICE'][abs(corr_matrix['PRICE']) > 0.5].index
df = df[high_corr_features]

3.3 特征缩放与转换

不同尺度的特征需要标准化:

# 分离特征和标签
X = df.drop('PRICE', axis=1)
y = df['PRICE']

# 标准化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

4. 模型构建与训练

4.1 基础线性回归模型

# 初始化模型
lr_model = LinearRegression()

# 训练模型
lr_model.fit(X_train, y_train)

# 预测测试集
y_pred = lr_model.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
print(f"模型RMSE:{rmse:.2f}")

4.2 模型优化技巧

特征组合 :尝试创建新特征提升表现

# 示例:创建房间面积与卧室数量的比值特征
df['ROOM_RATIO'] = df['RM'] / df['PTRATIO']

# 重新训练模型...

正则化处理 :防止过拟合

from sklearn.linear_model import Ridge

ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)

5. 模型评估与部署

5.1 评估指标解析

指标 公式 特点
MSE $\frac{1}{n}\sum(y-\hat{y})^2$ 放大较大误差
RMSE $\sqrt{MSE}$ 与目标同单位
$1-\frac{\sum(y-\hat{y})^2}{\sum(y-\bar{y})^2}$ 解释方差比例

5.2 结果可视化

plt.figure(figsize=(10,6))
plt.scatter(y_test, y_pred, alpha=0.6)
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'k--')
plt.xlabel('真实价格')
plt.ylabel('预测价格')
plt.title('预测结果对比')

5.3 模型保存与使用

import joblib

# 保存模型
joblib.dump(lr_model, 'house_price_lr_model.pkl')

# 加载使用
loaded_model = joblib.load('house_price_lr_model.pkl')
new_data = scaler.transform([[0.1, 6.5, 4, 0.4]])  # 注意特征顺序
print(f"预测价格:{loaded_model.predict(new_data)[0]:.1f}万元")

6. 进阶方向与优化建议

当基础模型表现不佳时,可以考虑:

  1. 更复杂的模型

    • 决策树回归
    • 随机森林
    • XGBoost
  2. 深度学习方案

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential([
    Dense(64, activation='relu', input_shape=(X_train.shape[1],)),
    Dense(32, activation='relu'),
    Dense(1)
])
model.compile(optimizer='adam', loss='mse')
model.fit(X_train, y_train, epochs=100, batch_size=32)
  1. 业务理解优化
    • 收集更多有预测力的特征(如地铁距离、商圈指数)
    • 考虑时间因素(房价随时间波动)
    • 地域细分(不同区域分别建模)
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐