pytorch如何实现多项式回归(pytorch,开发技术)

时间:2024-05-04 08:45:01 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

pytorch实现多项式回归,供大家参考,具体内容如下

一元线性回归模型虽然能拟合出一条直线,但精度依然欠佳,拟合的直线并不能穿过每个点,对于复杂的拟合任务需要多项式回归拟合,提高精度。多项式回归拟合就是将特征的次数提高,线性回归的次数使一次的,实际我们可以使用二次、三次、四次甚至更高的次数进行拟合。由于模型的复杂度增加会带来过拟合的风险,因此需要采取正则化损失的方式减少过拟合,提高模型泛化能力。希望大家可以自己动手,通过一些小的训练掌握pytorch(案例中有些观察数据格式的代码,大家可以自己注释掉)

#相较于一元线性回归模型,多项式回归可以很好的提高拟合精度,但要注意过拟合风险#多项式回归方程f(x)=-1.13x-2.14x^2+3.12x^3-0.01x^4+0.512importtorchimportmatplotlib.pyplotaspltimportnumpyasnp#数据准备(测试数据)x=torch.linspace(-2,2,50)print(x.shape)y=-1.13*x-2.14*torch.pow(x,2)+3.15*torch.pow(x,3)-0.01*torch.pow(x,4)+0.512plt.scatter(x.data.numpy(),y.data.numpy())plt.show()#此时输入维度为4维#为了拼接输入数据,需要编写辅助数据,输入标量x,使其变为矩阵,使用torch.cat拼接deffeatures(x):#生成矩阵#[x,x^2,x^3,x^4]x=x.unsqueeze(1)print(x.shape)returntorch.cat([x**iforiinrange(1,5)],1)result=features(x)print(result.shape)#目标公式用于计算输入特征对应的标准输出#目标公式的权重如下x_weight=torch.Tensor([-1.13,-2.14,3.15,-0.01]).unsqueeze(1)b=torch.Tensor([0.512])#得到x数据对应的标准输出deftarget(x):returnx.mm(x_weight)+b.item()#新建一个随机生成输入数据和输出数据的函数,用于生成训练数据defget_batch_data(batch_size):#生成batch_size个随机的xbatch_x=torch.randn(batch_size)#对于每个x要生成一个矩阵features_x=features(batch_x)target_y=target(features_x)returnfeatures_x,target_y#创建模型classPolynomialRegression(torch.nn.Module):def__init__(self):super(PolynomialRegression,self).__init__()#输入四维度输出一维度self.poly=torch.nn.Linear(4,1)defforward(self,x):returnself.poly(x)#开始训练模型epochs=10000batch_size=32model=PolynomialRegression()criterion=torch.nn.MSELoss()optimizer=torch.optim.SGD(model.parameters(),0.001)forepochinrange(epochs):print("{}/{}".format(epoch+1,epochs))batch_x,batch_y=get_batch_data(batch_size)out=model(batch_x)loss=criterion(out,batch_y)optimizer.zero_grad()loss.backward()#更新梯度optimizer.step()if(epoch%100==0):print("Epoch:[{}/{}],loss:{:.6f}".format(epoch,epochs,loss.item()))if(epoch%1000==0):predict=model(features(x))print(x.shape)print(predict.shape)print(predict.squeeze(1).shape)plt.plot(x.data.numpy(),predict.squeeze(1).data.numpy(),"r")loss=criterion(predict,y)plt.title("Loss:{:.4f}".format(loss.item()))plt.xlabel("X")plt.ylabel("Y")plt.scatter(x,y)plt.show()

拟合结果:

pytorch如何实现多项式回归

pytorch如何实现多项式回归

pytorch如何实现多项式回归

pytorch如何实现多项式回归

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:pytorch如何实现多项式回归的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Express连接MySQL及数据库连接池的示例分析下一篇:

9 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18