婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > pytorch實現多項式回歸

pytorch實現多項式回歸

熱門標簽:電話機器人貸款詐騙 看懂地圖標注方法 電話外呼系統招商代理 廣東旅游地圖標注 打印谷歌地圖標注 京華圖書館地圖標注 佛山通用400電話申請 淮安呼叫中心外呼系統如何 蘇州人工外呼系統軟件

pytorch實現多項式回歸,供大家參考,具體內容如下

一元線性回歸模型雖然能擬合出一條直線,但精度依然欠佳,擬合的直線并不能穿過每個點,對于復雜的擬合任務需要多項式回歸擬合,提高精度。多項式回歸擬合就是將特征的次數提高,線性回歸的次數使一次的,實際我們可以使用二次、三次、四次甚至更高的次數進行擬合。由于模型的復雜度增加會帶來過擬合的風險,因此需要采取正則化損失的方式減少過擬合,提高模型泛化能力。希望大家可以自己動手,通過一些小的訓練掌握pytorch(案例中有些觀察數據格式的代碼,大家可以自己注釋掉)

# 相較于一元線性回歸模型,多項式回歸可以很好的提高擬合精度,但要注意過擬合風險
# 多項式回歸方程 f(x) = -1.13x-2.14x^2+3.12x^3-0.01x^4+0.512
import torch
import matplotlib.pyplot as plt
import 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.512
plt.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 = 10000
batch_size = 32
model = 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使用Variable實現線性回歸
  • PyTorch線性回歸和邏輯回歸實戰示例
  • pytorch實現線性回歸以及多元回歸

標簽:駐馬店 衡水 股票 江蘇 呼和浩特 湖州 畢節 中山

巨人網絡通訊聲明:本文標題《pytorch實現多項式回歸》,本文關鍵詞  pytorch,實現,多項式,回歸,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《pytorch實現多項式回歸》相關的同類信息!
  • 本頁收集關于pytorch實現多項式回歸的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 仁布县| 兴和县| 韶山市| 东辽县| 遵义县| 肥城市| 县级市| 高平市| 东乡| 渝中区| 甘南县| 仲巴县| 苏尼特左旗| 昌平区| 吉隆县| 云霄县| 遂宁市| 中超| 关岭| 微博| 乌鲁木齐市| 潞城市| 房产| 东光县| 龙游县| 嘉兴市| 读书| 隆子县| 眉山市| 旌德县| 巴彦淖尔市| 鄂州市| 定襄县| 清远市| 广昌县| 勃利县| 竹溪县| 呼伦贝尔市| 三门峡市| 湖南省| 枝江市|