簡單的線性回歸算法舉例
引子
小學的時候老師出過的一道題,方程 y = w0 + w1x ,已知兩組數據,求解w0和w1
x = 1 ,y = 2
x = 2 ,y = 3
兩點確定一條直線,此時可以准確求得w0 和 w1
但是如果給了3組數據,可不可以准確求得w0 和 w1呢
x = 1 ,y = 2
x = 2 ,y = 3
x = 3 ,y = 5
由於這3點不在一條直線,所以不能准確求得w0 和 w1。這其實是一道錯題,老師會讓隨便去掉一組數據求解。
這道錯題其實是一個機器學習問題。我們是否可以找到一條完美直線,使得誤差最小呢?
如果數據量更大,給了3億組x和y的數據,不在一條直線上,是否能找到一條完美直線,使得誤差最小呢?
從這3億組數據找到規律的過程就是機器學習,規律就是w參數。
完美直線的定義:空間的點到直線的距離最近。不是穿過的點最多。
如何使得空間的點到直線的距離最近?
1、量化公式
有一個量化公式衡量了總誤差,假設一共有m個點(xi,yi),i = 1,2,3 ... ... m,擬合的直線的方程為 hθ(x) = w0 + w1x,
那么該量化公式為:
公式含義解釋:
分母中的2,是為了方便求導
分母中的m是為了衡量m個點的平均距離
是指將xi 代入到擬合的直線方程中得到的值
求平方是因為要考慮的是差值,排除負數的影響,為什么不用絕對值排除負數的影響呢?
上述公式表示將m個點的直線方程計算出的y值與實際的y的差值的平方求和,除以2m,可以衡量m個點到擬合直線的平均誤差
2、 虛晃一槍:求導讓導數為0
至此問題轉化為求J(θ)的極小值,為了使得量化公式J(θ)越小越好,首先需要確認J(θ)是否有極小值
如果J(θ)是凹函數,就有極小值,我們可以推導出來J(θ)確實是凹函數,以下是推導過程
我們已知y = x2 是凹函數,y = kx2 + b , k>0 也是凹函數。
W為包含w0,w1兩個值的列向量,X (1;x) 也是一個列向量 那么可知 W的轉置 乘以X 等於 w0+w1x
則
?
凹函數有極小值,可以通過對w0和w1求導,使導數等於0的方法求極小值
w(w0,w1) 與J的圖像如下
對w0和w1分別求偏導,令導數為0 ,求解w參數
w0的偏導的求解過程如下
w1的偏導的求解過程如下
至此我們終於把導數求出來了
但是在實際情況下,上述方式不可行。海量數據下,x特別多(x1,x2,x3......),通過偏導為零反推求解 w參數,基本不可能,需要很多的算力
3、反推不行正向試
其他方法?
反推不行,正向試
隨機給w參數,和 3億組數據,代到 J(θ) 中,求得誤差值,J(θ)也稱為誤差函數、損失函數、目標函數、最小二乘法
誤差值不可能為0,因為3億組數據不在一條直線上
人為設置一個能夠容忍的誤差值,比如0.01,不斷迭代調整w參數,當誤差值小於0.01,此時的w參數就認為是最佳參數,此時的直線是最佳直線
設置兩個條件作為迭代的停止條件
迭代次數
誤差閾值
當這兩個條件達到其一,就停止迭代
訓練模型的步驟可以概括為下述幾步
1、隨機w0,w1參數值
2、訓練集數據和隨機出來的w參數誤差函數中求解出誤差
3、如果誤差小於用戶設置的誤差閾值,此時的w參數就是最佳參數
4、否則繼續調整w參數,循環2 3步,直到滿足停止迭代的條件為止
求解出w參數后,模型訓練完畢,
當未來有了x值,求得的y值就是預測的值
迭代次數和誤差閾值需要人為設置,誤差閾值不是越小越好,如果誤差非常小,模型可能過擬合
參數策略,調參工程師
為什么求得的誤差是點到直線在y方向上的誤差,而不是點到直線的垂直距離?
為什么求得的誤差是點到直線在y方向上的誤差
為什么不求點到直線的垂直距離
因為是要預測的y值更精准,所以是在y方向上的誤差