如何訓練模型?(1)——最小二乘法
在一個機器學習問題中,當我們決定用一個模型(比如線性回歸模型)去擬合數據之後,下一步就是要去訓練這個模型,所謂的訓練模型,就是設定合適的參數,使得模型更好的擬合訓練集的數據。如今使用sklearn、tensorflow等工具可以方便的訓練模型,但是在使用它們來訓練模型的時候,就像是在進行黑箱操作,我們給一個參數,它去運行,給出結果,我們來看它表現的好壞再決定是否繼續調整參數。更好的理解這一訓練過程究竟是如何實現的,有利於我們尋找合適的訓練方法和參數。
在這篇文章中,我們主要討論最小二乘法去訓練線性回歸模型。即通過最小二乘法推倒出的閉式解 去擬合數據。最後給出了這種方法的優勢和局限性。
1. 線性回歸模型
線性模型簡單說就是計算各個特徵的加權和再加上一個常數(叫做偏置項,bias term)來作預測,其等式可以表示為:
其中 代表預測值, 是特徵數目, 代表第 個特徵的值, 表示第 個模型參數。將其寫成向量形式為:
為了衡量模型性能的好壞,這裡選擇常用的均方根誤差(RMSE)來計算,其表達式為:
通過另其一階導數等於零,我們可以求得其取最小值時的解
這個結果就是我們所說的閉式解。
如圖,這裡通過運行程序得到了 和 分別為3.91439191和3.1234778,與設定的4和3比較接近,當給出新的 ,我們就利用計算得到的 來進行預測。
從上面的例子中我們可以看出,使用最小二乘法得到的閉式解來計算權值是比較簡潔的,但是這種方法也存在一些局限性,主要表現在以下幾個方面:
① 最小二乘法需要計算 的逆矩陣,有可能它的逆矩陣不存在,這樣就沒有辦法直接用最小二乘法了(但可以使用我們後面將要談到的梯度下降法)。當然,我們可以通過對樣本數據進行整理,去掉冗餘特徵。讓 的行列式不為0,然後繼續使用最小二乘法。
② 當樣本特徵n非常的大的時候,計算 的逆矩陣是一個非常耗時的工作,甚至不可行。此時以梯度下降為代表的迭代法仍然可以使用。那這個n到底多大就不適合最小二乘法呢?如果你沒有很多的分散式大數據計算資源,建議超過10000個特徵就用迭代法吧。或者通過主成分分析降低特徵的維度後再用最小二乘法。
③ 如果擬合函數不是線性的,這時無法使用最小二乘法,需要通過一些技巧轉化為線性才能使用,此時梯度下降仍然可以用。
④ 講一些特殊情況。當樣本量m很少,小於特徵數n的時候,這時擬合方程是欠定的,常用的優化方法都無法去擬合數據。當樣本量m等於特徵說n的時候,用方程組求解就可以了。當m大於n時,擬合方程是超定的,也就是我們常用與最小二乘法的場景了。
在下一篇文章中,將分析訓練模型的另一種方法——梯度下降法,它又可以分為批量梯度下降法(BGD),隨機梯度下降法(SGD)和mini批量梯度下降法(MBGD)。
參考:
[1]Hands On Machine Learning with Scikit Learn and TensorFlow
[2]最小二乘法
推薦閱讀:
※1/700 法國海軍莫嘎多爾級驅逐艦模型製作筆記
※高達屹立於大地之上!中篇:鋼普拉推薦(HG & RG)
※代工高達模型價格通常是怎麼算的?
※變形金剛玩具月旦評——2017年10月篇
※如何評價戰棋 warmachine&horde?