天天看點

Pytorch ---- 線性模型 學習筆記~~~~~

線性公式 y = w * x (w為權重)

MSE: 均方誤差 (一種回歸損失函數) 目前權重下所有X資料計算出來的y資料(預測資料)和真實的y資料之間的差的平方 除以X的樣本數量。

MSE越小,說明預測值Y和真實值Y之間誤差越小。即目前權重越合理。

例子:

給定資料:

x_data = [1.0, 2.0, 3.0]

y_data = [2.0, 4.0, 6.0]

使用窮舉法尋找0~4之間最合适的值。

最後使用 matplotlib繪圖即可。

代碼實作:

import numpy as np
import  matplotlib.pyplot as plt
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]


# 計算預測值
def predict(x, w):
    num_pre = x * w
    return num_pre


# 計算損失值
def loss(num_pre, y_val):
    num_loss = (num_pre - y_val) * (num_pre - y_val)
    return num_loss


w_ll = []  # 權重清單
mse_ll = []  # 均方誤差清單
loss_sum = 0  # 計算本回合内的損失總量
# 窮舉權重
if __name__ == '__main__':
    for w in np.arange(0.0,4.1,0.1):
        w = round(w,1)
        print("目前的權重值w為:", w)
        for x_val, y_val in zip(x_data, y_data):
            num_pre = predict(x_val, w)  # 拿到目前窮舉的預測值
            num_loss = loss(num_pre, y_val)  # 那預測值去計算損失值
            loss_sum += num_loss
        w_ll.append(w)
        mse_ll.append(loss_sum / len(x_data))
        loss_sum = 0

print(w_ll)
print(mse_ll)
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.plot(w_ll,mse_ll)
plt.xlabel("權重W")
plt.ylabel("MSE")
plt.show()      

得到最終結果:

X軸為權重,Y軸為MSE。

可以看到權重為2的時候。MSE最小。

Pytorch ---- 線性模型 學習筆記~~~~~

這裡有個坑,使用 np.arange 有雙浮點數精度損失。

for i in np.arange(0.0,4.0,0.1):
    print(i)
部分輸出:
0.0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6000000000000001
0.7000000000000001
0.8
0.9
1.0
1.1
1.2000000000000002
1.3
1.4000000000000001
1.5
1.6
1.7000000000000002
1.8