pytorch如何实现多项式回归
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要为大家展示了"pytorch如何实现多项式回归",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"pytorch如何实现多项式回归"这篇文章吧。py
千家信息网最后更新 2025年01月20日pytorch如何实现多项式回归
这篇文章主要为大家展示了"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如何实现多项式回归"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
数据
多项式
模型
输入
生成
内容
输出
次数
矩阵
篇文章
精度
线性
维度
训练
复杂
公式
标准
特征
目标
直线
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
科蓝软件开发待遇
信息网络安全处理
mc国际版服务器一百多永久吗
瓦洛兰特服务器选择
应急预案网络安全事件划分等级
网络安全系统运行记录表
服务器程序有哪些
switch读取数据库
手机请求被服务器拒绝怎么处理
网易我的世界忍者服务器
如何查询安卓手机软件开发商
统计数据库表结构的文档
青山区方便网络安全维护代理品牌
理光1356服务器咋样
第三方支付于网络安全
软件开发个人成就
数据库之间是不是可以通用
服务器风扇防护网
集美大学数据库实验6
机房服务器未能解析
一中网络安全应急演练
陕西手机软件开发服务商
非软件开发
健康网络安全是关注点
cod4服务器
orale数据库集群配置
织网数据库
河北高科技软件开发要多少钱
数据库查询选修无人显示0
网络安全信息管理的论文