楼主: 时光永痕
749 0

[数据挖掘新闻] 使用PyTorch无缝执行回归分析! [推广有奖]

  • 0关注
  • 14粉丝

svip3

学术权威

12%

(VIP/贵宾)三级

69%

威望
0
论坛币
26 个
通用积分
49.7576
学术水平
4 点
热心指数
4 点
信用等级
4 点
经验
34070 点
帖子
2731
精华
0
在线时间
316 小时
注册时间
2020-7-21
最后登录
2024-4-28

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
使用PyTorch无缝执行回归分析!
这可能是有关使用PyTorch实现回归分析的第1000篇文章。那么有什么不同呢?
好吧,我回答之前让我写的一系列事件,导致THI的小号的文章。因此,当我开始在PyTorch中学习回归时,我很兴奋,但是我有很多原因,为什么不是,一次就感到沮丧。因此,我想为什么不从头开始-更好地了解深度学习框架,然后深入研究复杂的概念,例如CNN,RNN,LSTM等,因此,最简单的方法是采用熟悉的数据集并进行探索。尽可能多地了解基础组件和关键工作原理。
我试图解释导入的模块,为什么必须执行某些步骤以及如何评估PyTorch中的回归模型。
因此,人们,如果您像我一样刚刚开始或寻找答案,那么您肯定在正确的位置。 ??
好的,让我们先从导入开始。
进口货
import torch
导入torch.nn为nn
torch.nn模块可帮助我们创建和训练神经网络。所以我们绝对需要。让我们继续:
从sklearn.preprocessing导入MinpScaler,将pandas作为pd
导入,将numpy作为np
导入,将matplotlib.pyplot作为plt
导入
他们看起来很熟吧?我们需要它们,因为我们必须对将要使用的数据集进行一些预处理。
数据
我要使用的数据集是摄氏到华氏数据,可以在这里找到:链接
图片发布
数据预处理步骤1:分离特征和标签
X_train = train_data.iloc [:,0] .values
y_train = train_data.iloc [:,-1] .values
数据预处理步骤2:标准化数据,因为值非常大且变化很大
因此,如果您在这种情况下不进行此操作,则稍后在训练模型时,很可能会得到inf或nan的损耗值,这意味着该模型无法正确执行反向传播,从而会导致模型出现故障。
sc = MinMaxScaler()
sct = MinMaxScaler()
X_train = sc.fit_transform(X_train.reshape(-1
y_train = sct.fit_transform(y_train.reshape(-1
我们必须确保X_train和y_train为2-d。
好的,到目前为止很好。现在进入张量世界
数据预处理步骤3:将numpy数组转换为张量
X_train =火炬.from_numpy(X_train.astype(np.float32))。view(-1
y_train =火炬.from_numpy(y_train.astype(np.float32))。view(-1
该视图像numpy一样处理张量中的2d事物。
PyTorch中的回归模型构建
input_size = 1
output_size = 1
输入=摄氏
输出=华氏度
定义层
class LinearRegressionModel(torch.nn.Module):def __init __(self):
        super(LinearRegressionModel,self).__ init __()
        self.linear = torch.nn.Linear(1,1)   #一进一出def forward(self) ,x):
        y_pred = self.linear(x)返回y_pred
或者我们可以简单地做到这一点(因为它只是单层)
模型= nn.Linear(input_size,output_size)
在这两种情况下,我们都使用nn.Linear来创建我们的第一个线性层,这基本上是对数据进行线性转换,例如对于一条直线,它将像y = w * x一样简单,其中y是标签, x,特征。当然,w是重量。在我们的数据中,摄氏温度和华氏温度遵循线性关系,因此我们对一层很满意,但是在某些情况下该关系是非线性的,我们添加了一些额外的步骤来处理非线性问题,例如添加一个S型曲线功能。
定义损失和优化器
learning_rate = 0.0001
l = nn.MSELoss()
优化器= torch.optim.SGD(model.parameters(),lr = learning_rate)
如您所见,损失函数在这种情况下为“ mse ”或“均方误差”。我们的目标是减少损耗,这可以使用优化器(在这种情况下为随机梯度下降)来完成。该SGD需要初始模型参数或权重和学习率。
好的,现在让我们开始培训。
训练
num_epochs = 100对于历元在范围(num_epochs):
     #forward饲料
    y_pred =模型(X_train.requires_grad_())#calculate损失
    损失= 1(y_pred,y_train)#backward传播:计算梯度
    loss.backward()#UPDATE的weights
     Optimizer.step()#从最后一步中清除渐变loss.backward()
     optimizer.zero_grad()
    print('epoch {},loss {}'. format(epoch,loss.item()))
前馈:在此阶段,我们只是通过使用一些初始权重和特征值来计算y_pred。
损失阶段:在y_pred之后,我们需要测量发生了多少预测误差。我们正在使用mse进行测量。
反向传播:在此阶段,计算梯度。
步骤:权重现在已更新。
zero_grad:最后,清除最后一步中的渐变,并为新渐变腾出空间。
评价
预测= model(X_train).detach()。numpy()
detach()表示我们不再需要存储渐变,因此可以将其与张量分离。现在,让我们用前100个数据点可视化模型质量。
plt.scatter(X_train.detach()。numpy()[:100],y_train.detach()。numpy()[:100])
plt.plot(X_train.detach()。numpy()[:100],预测的[:100],“红色”)
plt.xlabel(“
Celcius ”)plt.ylabel(“ Farenhite”)
plt.show()
回归火炬
回归火炬
请注意,随着时期数的增加,预测如何变得更好。还有多种其他策略可以优化网络,例如更改学习速率,权重初始化技术等。
最后,尝试使用已知的摄氏温度值,看看模型是否能够正确预测华氏温度值。这些值已转换,因此请确保执行sc.inverse_transform()和sct.inverse_transform()来获取实际值。
题库
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:回归分析 RCH regression Processing parameters

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-6 04:01