侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1824 篇文章
  • 累计收到 0 条评论

实现并优化线性回归模型预测房价

2025-12-11 / 0 评论 / 5 阅读

题目

实现并优化线性回归模型预测房价

信息

  • 类型:问答
  • 难度:⭐⭐

考点

线性回归原理,梯度下降优化,特征工程,模型评估

快速回答

实现线性回归模型预测房价的核心步骤:

  • 使用均方误差(MSE)作为损失函数:$J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)}) - y^{(i)})^2$
  • 通过梯度下降更新参数:$\theta_j := \theta_j - \alpha\frac{\partial}{\partial\theta_j}J(\theta)$
  • 关键优化措施:特征缩放(归一化)、学习率调整、添加多项式特征
  • 评估指标:R²分数、均方根误差(RMSE)
## 解析

原理说明

线性回归通过建立特征与目标变量的线性关系进行预测:$h_\theta(x) = \theta_0 + \theta_1x_1 + ... + \theta_nx_n$。目标是最小化预测值与真实值的均方误差(MSE)。梯度下降通过计算损失函数的梯度迭代更新参数:$\theta_j := \theta_j - \alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)}$。

代码示例

import numpy as np
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.metrics import r2_score

# 特征工程:多项式扩展和标准化
poly = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly.fit_transform(X)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_poly)

# 梯度下降实现
def gradient_descent(X, y, theta, alpha, iterations):
    m = len(y)
    cost_history = []

    for _ in range(iterations):
        h = X.dot(theta)
        loss = h - y
        gradient = X.T.dot(loss) / m
        theta -= alpha * gradient
        cost = np.sum(loss**2) / (2*m)
        cost_history.append(cost)
    return theta, cost_history

# 添加偏置项并初始化参数
X_b = np.c_[np.ones((len(X_scaled), 1)), X_scaled]
theta_init = np.random.randn(X_b.shape[1], 1)
y = y.reshape(-1, 1)

# 训练模型
theta_final, costs = gradient_descent(X_b, y, theta_init, alpha=0.01, iterations=1000)

# 预测与评估
y_pred = X_b.dot(theta_final)
rmse = np.sqrt(np.mean((y_pred - y)**2))
r2 = r2_score(y, y_pred)

最佳实践

  • 特征缩放:使用StandardScaler归一化特征,加速梯度下降收敛
  • 学习率选择:通过损失曲线调整α值(常用0.01-0.1),过大导致震荡,过小收敛慢
  • 多项式特征:对非线性关系添加二次项/交叉项(注意避免过拟合)
  • 迭代终止:设置收敛阈值(如损失变化<1e-5)而非固定迭代次数

常见错误

  • 未归一化特征导致梯度下降不稳定
  • 忘记添加偏置项($\theta_0$)导致模型偏差
  • 学习率设置不当引发震荡或收敛过慢
  • 忽略特征相关性检查(使用热力图分析)
  • 未划分训练集/测试集导致过拟合误判

扩展知识

  • 正则化:L2正则化(岭回归)解决多重共线性:$J(\theta) = MSE(\theta) + \alpha\sum_{i=1}^{n}\theta_i^2$
  • 优化算法:随机梯度下降(SGD)加速大数据集训练,动量法减少震荡
  • 评估进阶:交叉验证评估模型稳定性,学习曲线诊断偏差/方差
  • 对比方案:决策树处理非线性关系,集成方法提升预测精度