????機器學習已經(jīng)學了很多次了团滥,拿起又放下昏兆,每次都是從“房價預測”開始枫虏,希望此次有所改變,就從記錄開始爬虱。
? ? 線性回歸是典型的監(jiān)督學習過程隶债,通過已有(帶標記)的數(shù)據(jù)訓練一個模型,然后用這個模型來根據(jù)新的輸入預測結(jié)果跑筝。還是從房價預測開始死讹。
? ? 圖中是從sklearn庫中的波士頓房價數(shù)據(jù)取了一部分房間數(shù)量與房價的數(shù)據(jù),最簡單的線性回歸便是找到一條直線盡可能的擬合數(shù)據(jù)分布曲梗。設定y為房價回俐,x為房間數(shù)逛腿,那么在這擬合曲線便是y=wx+b。w仅颇,b就是我們最后需要的模型,那么找到合適的w碘举,b的過程就是訓練了忘瓦。下面是訓練的過程。
? ? 一開始w和b都是一個隨機的值引颈,對一個輸入耕皮,y1=wx+b是預測的值,那么w蝙场,b是否合適的判斷標準就是y1和實際的值y之間的差異大小了凌停,這個差異大小可以有不同的表現(xiàn),最簡單的比如|y1-y|或者售滤。
設定這個差異為E罚拟,暫定E=,那么訓練的過程就是找到合適的w完箩,b使E足夠的小赐俗。具體方法就是經(jīng)典的梯度下降法了。
代表E對w的偏導弊知,w在這個方向前進就是最快減少E的方向阻逮,但是此方法只能找到局部最優(yōu)解,所以如果前進過多就可能越過的局部最優(yōu)解秩彤,所以需要增加一個步長系數(shù)α叔扼,那么最終一次訓練的過程就是w=w-α
,b=b-
漫雷。那么經(jīng)過一些數(shù)學推導可得??
? ? ? ? ? ? ? ? ? ? ? ? ?
因為最后都會乘一個系數(shù)瓜富,所以前面的2并不重要,所以把E定義為更方便珊拼,前面說E可以有多重不同的表達式食呻,選擇這個表達式的原因也可以揭曉了,就是求出的偏導式便于計算澎现。
實際情況中x和y都是把樣本一起納入計算的仅胞,E也就是所有點的損失函數(shù)之和,因此需要把上述的運算過程換成矩陣的計算剑辫,但過程是一致的干旧。下面是簡單的python代碼完成一步梯度下降過程。
y_pred = np.matmul(X, W) + b
error = y - y_pred
# compute steps
W_new = W + learn_rate * np.matmul(error, X)
b_new = b + learn_rate * error.sum()
也可以使用sklearn庫的線性回歸模型妹蔽,下面是簡單的示例代碼:
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x, y)
model.predict(new_x)
這樣就完成了最簡單的訓練和預測過程椎眯。