1. 程式人生 > 其它 >機器學習入門的第一課:迴歸

機器學習入門的第一課:迴歸

  機器學習,通俗簡單來說,就是用某些演算法指導計算機模擬或實現人類的學習行為從已有的資料總結規律獲得“經驗”並不斷改善自身效能的一個過程。由此可見,演算法和資料是計算機學習到“新知識”或“新技能”的關鍵所在。

1.談談“迴歸”一詞的起源

  十九世紀八十年代,高爾頓和他的學生、現代統計學奠基人之一的皮爾遜(Pearson)收集了1078對父親及其1個成年兒子的身高資料,根據調查資料作出散點圖後發現,個子高的父親確有生出個子高的兒子的傾向;同樣個子矮的父親也有生出個子矮的兒子的傾向。高爾頓研究後還發現,這1078個父親的身高平均值為68英寸,1078個兒子的身高平均值是69英寸。一種自然的想法是:如果父親的身高是x英寸,那麼他兒子的身高平均來說大致是x+1英寸。但高爾頓在研究時發現,當父親的身高是72英寸時,他們的兒子的平均身高僅為71英寸,並沒有達到73英寸。他同時還發現,身高只有64英寸的父親其兒子的平均身高為67英寸,竟然比預期的65英寸高了2英寸。由此他得出結論:儘管高父親往往生出高兒子,矮父親大多生出愛矮兒子,但”兒子們“的身高有向全體男子身高的平均值靠近的趨勢,即子代身高有向平均值”迴歸“的傾向。高爾頓的解釋是:大自然具有一種約束力,使得人類身高的分佈在一定時期內相對穩定而不產生兩極分化,這就是所謂的”迴歸“效應。通過這一例子,高爾頓引入了”迴歸“(reversion,後來慢慢演變成regression)一詞。

2.機器學習中的迴歸

  在統計學中,迴歸分析是確定兩種或兩種以上的變數間相互依賴的定量關係的一種統計分析方法。在機器學習中,迴歸用於預測輸入變數和輸出變數之間的關係,特別是當輸入變數的值發生變化時,輸出變數的值隨之發生的變化。迴歸模型正是表示從輸入變數到輸出變數之間對映的函式,迴歸問題等價於函式擬合:選擇一條函式曲線使其很好地擬合已知資料且很好地預測未知資料。迴歸問題常用於預測連續的值,如預測房價、未來的天氣情況等等。

3.迴歸演算法入門之學習引數

  給出一個數組x,然後基於表示式y = 2x^2+3x+10,加上一些噪音資料到達另一組資料y。然後,構建一個機器學習模型,利用陣列x,y 的資料為訓練資料,學習表示式y = w0*x^2+w1*x+b的三個引數w0、w1、b。

  程式碼如下:

from matplotlib import pyplot as plt
import torch

# 擬合 y = 2x^2+3x+10
x = torch.linspace(-1, 1, 100).reshape(100, 1)
y = 2 * torch.pow(x, 2) + 3 * x + 10 + 0.2 * torch.rand(x.size()).reshape(100, 1)

w0 = torch.randn(1, 1, requires_grad=True)
w1 = torch.randn(1, 1, requires_grad=True)
b = torch.randn(1, 1, requires_grad=True)
lr 
= 0.005 #學習率 for i in range(1000): # 前向傳播 y_pred = w0 * torch.pow(x, 2) + w1 * x + b + 0.2 * torch.rand(x.size()).reshape(100, 1) # 反向傳播 loss_arr = 0.5 * (y - y_pred) ** 2 loss = loss_arr.sum() # 損失 loss.backward()# 反向傳播求w0,w1,b梯度 with torch.no_grad(): w0 -= lr * w0.grad w1 -= lr * w1.grad b -= lr * b.grad w0.grad.zero_()#每訓練一次,梯度要清0 w1.grad.zero_() b.grad.zero_() print("w0 is {},w1 is {},b is {}".format(w0, w1, b)) plt.scatter(x, y, c='b', marker='o', label='True') plt.plot(x, y_pred.detach().numpy(), 'r-', label='Pred') plt.legend() plt.show()

執行結果:

(1)學習到的引數很接近表示式的引數

(2)模型很好的擬合了基於表示式產生的資料點