最小二乘法小結

2021-10-09 15:42:03 字數 3526 閱讀 1909

最小二乘法是用來做函式擬合或者求函式極值的方法。在機器學習,尤其是回歸模型中,經常可以看到最小二乘法的身影,這裡就對我對最小二乘法的認知做乙個小結。

最小二乘法是由勒讓德在19世紀發現的,原理的一般形式很簡單,當然發現的過程是非常艱難的。形式如下式:

目標函式=∑(觀測值−理論值)2目標函式=∑(觀測值−理論值)2

觀測值就是我們的多組樣本,理論值就是我們的假設擬合函式。目標函式也就是在機器學習中常說的損失函式,我們的目標是得到使目標函式最小化時候的擬合函式的模型。舉乙個最簡單的線性回歸的簡單例子,比如我們有m個只有乙個特徵的樣本:

(?(1),?(1)),(?(2),?(2),...(?(?),?(?))(x(1),y(1)),(x(2),y(2),...(x(m),y(m))

樣本採用下面的擬合函式:

ℎ?(?)=?0+?1?hθ(x)=θ0+θ1x

這樣我們的樣本有乙個特徵x,對應的擬合函式有兩個引數?0和?1θ0和θ1需要求出。

我們的目標函式為:

?(?0,?1)=∑?=1?(?(?)−ℎ?(?(?))2=∑?=1?(?(?)−?0−?1?(?))2j(θ0,θ1)=∑i=1m(y(i)−hθ(x(i))2=∑i=1m(y(i)−θ0−θ1x(i))2 

用最小二乘法做什麼呢,使?(?0,?1)j(θ0,θ1)最小,求出使?(?0,?1)j(θ0,θ1)最小時的?0和?1θ0和θ1,這樣擬合函式就得出了。

那麼,最小二乘法怎麼才能使?(?0,?1)j(θ0,θ1)最小呢?

上面提到要使?(?0,?1)j(θ0,θ1)最小,方法就是對?0和?1θ0和θ1分別來求偏導數,令偏導數為0,得到乙個關於?0和?1θ0和θ1的二元方程組。求解這個二元方程組,就可以得到?0和?1θ0和θ1的值。下面我們具體看看過程。

?(?0,?1)對?0j(θ0,θ1)對θ0求導,得到如下方程:

∑?=1?(?(?)−?0−?1?(?))=0∑i=1m(y(i)−θ0−θ1x(i))=0                                  ①

?(?0,?1)對?1j(θ0,θ1)對θ1求導,得到如下方程:

∑?=1?(?(?)−?0−?1?(?))?(?)=0∑i=1m(y(i)−θ0−θ1x(i))x(i)=0         ②

①和②組成乙個二元一次方程組,容易求出?0和?1θ0和θ1的值:

?0=∑?=1?(?(?))2∑?=1??(?)−∑?=1??(?)∑?=1??(?)?(?)/?∑?=1?(?(?))2−(∑?=1??(?))2θ0=∑i=1m(x(i))2∑i=1my(i)−∑i=1mx(i)∑i=1mx(i)y(i)/m∑i=1m(x(i))2−(∑i=1mx(i))2

?1=?∑?=1??(?)?(?)−∑?=1??(?)∑?=1??(?)/?∑?=1?(?(?))2−(∑?=1??(?))2θ1=m∑i=1mx(i)y(i)−∑i=1mx(i)∑i=1my(i)/m∑i=1m(x(i))2−(∑i=1mx(i))2

這個方法很容易推廣到多個樣本特徵的線性擬合。

擬合函式表示為 ℎ?(?1,?2,...??)=?0+?1?1+...+????hθ(x1,x2,...xn)=θ0+θ1x1+...+θnxn, 其中??θi (i = 0,1,2... n)為模型引數,??xi (i = 0,1,2... n)為每個樣本的n個特徵值。這個表示可以簡化,我們增加乙個特徵?0=1x0=1 ,這樣擬合函式表示為:

ℎ?(?0,?1,...??)=∑?=0?????hθ(x0,x1,...xn)=∑i=0nθixi。

損失函式表示為:

?(?0,?1...,??)=∑?=1?(ℎ?(?(?)0),?(?)1,...?(?)?))−?(?)))2=∑?=1?(∑?=0????(?)?−?(?))2j(θ0,θ1...,θn)=∑j=1m(hθ(x0(j)),x1(j),...xn(j)))−y(j)))2=∑j=1m(∑i=0nθixi(j)−y(j))2

利用損失函式分別對??θi(i=0,1,...n)求導,並令導數為0可得:

