第1关:线性回归实践 - 波斯顿房价预测
时间: 2025-05-01 21:00:27 浏览: 68
<think>好的,用户需要关于使用线性回归进行波士顿房价预测的实践教程或示例代码。首先,我需要回忆相关的知识点,确保信息准确。波士顿房价数据集是机器学习中的经典案例,常用于回归任务。线性回归在这里是基础模型,可能涉及数据预处理、模型训练、评估等步骤。
用户提到的引用里有三个来源,其中引用1和引用3提到了标准化处理、数据分割、岭回归以及性能评估。需要整合这些信息到回答中。比如标准化处理对线性回归的重要性,数据分割的方法,以及如何评估模型性能,如R方和MSE。引用3还提到了岭回归,可能需要说明为什么使用正则化,比如解决过拟合或共线性问题。
接下来,用户需要示例代码。我应该提供一个完整的流程,包括导入库、加载数据、数据预处理(标准化)、划分数据集、模型训练(包括线性回归和岭回归)、预测、评估以及可视化结果。代码需要正确,并且有注释说明每一步的作用。
同时,用户可能对代码的实用性感兴趣,引用2提到整个流程的典型性,因此需要确保代码示例覆盖从预处理到评估的全过程。此外,可能需要解释关键步骤,比如为什么使用train_test_split,标准化为何放在训练集后进行,避免数据泄漏。
然后,生成相关问题需要考虑用户可能的后续疑问,比如特征工程、不同回归模型的比较、正则化参数的影响,以及如何部署模型。这些问题有助于用户进一步学习。
需要检查LaTeX格式是否正确,数学公式用$...$和$$...$$,例如均方误差公式:$$MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2$$。确保所有公式符合要求,引用标识正确添加在相关段落末尾。
最后,确保回答结构清晰,分步骤讲解,代码部分用代码块突出显示,相关问题有逻辑性,覆盖用户可能感兴趣的方向。同时,避免使用Markdown格式,保持自然的中文叙述。</think>### 使用线性回归预测波士顿房价的实践教程
#### 1. 数据准备与预处理
波士顿房价数据集包含13个特征(如犯罪率、房间数等)和1个目标变量(房价中位数)。首先需要进行数据标准化处理,消除量纲差异对模型的影响[^1]:
```python
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
# 加载数据集(注意:新版sklearn已移除,可使用替代方案)
boston = load_boston()
X, y = boston.data, boston.target
# 数据标准化(重要!)
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)
```
#### 2. 模型训练与评估
使用普通线性回归和岭回归(带L2正则化)进行对比[^3]:
```python
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.metrics import mean_squared_error, r2_score
# 普通线性回归
lr = LinearRegression()
lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)
# 岭回归(正则化系数alpha=1.0)
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
y_pred_ridge = ridge.predict(X_test)
# 评估指标
print(f"线性回归 MSE: {mean_squared_error(y_test, y_pred):.2f}, R²: {r2_score(y_test, y_pred):.2f}")
print(f"岭回归 MSE: {mean_squared_error(y_test, y_pred_ridge):.2f}, R²: {r2_score(y_test, y_pred_ridge):.2f}")
```
#### 3. 结果可视化
通过散点图对比预测值与真实值:
```python
import matplotlib.pyplot as plt
plt.figure(figsize=(10,4))
plt.scatter(y_test, y_pred, alpha=0.6, label='Linear Regression')
plt.scatter(y_test, y_pred_ridge, alpha=0.6, label='Ridge Regression')
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'k--')
plt.xlabel("True Values")
plt.ylabel("Predictions")
plt.legend()
plt.show()
```
#### 4. 关键公式说明
线性回归的目标函数为最小化残差平方和:
$$J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)}) - y^{(i)})^2$$
岭回归通过引入L2正则化项控制模型复杂度:
$$J(\theta)_{ridge} = \frac{1}{2m}\left[\sum_{i=1}^{m}(h_\theta(x^{(i)}) - y^{(i)})^2 + \alpha\sum_{j=1}^{n}\theta_j^2\right]$$
#### 5. 典型评估指标
- 均方误差:$$MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2$$
- 决定系数:$$R^2 = 1 - \frac{\sum_{i}(y_i - \hat{y}_i)^2}{\sum_{i}(y_i - \bar{y})^2}$$
: 标准化处理可避免特征量纲差异对回归系数的影响
[^3]: 正则化方法能有效改善多重共线性问题
阅读全文
相关推荐


















