Pytorch之波士顿房价预测

Pytorch之波士顿房价预测

一、包库准备
import torch
import torch.nn as nn			#帮助我们创建和训练神经网络
from torch.optim import SGD		#导入实现随机梯度下降算法
import torch.utils.data as Data	#导入数据集

from sklearn.datasets import load_boston	#导入波士顿房价数据
from sklearn.preprocessing import StandardScaler	#数据标准化

import numpy as np
import matplotlib.pyplot as plt		#用于制图
  1. torch.optim.SGD参数说明

    torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)[source]

    • params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
    • lr ( float) –学习率
    • momentum ( float,可选) –动量因子(默认:0)
    • weight_decay ( float,可选) –权重衰减(L2 惩罚)(默认:0)
    • dampening ( float,可选) –动量的抑制因子(默认:0)
    • nesterov ( bool,可选) –使用Nesterov动量(默认:False)
  2. 为了使用torch.optim,你需要构建一个optimizer对象。这个对象能够保持当前参数状态并基于计算得到的梯度进行参数更新。为了构建一个Optimizer,你需要给它一个包含了需要优化的参数(必须都是Variable对象)的iterable。然后,你可以设置optimizer的参 数选项,比如学习率,权重衰减,等等。

二、读取数据
boston_x, boston_y = load_boston(return_X_y=True)	#读入boston数据的x,y
print("boston_x.shape:", boston_x.shape)			#输出x的shape
print("boston_y.shape:", boston_y.shape)			#输出y的shape
plt.hist(boston_y, bins=20)							#对应y轴,输出盒子为20个
plt.show()											#输出绘制结果
三、数据标准化处理
ss = StandardScaler(with_mean=True, with_std=True)	#数据标准化处理
boston_xs = ss.fit_transform(boston_x)	# 将数据预处理为可以使用pytorch进行批量训练的形式
train_xt = torch.from_numpy(boston_xs.astype(np.float32))	# 将训练集x转化为张量,对象类型为tensor
train_yt = torch.from_numpy(boston_y.astype(np.float32))	# 将训练集y转化为张量,对象类型为tensor
train_data = Data.TensorDataset(train_xt, train_yt)	## 将训练集转化为张量后,使用TensorDataset将x y整理到一块

# 定义一个数据加载器,将训练数据集进行批量处理
train_loader = Data.DataLoader(
    dataset=train_data,  # 使用的数据集
    batch_size=128,  # 批处理样本大小
    shuffle=True,  # 每次迭代前打乱数据
    num_workers=0,  # 使用一个进程
)
四、使用集成Module的方式定义全连接神经网络
class MLPmodel(nn.Module):				# 使用集成Module的方式定义全连接神经网络
    def __init__(self):
        super(MLPmodel, self).__init__()	# 初始化:子类继承了父类的所有属性和方法,父类属性自然会用父类方法来进行初始化
        # 定义第一个隐藏层
        self.hidden1 = nn.Linear(
            in_features=13,  # 第一个隐藏层的输入,数据的特征数
            out_features=10,  # 第一个隐藏层的输出吗,神经元的数量
            bias=True,  # 默认会有偏置
        )
        self.active1 = nn.ReLU()
        # 定义第一个隐藏层
        self.hidden2 = nn.Linear(10, 10)
        self.active2 = nn.ReLU()
        # 定义预测回归层
        self.regression = nn.Linear(10, 1)

    # 定义网络的前向传播路径*************
    def forward(self, x):
        x = self.hidden1(x)
        x = self.active1(x)
        x = self.hidden2(x)
        x = self.active2(x)
        output = self.regression(x)
        return output	
五、使用定义网络时使用nn.Sequential的形式
class MLPmodel2(nn.Module):
    def __init__(self):
        super(MLPmodel2, self).__init__()
        # 定义隐藏层
        self.hidden = nn.Sequential(
            nn.Linear(13, 10),
            nn.ReLU(),
            nn.Linear(10, 10),
            nn.ReLU(),
        )
        # 预测回归层
        self.regression = nn.Linear(10, 1)

    # 定义网络的前向传播路径
    def forward(self, x):
        x = self.hidden(x)
        output = self.regression(x)
        return output
六、输出网络结构
mlp1 = MLPmodel()
print(mlp1)
mlp2 = MLPmodel2()
print(mlp2)
七、对回归模型mlp1进行训练并输出损失函数的变化情况,定义优化器和损失函数
optimizer = SGD(mlp1.parameters(), lr=0.001)	# 随机梯度
loss_func = nn.MSELoss()  # 最小均方根误差
train_loss_all = []  # 输出每个批次训练的损失函数
# 进行训练,并输出每次迭代的损失函数
for epoch in range(30):
    # 对训练数据的加载器进行迭代计算
    for step, (b_x, b_y) in enumerate(train_loader):
        output = mlp1(b_x).flatten()  # MLP在训练batch上的输出
        train_loss = loss_func(output, b_y)  # 均方根误差
        optimizer.zero_grad()  # 每个迭代步的梯度初始化为0
        train_loss.backward()  # 损失的后向传播
        optimizer.step()  # 使用梯度进行优化
        train_loss_all.append(train_loss.item())
