如何使用PyTorch库进行波士顿房价的预测并实现一个神经网络模型?读取本地数据test.csv文件的完整代码
时间: 2024-12-21 18:28:29 浏览: 69
在PyTorch中,我们可以使用`pandas`库来读取CSV数据,然后构建一个简单的神经网络模型来进行波士顿房价预测。以下是完整的步骤:
首先,确保已经安装了所需的库,如pandas、torch、numpy以及sklearn等。如果没有,可以使用pip安装:
```bash
pip install pandas torch numpy scikit-learn
```
接下来,导入所需的库,并读取数据:
```python
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
import pandas as pd
# 加载数据
boston = load_boston()
data = boston.data
labels = boston.target
df = pd.DataFrame(data, columns=boston.feature_names)
target_column = 'PRICE' # 房价列名假设为'PRICE'
df[target_column] = labels
```
接着,我们将数据划分为训练集和测试集:
```python
X_train, X_test, y_train, y_test = train_test_split(df.drop(target_column, axis=1), df[target_column], test_size=0.2, random_state=42)
```
为了将数据转换成PyTorch的张量格式,我们还需要做一些预处理:
```python
# 将数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 将数据转化为张量
X_train = torch.tensor(X_train, dtype=torch.float32)
y_train = torch.tensor(y_train, dtype=torch.float32).view(-1, 1)
X_test = torch.tensor(X_test, dtype=torch.float32)
y_test = torch.tensor(y_test, dtype=torch.float32).view(-1, 1)
```
现在,我们可以创建一个简单的神经网络模型(这里使用线性回归,因为波士顿房价问题相对简单,适合于入门示例):
```python
class BostonHousePriceModel(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super(BostonHousePriceModel, self).__init__()
self.linear_1 = nn.Linear(input_dim, hidden_dim)
self.linear_2 = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
x = torch.relu(self.linear_1(x))
return self.linear_2(x)
# 定义模型参数
input_dim = len(boston.feature_names) # 输入特征数
hidden_dim = 64
output_dim = 1 # 因为我们只有一个房价值
model = BostonHousePriceModel(input_dim, hidden_dim, output_dim)
optimizer = optim.SGD(model.parameters(), lr=0.01)
criterion = nn.MSELoss() # 使用均方误差损失函数
```
开始训练模型:
```python
num_epochs = 500
for epoch in range(num_epochs):
model.train() # 设置为训练模式
optimizer.zero_grad() # 清除梯度
predictions = model(X_train)
loss = criterion(predictions, y_train)
loss.backward() # 反向传播
optimizer.step() # 更新权重
if (epoch + 1) % 100 == 0:
print(f"Epoch {epoch+1}/{num_epochs}, Loss: {loss.item():.4f}")
model.eval() # 设置为评估模式,防止梯度计算影响性能
```
最后,我们可以对测试集进行预测:
```python
with torch.no_grad():
y_pred = model(X_test)
mse_test = criterion(y_pred, y_test)
print(f"Test set MSE: {mse_test.item():.4f}")
```
阅读全文
相关推荐



















