目錄
- 最小二乘法的原理與要解決的問題
- 最小二乘法的代數法解法
- 最小二乘法的矩陣法解法
- 最小二乘法的局限性和適用場景
- 常見問題
最小二乘法是用來做函數擬合或者求函數極值的方法。在機器學習,尤其是回歸模型中,經常可以看到最小二乘法的身影,這里就對我對最小二乘法的認知做一個小結。
一、最小二乘法的原理與要解決的問題
最小二乘法是由勒讓德在19世紀發現的(也有爭議為高斯發明),形式如下式:
觀測值就是我們的多組樣本,理論值就是我們的假設擬合函數。目標函數也就是在機器學習中常說的損失函數,我們的目標是得到使目標函數最小化時候的擬合函數的模型。舉一個最簡單的線性回歸的簡單例子,比如我們有m個只有一個特征的樣本:
二、最小二乘法的代數法解法
上面提到要使J(θ0,θ1)最小,方法就是對θ0和θ1分別來求偏導數,令偏導數為0,得到一個關於θ0和θ1的二元方程組。求解這個二元方程組即可。
這個方法很容易推廣到多個樣本特征的線性擬合。
這樣我們得到一個N+1元一次方程組,這個方程組有N+1個方程,求解這個方程,就可以得到所有的N+1個未知的θ。
這個方法很容易推廣到多個樣本特征的非線性擬合。原理和上面的一樣,都是用損失函數對各個參數求導取0,然后求解方程組得到參數值。這里就不累述了。
三、最小二乘法的矩陣法解法
矩陣法比代數法要簡潔,且矩陣運算可以取代循環,所以現在很多書和機器學習庫都是用的矩陣法來做最小二乘法。這里用上面的多元線性回歸例子來描述矩陣法解法。在我的博客【1】中已經使用到:
四、最小二乘法的局限性和適用場景
從上面可以看出,最小二乘法適用簡潔高效,比梯度下降這樣的迭代法似乎方便很多。但是這里我們就聊聊最小二乘法的局限性。
- 如果擬合函數不是線性的,這時無法使用最小二乘法,需要通過一些技巧轉化為線性才能使用,此時梯度下降仍然可以用。
- 當樣本量m很少,小於特征數n的時候,這時擬合方程是欠定的,常用的優化方法都無法去擬合數據。當樣本量m等於特征數n的時候,用方程組求解就可以了。當m大於n時,擬合方程是超定的,也就是我們常用與最小二乘法的場景了。
五、常見問題
1) 對於多元函數求其極值,即使求偏導並令偏導數為0,也不能代表所求的值為極值點,也可能是拐點吧?
回答: 是的,不一定是全局極值點。只有數據集是凸的情況下,是全局的極值點。
2)假設函數非凸,求偏導之后,應該會求出多個值。此時這些值,應該是局部最優、或者拐點及全局最優解。如何判定這些值屬於什么情況? 需要代入計算么?
回答:一般不用,這是理論上的情況,實際應用中局部最優也可以滿足要求。
3)對於一元函數,可導必連續,連續未必可導。而對於多元函數而言,兩者沒有必然聯系。如果存在不可導的情況,又該如何解決呢? 比如用梯度下降法求極值時,如何確保函數是連續的?如何確保函數在某點可導?
回答:對於無法連續可導的情況,比如L1正則化,一般可以用坐標軸下降法和最小角回歸法來迭代求解極值。
4)是否可能存在損失函數為單調函數,那這樣的話,不是沒有極值了?
回答:這也有可能,但是我們總可以迭代找到局部最優的極小值。
5)如果存在調參時,正好選擇的區間處於拐點區間。梯度下降法又是以梯度值接近0為判定條件,這樣的話,應該會造成錯誤的參數選擇吧。這個感覺還和局部最優解不一樣。
回答:是的,所以一般需要多選擇幾個初始值分別梯度下降,找里面最優的局部最優解。
6)對於單調函數而言,其梯度是很難找到接近0的情況(除非是拐點)。。如何能通過迭代找到局部最優解呢?--比如X^3這樣的函數,是單調遞增的,X=0時是拐點,那是將X=0作為最優解了?
回答: 一般機器學習都是定義損失函數,損失最小為0,所以肯定會有拐點。拐點附近的局部最優解容易被找到。
附件一:手寫推導過程練習