文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

pytorch如何实现多项式回归

2023-06-14 11:42

关注

这篇文章主要为大家展示了“pytorch如何实现多项式回归”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“pytorch如何实现多项式回归”这篇文章吧。

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

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

# 相较于一元线性回归模型,多项式回归可以很好的提高拟合精度,但要注意过拟合风险# 多项式回归方程 f(x) = -1.13x-2.14x^2+3.12x^3-0.01x^4+0.512import torchimport matplotlib.pyplot as pltimport numpy as np# 数据准备(测试数据)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拼接def features(x): # 生成矩阵    # [x,x^2,x^3,x^4]    x = x.unsqueeze(1)    print(x.shape)    return torch.cat([x ** i for i in range(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数据对应的标准输出def target(x):    return x.mm(x_weight) + b.item()# 新建一个随机生成输入数据和输出数据的函数,用于生成训练数据def get_batch_data(batch_size):    # 生成batch_size个随机的x    batch_x = torch.randn(batch_size)    # 对于每个x要生成一个矩阵    features_x = features(batch_x)    target_y = target(features_x)    return features_x,target_y# 创建模型class PolynomialRegression(torch.nn.Module):    def __init__(self):        super(PolynomialRegression, self).__init__()        # 输入四维度 输出一维度        self.poly = torch.nn.Linear(4,1)    def forward(self, x):        return self.poly(x)# 开始训练模型epochs = 10000batch_size = 32model = PolynomialRegression()criterion = torch.nn.MSELoss()optimizer = torch.optim.SGD(model.parameters(),0.001)for epoch in range(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如何实现多项式回归

以上是“pytorch如何实现多项式回归”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