一.迴歸算法是啥子?
迴歸算法是一種有監督算法(有監督是指有確定標籤(Y))
用來建立“解釋”變量(自變量X)和觀測值(因變量Y)之間的關係;從機器學習的角度來講,用於構建一個算法模型(函數)來做屬性(X)與標籤(Y)之間的映射關係,在算法的學習過程中,試圖尋找一個函數使得參數之間的關係擬合性最好。迴歸算法中算法(函數)的最終結果是一個連續的數據值,輸入值(屬性值)是一個d維度的屬性(數值向量)
二.算法原理
1.最簡單的單變量線性迴歸算法
針對數據集x跟y,預測函數會根據輸入的特徵輸出一個預測值h(x),其輸入和輸出的函數關係假設如下:
從函數角度來說這是一條直線,表達一個線性關係,事實上我們的任務是構造一個函數,用來擬合數據集中輸入特徵x與輸出值y,同時使得通過預測函數計算出來的值與真實值y的整體誤差最小,構造函數的關鍵是找到合適的跟,跟稱爲模型參數.
假設我們有如下數據集:
特徵x:1,2,3,4 輸出y:4,6,10,15
假設模型參數=1, =3,則模型函數爲,針對數據集中的第一個樣本,輸入爲1,模型預測值爲4,與數據真實值吻合,對於第二個樣本,輸入爲二,模型預測值爲7,實際數據值爲6,可以看出誤差爲1,模型參數求解過程就是找出一組最合適的模型參數跟,以便能最好的擬合數據集.
1.1成本函數
單變量線性迴歸算法的成本函數是:
(m個樣本求和)
其中,是預測值與實際值的差,故成本就是預測值和實際值的差的平方的平均值,之所以乘以1/2是爲了計算方便,這個函數稱爲均方差方程,成本函數是爲了精確的測量模型對訓練樣本擬合的好壞程度
1.2梯度下降算法
有了預測函數跟成本函數,我們怎麼求解模型參數跟?那麼我們的梯度下降算法就派上用場了,我們的任務是找到最合適的跟,使得成本函數最小.設在一個三維空間裏,爲x軸,爲y軸,成本函數爲z軸,,我們就是要找出當z軸的值最小的時候所對應的x軸上的值跟y軸上的值.
梯度下降法的原理:先隨機選擇一組跟,同時選擇一個參數作爲移動的步長,然後讓x軸上的跟y軸上的分別向特定的方向移動一小步,這個步長的大小由參數指定,經過多次迭代,X軸跟y軸上的值決定的點就慢慢靠近z軸上的最小值處.那麼我們怎麼知道往哪個方向移動,才能靠近z軸上最小值附近?答案是往成本函數變小的方向移動?那麼又怎麼保證成本函數逐漸變小的方向呢?那就是偏導數!!!
可以先簡單的把偏導數理解爲斜率,我們讓不停地迭代,由當前的值,根據的偏導數函數,算出在上的斜率,然後再乘以學習率,就可以讓往變小的方向邁一小步.
梯度下降過程的公式描述爲:
公式中,下標j就是參數的序號,針對單變量線性迴歸,即0和1,稱爲學習率,它決定每次要移動的幅度大小,它乘以成本函數對參數的偏導數,以這個結果作爲參數移動的幅度,如果幅度過小,意味着要計算很多次才能到達目的地,如果幅度太大,可能會直接跨過目的地,從而無法收斂
把成本函數的定義式代入上面的公式中,推導出梯度下降算法公式:
2.多變量線性迴歸算法
工程應用中往往不止一個輸入特徵,那麼我們由單變量推廣到多變量線性迴歸算法
2.1預測函數
多個輸入特徵,此時輸出y的值由n個輸入特徵x1,x2,x3,...,xn決定,那麼預測函數的模型可以改寫如下:
若x0爲常數1,用累加運算符重寫上面的預測函數:
統稱爲,是預測函數的參數,即一組值就決定了一個預測函數,記做,在不引起誤解的輕況下我們也把它簡寫爲,理論上講,預測函數有無窮多個,我們求解的目標就是找出一個最優的值
(1)向量形式的預測函數
根據向量的乘法運算法則,成本函數可重新寫爲:
此處,依然假設,稱爲模型偏置.爲什麼要寫成向量形式的預測函數?一是因爲簡潔,二是因爲在實現算法時,要用到數值計算裏面的矩陣運算來提高效率.
2.2成本函數
多變量線性迴歸算法的成本函數:
其中,模型參數爲n+1維的向量,是預測值和實際值的差,這個形式和單變量線性迴歸算法類似
成本函數有其對應的矩陣樣式版本:
其中,X爲m(n+1)維的訓練樣本矩陣,上標T表示轉置矩陣;表示由所有的訓練的樣本輸出構成的向量,這個公式的優勢是:由矩陣乘法化掉了累加,不需要循環,直接使用矩陣運算,可以一次性計算出對特定的參數下模型的擬合成本.
2.3梯度下降法
根據單變量線性迴歸算法的介紹,梯度下降公式爲:
公式中,下標j是參數的序號,其值從0到n;爲學習率.把成本函數代入上式,利用偏導數的計算法則,易得梯度下降法的參數迭代公式:
這個公式有些符合直覺的地方,比如( ) 表示的是預測值與真實值的誤差,當誤差比較大時,經過一輪的迭代, 的步幅就邁得比較大。即當我們的參數離我們的目標值很遠的時候,迭代一次的值變化比較大,可以快速地收斂,而當離目標值比較近的時候,迭代一次的值變化比較小,即慢慢地收斂到目標值.
這個公式怎麼樣用編程語言來實現呢?在編寫機器學習算法的時候,一般步驟如下:
- 確定學習率
太大可能會使成本函數無法收斂,太小計算太多,機器學習算法效率就比較低。 - 確定參數起始點
比如讓所有的參數都爲1作爲起點,即,這樣就得到了我們的預測函數:.根據預測值和我們的成本函數,就可以算出我們在參數起始位置的成本. 需要注意的是,參數起始點可以根據實際情況靈活選擇,以便讓機器學習算法的性能更高,比如選擇比較靠近極點的位置. - 計算參數的下一組值
根據 LSM 算法,分別同時算出新的的值.然後用新的 θ 值得到新的預測函數,再根據新的預測函數,代入成本函數就可以算出新的成本. - 確認成本函數是否收斂
拿新的成本和舊的成本進行比較,看成本是不是變得越來越小. 如果兩次成本之間的差異小於誤差範圍,即說明我們已經非常靠近最小成本附近了. 就可以近似地認爲我們找到了最小成本了. 如果兩次成本之間的差異在誤差範圍之外,重複步驟 3 繼續計算下一組參數 θ. 直到找到我們的最優解.