iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
AI & Data

【30天之新手學習筆記】PyTorch系列 第 18

Day 18 - 迴歸(Regression)介紹與實作

  • 分享至 

  • xImage
  •  

鐵人賽持續到現在也過了一半的時間,換作是從前我根本不敢想像我能夠每天堅持發表一篇技術方面的學習心得,雖然一開始是很心不甘情不願的,但因為課程因素參加了今年的鐵人賽過後,我獲得了相當多的收穫,不再只是吸收學校課程中所教的內容,而是而外的自我學習,相信這有助於我往科技人更邁進一步.
今天所提到的迴歸分析主要是應用在統計學的領域中,主要是用於了解兩個以上的變數是否有其關聯性,建立數學模型用來觀察特定變數來預測變數.

迴歸分析原理

  • 找出一條能代表所有觀測值的函數曲線(回歸估計式)
  • 用函數代表因變數與自變數之間的關係

迴歸分析的總類

  1. 簡單線性迴歸
  2. 複迴歸(多變數迴歸)
  3. 對數線性迴歸

以PyTorch實作回歸(一元二次方程式)

  1. 建立資料集
import torch
import matplotlib.pyplot as plt

x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)
y = x.pow(2) + 0.2*torch.rand(x.size())

plt.scatter(x.data.numpy(), y.data.numpy())
plt.show()
  1. 建立神經網路
import torch
import torch.nn.functional as F

class Net(torch.nn.Module):
    def __init__(self, n_feature, n_hidden, n_output):
        super(Net, self).__init__()
        self.hidden = torch.nn.Linear(n_feature, n_hidden)
        self.predict = torch.nn.Linear(n_hidden, n_output)

    def forward(self, x):
        x = F.relu(self.hidden(x))
        x = self.predict(x)
        return x

net = Net(n_feature=1, n_hidden=10, n_output=1)

print(net)
  1. 訓練神經網路
optimizer = torch.optim.SGD(net.parameters(), lr=0.2)
loss_func = torch.nn.MSELoss()

for t in range(100):
    prediction = net(x)

    loss = loss_func(prediction, y)

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
  1. 可視化訓練
import matplotlib.pyplot as plt

plt.ion()
plt.show()

for t in range(200):
    loss.backward()
    optimizer.step()

    if t % 5 == 0:
        plt.cla()
        plt.scatter(x.data.numpy(), y.data.numpy())
        plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5)
        plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 20, 'color':'red'})
        plt.pause(0.1)

實作之相關分析

  • 一元二次
    https://ithelp.ithome.com.tw/upload/images/20220929/20152671k9Oiv69xK9.png
  • 一元三次
    https://ithelp.ithome.com.tw/upload/images/20220929/2015267161f792cT6Z.png
  • 一元四次
    https://ithelp.ithome.com.tw/upload/images/20220929/20152671HqGpdVo9V6.png
    在訓練四十次的情況下,偶數次方相較於基數次方有更佳符合的函數曲線,不過這樣的問題可以藉由增加訓練的次數得到一定程度的改善.

參考資料:


上一篇
Day 17 - 優化器的實作
下一篇
Day 19 - 分類(Classification)介紹與實作
系列文
【30天之新手學習筆記】PyTorch30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言