∑?=0?(∑?=0?(???(?)?−?(?))?(?)?∑j=0m(∑i=0n(θixi(j)−y(j))xi(j) = 0   (i=0,1,...n)

這樣我們得到乙個n+1元一次方程組,這個方程組有n+1個方程,求解這個方程,就可以得到所有的n+1個未知的?θ。

這個方法很容易推廣到多個樣本特徵的非線性擬合。原理和上面的一樣,都是用損失函式對各個引數求導取0,然後求解方程組得到引數值。這裡就不累述了。

矩陣法比代數法要簡潔,且矩陣運算可以取代迴圈,所以現在很多書和機器學習庫都是用的矩陣法來做最小二乘法。

這裡用上面的多元線性回歸例子來描述矩陣法解法。

假設函式ℎ?(?1,?2,...??)=?0+?1?1+...+??−1??−1hθ(x1,x2,...xn)=θ0+θ1x1+...+θn−1xn−1的矩陣表達方式為:

ℎ?(?)=??hθ(x)=xθ 

其中, 假設函式ℎ?(?)hθ(x)為mx1的向量,?θ為nx1的向量,裡面有n個代數法的模型引數。?x為mxn維的矩陣。m代表樣本的個數,n代表樣本的特徵數。

損失函式定義為?(?)=12(??−?)?(??−?)j(θ)=12(xθ−y)t(xθ−y)

其中?y是樣本的輸出向量,維度為mx1. 1212在這主要是為了求導後係數為1,方便計算。

根據最小二乘法的原理,我們要對這個損失函式對?θ向量求導取0。結果如下式:

∂∂??(?)=??(??−?)=0∂∂θj(θ)=xt(xθ−y)=0

這裡面用到了矩陣求導鏈式法則,和兩個個矩陣求導的公式。

公式1:∂∂?(???)=2??為向量∂∂x(xtx)=2xx為向量

公式2:∇??(??+?)=??∇??,?=??+?,?(?)為標量∇xf(ax+b)=at∇yf,y=ax+b,f(y)為標量

????=???xtxθ=xty

兩邊同時左乘(???)−1(xtx)−1可得:

?=(???)−1???θ=(xtx)−1xty

這樣我們就一下子求出了?θ向量表示式的公式,免去了代數法乙個個去求導的麻煩。只要給了資料,我們就可以用?=(???)−1???θ=(xtx)−1xty算出?θ。

從上面可以看出,最小二乘法適用簡潔高效,比梯度下降這樣的迭代法似乎方便很多。但是這裡我們就聊聊最小二乘法的侷限性。

首先,最小二乘法需要計算???xtx的逆矩陣,有可能它的逆矩陣不存在,這樣就沒有辦法直接用最小二乘法了,此時梯度下降法仍然可以使用。當然,我們可以通過對樣本資料進行整理,去掉冗餘特徵。讓???xtx的行列式不為0,然後繼續使用最小二乘法。

第二,當樣本特徵n非常的大的時候,計算???xtx的逆矩陣是乙個非常耗時的工作(nxn的矩陣求逆),甚至不可行。此時以梯度下降為代表的迭代法仍然可以使用。那這個n到底多大就不適合最小二乘法呢?如果你沒有很多的分布式大資料計算資源,建議超過10000個特徵就用迭代法吧。或者通過主成分分析降低特徵的維度後再用最小二乘法。

第三,如果擬合函式不是線性的,這時無法使用最小二乘法,需要通過一些技巧轉化為線性才能使用,此時梯度下降仍然可以用。

第四,講一些特殊情況。當樣本量m很少,小於特徵數n的時候,這時擬合方程是欠定的,常用的優化方法都無法去擬合資料。當樣本量m等於特徵數n的時候,用方程組求解就可以了。當m大於n時,擬合方程是超定的,也就是我們常用與最小二乘法的場景了。

最小二乘法

include stdafx.h include include const int n 2 const int m 5 int sgn double x void lss double g n 1 int xm,int xn,double x m double p,double w m lss函式...

最小二乘法

在研究兩個變數之間的關係時,可以用回歸分析的方法進行分析。當確定了描述兩個變數之間的回歸模型後,就可以使用最小二乘法估計模型中的引數,進而建立經驗方程.簡單地說,最小二乘的思想就是要使得觀測點和估計點的距離的平方和達到最小.這裡的 二乘 指的是用平方來度量觀測點與估計點的遠近 在古漢語中 平方 稱為...

最小二乘法

最小二乘法 least squares analysis 是一種 數學 優化 技術,它通過 最小化 誤差 的平方和找到一組資料的最佳 函式 匹配。最小二乘法是用最簡的方法求得一些絕對不可知的真值,而令誤差平方之和為最小。最小二乘法通常用於 曲線擬合 least squares fitting 這裡有...