神经网络实例——波士顿房价预测(pytorch)

神经网络实例——波士顿房价预测

!!!个人主页:个人主页
!!!推荐一款模拟面试、刷题神器,从基础到大厂面试题:点击此处进入牛客网注册学习吧
!!!今日的努力,明日的未来

一、导入必要的包

import pandas as pd
import torch
from torch import nn
from torch.utils import data

二、导入必要的数据

train_data = pd.read_csv('../data/house_price_train.csv')
# 提取出特征值
all_features = train_data.iloc[:, 1:-1]
# 标准化数值特征,numeric_features是在统计数据类型不为“object”的数据的索引
numeric_features = all_features.dtypes[all_features.dtypes != 'object'].index
# ???
all_features[numeric_features] = all_features[numeric_features].apply(
    lambda x: (x - x.mean()) / (x.std()))
all_features[numeric_features] = all_features[numeric_features].fillna(0)
# pd.get_dummies是在用于特征提取,dummy_na=True即在填充NANS,增加一列
all_features = pd.get_dummies(all_features, dummy_na=True)
all_features.shape
# 最后数据就由原来的(1460, 331)变为了(1460, 81)

三、将数据转换为 tensor 格式

# 将数据转换为 tensor 格式
n_train = train_data.shape[0]
# 1460
# 接下来就是将adarray类型的数据转化为torch,float32
train_features = torch.tensor(all_features.values, dtype=torch.float32)
train_labels = torch.tensor(train_data.SalePrice.values.reshape(-1, 1), dtype=torch.float32)

四、构造一个pytorch数据迭代器

# 构造一个pytorch数据迭代器

n_train = train_data.shape[0]
batch_size = 64
# 对数据进行封装
dataset = data.TensorDataset(train_features, train_labels)
# 对数据进行加载,batch_size是批量取出时的样本量,并且读取是随机的
data_iter = data.DataLoader(dataset, batch_size, shuffle=True)
# 返回迭代器的下一个数据
next(iter(data_iter))


在这里插入图片描述

五、定义模型

# 定义模型
num_inputs = train_features.shape[1]
# 331
net = nn.Sequential(nn.Linear(num_inputs, 1))

#  Sequential类将多个层串联在一起。 当给定输入数据时,Sequential实例将数据传入到第一层, 然后将第一层的输出作为第二层的输入,以此类推。以实现一个线性层,nn.Linear()两个参数代表输入和输出的大小

六、初始化模型参数

# 初始化模型参数

def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)
        nn.init.zeros_(m.bias)
net.apply(init_weights);
# nn.init.normal_就是按照正态分布对m.weight随赋值
# nn.init.zeros_(m.bias)就是使用常数0对m.bias赋值

七、定义损失函数

# 定义损失函数
loss = nn.MSELoss()
# 这是一个均方损失函数,loss(x,y) = (x-y)^2

八、定义优化算法

# 定义优化算法

trainer = torch.optim.SGD(net.parameters(), lr=0.02)
# torch.optim.SGD是随机梯度下降算法
# net.parameters()即要训练的参数
# ir:是指学习率即步长

九、训练模型

# 训练模型
num_epochs = 100
for epoch in range(num_epochs):
    for X, y in data_iter:
        trainer.zero_grad()
        l = loss(net(X) ,y)
        l.backward()
        trainer.step()
    with torch.no_grad():
        l = loss(net(train_features), train_labels)
        print(f'epoch {epoch + 1}, loss {l:f}')
# trainer.zero_grad()每一次backword之前,都要将梯度参数设置为0
# l即均方误差,.backward()进行反向传播
# 在每一个迭代周期里,我们都要器完整的遍历一遍数据集,不停的从中获取一个小批量的输入和相应的标签,对于每一个小批量,都会进行:
   # -通过调用net(X)生成预测并计算损失l(前向传播)。
   # -通过进行反向传播来计算梯度。
   # -通过调用优化器来更新模型参数。
# 然后为了更好的衡量训练效果,我们计算每个迭代周期后的损失,兵打印他来监督训练过程
net(train_features[10]), train_labels[10]

-通过调用优化器来更新模型参数。

然后为了更好的衡量训练效果,我们计算每个迭代周期后的损失,兵打印他来监督训练过程


```python
net(train_features[10]), train_labels[10]
在这个项目中,我们主要讨论了使用PyTorch进行波士顿房价预测的相关方面。我们给定了81个特征来描述房子、面积、土地、基础设施和公共设施等。这个数据集具有分类和连续特征的良好组合,并且没有潜在的红线或数据输入问题。我们采用了梯度下降的方法来训练模型。 在训练过程中,我们使用了验证损失停止下降之前的及时停止策略。这样可以避免在回归问题中出现只对某个特定范围的预测效果好的情况,而其他范围的预测效果较差。为了评估模型的性能,我们可以对目标变量进行排序和分桶,并将预测结果与之对比绘制,以便了解模型在整个房价范围内的表现。 实际上,通过这个项目中的方法,我们得到的模型在整个房价范围内的预测非常接近。根据我们的评估,模型的Spearman秩相关系数约为93%,具有非常高的准确性。这表明这个模型在预测波士顿房价方面具有很高的性能和准确性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [用Pytorch搭建一个房价预测模型](https://blog.csdn.net/zxb_1222/article/details/129756586)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值