机器学习线性回归头歌波斯顿房屋预测
时间: 2025-05-23 18:01:46 浏览: 15
### 实现基于线性回归的波士顿房价预测
#### 数据准备
在进行波士顿房价预测之前,需要加载并预处理数据。通常使用的库包括 `pandas` 和 `sklearn.datasets` 来获取波士顿房价数据集[^1]。
```python
from sklearn import datasets
import pandas as pd
boston = datasets.load_boston()
data = pd.DataFrame(boston.data, columns=boston.feature_names)
target = boston.target
```
#### 数据分割
为了验证模型性能,需将数据分为训练集和测试集。可以使用 `train_test_split` 函数完成这一操作[^5]。
```python
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=42)
```
#### 构建模型
采用 `LinearRegression` 类来创建线性回归模型,并对其进行训练。
```python
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
linreg.fit(X_train, y_train)
```
#### 预测与评估
通过调用 `.predict()` 方法得到测试集上的预测值,并计算均方误差 (MSE) 或 R² 分数作为评价指标。
```python
y_pred = linreg.predict(X_test)
from sklearn.metrics import mean_squared_error, r2_score
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'Mean Squared Error: {mse}')
print(f'R-squared Score: {r2}')
```
#### 过拟合与欠拟合
如果发现模型存在过拟合现象,则可以通过减少特征数量、增加正则化项等方式缓解;而当发生欠拟合时,可能需要引入更复杂的模型或者调整超参数。
---
#### 使用 PyTorch 的实现方式
除了传统的 Scikit-Learn 工具外,还可以借助深度学习框架 PyTorch 完成相同的任务。这种方法允许手动定义损失函数以及优化器,并提供更大的灵活性[^2]。
##### 初始化网络结构
定义一个简单的全连接层用于表示线性关系:
```python
import torch
import torch.nn as nn
import torch.optim as optim
class LinearModel(nn.Module):
def __init__(self, input_dim):
super(LinearModel, self).__init__()
self.fc = nn.Linear(input_dim, 1)
def forward(self, x):
return self.fc(x).squeeze()
model = LinearModel(X_train.shape[1])
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
```
##### 转换为张量形式
由于 PyTorch 主要支持 Tensor 输入,因此先将 NumPy 数组转换为相应的格式:
```python
X_train_tensor = torch.tensor(X_train.values, dtype=torch.float32)
y_train_tensor = torch.tensor(y_train, dtype=torch.float32)
X_test_tensor = torch.tensor(X_test.values, dtype=torch.float32)
```
##### 开始训练循环
迭代多次更新权重直至收敛为止:
```python
num_epochs = 1000
for epoch in range(num_epochs):
model.train()
outputs = model(X_train_tensor)
loss = criterion(outputs, y_train_tensor)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if (epoch+1) % 100 == 0:
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
```
最后同样可利用测试集合检验最终效果。
---
阅读全文
相关推荐


