plt.figure()		# 创建一个新的画板
plt.plot(train_loss_all, "r-")	
plt.title("Train loss per iteration")
plt.show()
八、对回归模型mlp2进行训练并输出损失函数的变化情况,定义优化器和损失函数
optimizer = SGD(mlp2.parameters(), lr=0.001)	# 随机梯度
loss_func = nn.MSELoss()  # 最小均方根误差
train_loss_all = []  # 输出每个批次训练的损失函数
# 进行训练,并输出每次迭代的损失函数
for epoch in range(30):
    # 对训练数据的加载器进行迭代计算
    for step, (b_x, b_y) in enumerate(train_loader):
        output = mlp2(b_x).flatten()  # MLP在训练batch上的输出
        train_loss = loss_func(output, b_y)  # 均方根误差
        optimizer.zero_grad()  # 每个迭代步的梯度初始化为0
        train_loss.backward()  # 损失的后向传播
        optimizer.step()  # 使用梯度进行优化
        train_loss_all.append(train_loss.item())
plt.figure()
plt.plot(train_loss_all, "r-")
plt.title("Train loss per iteration")
plt.show()
  • 12
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 使用PyTorch预测波士顿房价的过程如下: 1. 数据准备: 从波士顿房价数据集中获取房屋特征值(如房间数量、犯罪率等)和对应的房价作为训练数据。将数据集分为训练集和测试集,一般按照70%的数据作为训练数据,30%的数据作为测试数据。 2. 模型构建: 使用PyTorch搭建神经网络模型。这里可以选择线性回归模型作为预测模型,也可以使用多层感知机(MLP)等更复杂的模型。根据波士顿房价数据特征的维度,确定输入层的大小,并构建隐藏层和输出层的大小。 3. 训练模型: 使用训练数据对模型进行训练。定义损失函数,一般选择均方误差(MSE)作为损失函数,用于衡量预测值与真实值之间的差异。通过反向传播算法更新模型的权重和偏置,减小损失函数的值。 4. 模型评估: 使用测试数据对训练得到的模型进行评估。将测试数据输入到模型中,得到预测值,然后与真实值进行比较,计算均方根误差(RMSE)或平均绝对误差(MAE)等指标来评估模型的性能。 5. 模型应用: 当模型通过评估后,可以使用模型对新的未知数据进行预测,例如给定新的输入特征,通过训练好的模型预测对应的波士顿房价。 总结: PyTorch提供了强大的工具和函数来建立神经网络模型,并能够进行波士顿房价的预测。通过数据的准备、模型的构建、训练和评估,可以得到一个准确的房价预测模型。 ### 回答2: 使用PyTorch来预测波士顿房价可以分为以下几个步骤。 首先,我们要加载和预处理数据。可以使用`torchvision.datasets`中的`load_boston`函数来加载波士顿房价数据集。然后,对数据进行标准化处理,将每个特征的数值范围缩放到0到1之间,使得训练更稳定。可以使用`sklearn.preprocessing`中的`MinMaxScaler`函数来实现。将数据集分为训练集和测试集,一般比例可以为80%的数据用于训练,20%的数据用于测试。 其次,我们要定义模型架构。可以使用PyTorch的`nn`模块来定义一个多层感知机(MLP)模型。一个简单的MLP模型可以由多个全连接层组成,每一层包含多个神经元。可以为每个层选择合适的激活函数,如ReLU,以增加模型的非线性表达能力。 然后,我们要定义损失函数和优化器。对于回归问题,可以使用均方根误差(RMSE)作为损失函数,衡量模型的预测值与真实值之间的差距。可以使用PyTorch的`nn`模块中的`MSELoss`函数来计算损失。在优化器方面,可以选择使用随机梯度下降(SGD)或Adam优化算法。可以使用PyTorch的`optim`模块来定义优化器。 接下来,我们要进行模型的训练和评估。首先,在每个训练步骤中,将训练数据输入模型中,计算预测结果,然后计算损失函数,并根据损失函数计算梯度和更新模型参数。可以使用PyTorch的自动求导功能来自动计算梯度。在每个训练周期(epoch)结束后,用训练好的模型对测试数据进行预测,并计算模型的性能指标,如均方根误差。 最后,可以使用训练好的模型进行波士顿房价的预测。将待预测的数据输入模型中,计算预测结果即可。 通过以上步骤,我们可以使用PyTorch来预测波士顿房价并获得较好的模型性能。 ### 回答3: PyTorch是一个开源的机器学习框架,可用于预测房价等各种任务。下面以波士顿房价预测为例,说明如何使用PyTorch进行房价预测。 首先,我们需要准备波士顿房价数据集。该数据集包含很多波士顿地区的房屋信息,如犯罪率、住宅平均房间数等等特征,以及房屋的中位数房价。我们可以通过数据集加载方法将这些特征和房价加载到PyTorch中。 接下来,我们需要定义一个神经网络模型。可以使用PyTorch的`torch.nn.Module`类来创建一个自定义的神经网络模型。在这个模型中,可以定义多个层,如全连接层、激活函数等。模型的输入是特征数据,输出是预测的房价。 然后,我们需要定义损失函数和优化器。损失函数用于计算预测值与真实值之间的差异,而优化器用于调整模型参数以最小化损失函数。可以使用PyTorch提供的各种损失函数和优化器,如均方误差损失函数(MSE Loss)和随机梯度下降优化器(SGD Optimizer)。 接下来,我们可以使用数据集中的特征数据喂给定义好的神经网络模型进行训练训练过程中,将输入数据通过模型得到预测的房价,并与真实房价计算损失。然后使用优化器调整模型参数,不断迭代训练,直到损失最小化。 最后,我们可以使用训练好的模型进行预测。将预测的输入特征数据输入到模型中,得到预测的房价。 总结起来,使用PyTorch预测波士顿房价的步骤包括:准备数据集、定义神经网络模型、定义损失函数和优化器、训练模型和预测房价。通过这些步骤,我们可以利用PyTorch进行波士顿房价的准确预测。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值