使用 PyTorch 实现房价预测

在本篇文章中,我们将通过 PyTorch 库实现一个简单的房价预测模型。我们会逐步进行,每一步都会详细解释所需的代码。最后,我们还会展示一些预测结果的可视化。以下是实现房价预测的流程:

流程步骤

步骤 描述
1. 数据准备 收集和准备房价数据集
2. 数据预处理 对数据进行清洗、编码和标准化
3. 模型构建 使用 PyTorch 构建神经网络模型
4. 模型训练 使用训练数据训练模型
5. 模型评估 在测试集上评估模型效果
6. 结果可视化 可视化模型预测结果

接下来,我们将逐步实现这六个步骤。

步骤详解

1. 数据准备

首先,我们需要一个包含房价数据的数据集。我们以下面这个简单的 CSV 文件为例 housing_data.csv,数据集包含特征如房间数量、地区和价格等。

2. 数据预处理

我们需要加载数据并进行必要的预处理。以下是如何实现这一点的代码:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 加载数据集
data = pd.read_csv('housing_data.csv')

# 特征和目标变量分离
X = data.drop('price', axis=1)  # 特征
y = data['price']                # 目标变量

# 数据分割为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 标准化特征
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

3. 模型构建

接下来,我们使用 PyTorch 构建一个简单的神经网络模型:

import torch
import torch.nn as nn

# 定义模型类
class HousePriceModel(nn.Module):
    def __init__(self, input_size):
        super(HousePriceModel, self).__init__()
        self.fc1 = nn.Linear(input_size, 128)  # 第一层
        self.fc2 = nn.Linear(128, 64)          # 第二层
        self.fc3 = nn.Linear(64, 1)            # 输出层

    def forward(self, x):
        x = torch.relu(self.fc1(x))            # 激活函数
        x = torch.relu(self.fc2(x))
        x = self.fc3(x)
        return x

# 实例化模型
model = HousePriceModel(input_size=X_train.shape[1])

4. 模型训练

接下来,我们需要定义损失函数和优化器,并训练模型:

import torch.optim as optim

# 定义损失函数和优化器
criterion = nn.MSELoss()  # 均方误差
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练模型
epochs = 1000
for epoch in range(epochs):
    model.train()
    
    # 将数据转换为张量
    inputs = torch.tensor(X_train, dtype=torch.float32)
    targets = torch.tensor(y_train.values, dtype=torch.float32).view(-1, 1)

    # 前向传播
    optimizer.zero_grad()
    outputs = model(inputs)
    loss = criterion(outputs, targets)
    
    # 反向传播
    loss.backward()
    optimizer.step()
    
    if (epoch+1) % 100 == 0:
        print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')

5. 模型评估

我们在测试集上评估模型效果,计算均方误差:

model.eval()

with torch.no_grad():
    test_inputs = torch.tensor(X_test, dtype=torch.float32)
    test_targets = torch.tensor(y_test.values, dtype=torch.float32).view(-1, 1)

    predictions = model(test_inputs)
    test_loss = criterion(predictions, test_targets)
    print(f'Test Loss: {test_loss.item():.4f}')

6. 结果可视化

我们可以将模型的预测结果和实际价格进行比较,使用饼状图展示结果:

import matplotlib.pyplot as plt

# 可视化结果
actual_prices = test_targets.numpy()
predicted_prices = predictions.numpy()

# 计算误差
errors = actual_prices - predicted_prices

plt.figure(figsize=(10, 5))
plt.title("房价预测的结果对比")
plt.xlabel("房价")
plt.ylabel("数量")

# 创建饼状图
plt.pie([len(actual_prices), len(predicted_prices)],
        labels=['实际房价', '预测房价'], autopct='%1.1f%%')
plt.show()
pie
    title 房价预测结果
    "实际房价": 70
    "预测房价": 30

结论

通过以上步骤,你已经掌握了如何使用 PyTorch 实现一个简单的房价预测模型。从数据准备、预处理、模型构建到训练和评估,每一步都很重要。我们还展示了如何将预测结果可视化,以便更好地理解模型的表现。希望这篇文章能帮助你更好地理解机器学习的基本流程,欢迎你进行更深入的探索与实践!