回歸
通常對(duì)于一組特征數(shù)據(jù)和其標(biāo)記值:,在使用特征值
對(duì)
進(jìn)行預(yù)測(cè)時(shí),根據(jù)習(xí)慣,如果
是連續(xù)的,則稱這種操作或者技術(shù)為回歸;如果
是離散的,則通常稱為分類。
線性回歸
以根據(jù)房屋的屬性來(lái)預(yù)測(cè)價(jià)格為例,假設(shè)房屋的價(jià)格與房屋的面積和居室的數(shù)目有關(guān),如下表所示;
| Living area( |
bedrooms | Prices |
|---|---|---|
| 2104 | 3 | 400 |
| 1600 | 3 | 330 |
| 2400 | 3 | 369 |
| 1416 | 2 | 232 |
| 3000 | 4 | 540 |
把房屋的面積記為特征,把居室的數(shù)目記為特征
,價(jià)格記為
。我們猜測(cè)
和
之間,滿足關(guān)系:
因此我們可以建立模型:
我們也可以把上式寫成向量的形式
其中,是參數(shù),
是我們的訓(xùn)練數(shù)據(jù)和檢測(cè)數(shù)據(jù)中的特征值。實(shí)際上,
是未知量,我們的目標(biāo)就是通過(guò)訓(xùn)練數(shù)據(jù)調(diào)整
,來(lái)使得輸出的結(jié)果更接近真實(shí)值。
在將訓(xùn)練的數(shù)據(jù)中的代入,都會(huì)得到一個(gè)輸出
,這個(gè)值和真實(shí)的
之間會(huì)存在一個(gè)隨機(jī)的誤差
:
我們假定所有的房屋都是獨(dú)立的,我們可以認(rèn)為,誤差的存在可能是房屋中的價(jià)格還會(huì)受到一些其他的因素的影響,而這些因素在建模的過(guò)程中沒(méi)有體現(xiàn),這些細(xì)枝末節(jié)可能使得房屋的價(jià)格有一些震蕩。如果把這些因素看成隨機(jī)變量,當(dāng)足夠多的隨機(jī)變量疊加之后,根據(jù)中心極限定理,形成的分布就是正態(tài)分布。因此:
誤差是獨(dú)立同分布的,服從均值為0,方差為某定值
的高斯分布。
我們做一些推導(dǎo):
根據(jù)高斯分布:
將用訓(xùn)練數(shù)據(jù)替換:
因?yàn)槲覀冋J(rèn)為這些數(shù)據(jù)是獨(dú)立同分布的,因此所有的訓(xùn)練數(shù)據(jù)的聯(lián)合概率就是各自的邊緣概率的乘積,得到似然函數(shù):
為了簡(jiǎn)化計(jì)算,我們對(duì)取對(duì)數(shù),得到對(duì)數(shù)似然函數(shù):
當(dāng)我們使用極大似然估計(jì)的方法,則取最大值的時(shí)候,去掉式子中的定值部分,就是
取最小值,這就是最小二乘法的目標(biāo)函數(shù)。
求解
的解析式
將M個(gè)N維的樣本組成矩陣X:
- X的每一行對(duì)應(yīng)一個(gè)樣本,共有M個(gè)樣本
- X的每一列對(duì)應(yīng)樣本的一個(gè)維度,共N維
- 還有一個(gè)額外的常數(shù)項(xiàng),全為1
目標(biāo)函數(shù):
求梯度:
其中用到了線性代數(shù)的公式:
-
;
;
-
;對(duì)于對(duì)稱方陣A,
;
求駐點(diǎn):令
如果不可逆或者防止過(guò)擬合,可以加入
擾動(dòng):
加入復(fù)雜度懲罰因子
有時(shí),當(dāng)我們認(rèn)為不僅和
有關(guān)系,還可能和
有關(guān)系時(shí),我們也可以在上面的式子中加入這些項(xiàng)。例如,考慮二階的情況,上面的目標(biāo)函數(shù)會(huì)更改為:
而且,在處理的過(guò)程中,通常會(huì)把也當(dāng)作相互獨(dú)立的隨機(jī)變量處理。以此類推,我們也可以加入
等。實(shí)際上,以我個(gè)人的理解,線性回歸中,線性指的其實(shí)是死參數(shù)
的線性。
假設(shè)現(xiàn)在有九個(gè)點(diǎn),那么我們就一定可以用一個(gè)最高次不超過(guò)8次的表達(dá)式去擬合它。
隨機(jī)產(chǎn)生九個(gè)點(diǎn),然后進(jìn)行實(shí)驗(yàn),得到了如下結(jié)果:

系數(shù)如下:

可以看到,雖然8階的曲線可以完美地通過(guò)所有的點(diǎn),但是8的曲線的參數(shù)值都很大,也就很不穩(wěn)定。而且從曲線圖中很容易就可以看出,8階的曲線雖然完美的通過(guò)了所有的點(diǎn),但是并不能很好地反映九個(gè)點(diǎn)的分布。這里就存在過(guò)擬合。為了放著這種現(xiàn)象的發(fā)生,一種通常的做法是,在式子中加入一個(gè)懲罰因子,來(lái)限制參數(shù)大?。?/p>
其中是一個(gè)可調(diào)的參數(shù)。
這種操作稱為正則化,因?yàn)槲覀冇玫氖?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Ctheta" alt="\theta" mathimg="1">的平方求和,因此稱為L(zhǎng)2正則化。如果是的絕對(duì)值求和,則稱為L(zhǎng)1正則化:
在Elastic Net中將兩種正則化整合:
梯度下降算法(gradient descent)
在實(shí)際的應(yīng)用中,并不是所有的情況下都會(huì)有最優(yōu)解的解析解,而且也沒(méi)有必要去求解析解,有的時(shí)候有數(shù)值解就夠了。梯度下降算法就是一種應(yīng)用非常廣泛的求最有參數(shù)數(shù)值解的方法,步驟如下:
初始化
(隨機(jī)初始化)
-
沿著負(fù)梯度的方向迭代,更新后的
使
更小
就是讓沿著讓
下降最快的方向移動(dòng)。求一下梯度方向;
上面的結(jié)果是對(duì)一個(gè)樣本求的,實(shí)際中的損失函數(shù)是 。因此可以得到:
對(duì)梯度加上學(xué)習(xí)率,就可以的到梯度下降的過(guò)程:
Repeat until convergence{
??
}
上面的梯度下降算法存在兩個(gè)問(wèn)題,一個(gè)是在每一次訓(xùn)練的過(guò)程中都要對(duì)所有的訓(xùn)練數(shù)據(jù)求一次梯度然后進(jìn)行求和,在訓(xùn)練數(shù)據(jù)量動(dòng)則上萬(wàn)甚至上百萬(wàn)的時(shí)候,這樣的開銷無(wú)疑是非常大的;第二點(diǎn)就是,梯度下降算法并不能保證每次都能找到全局最小值,因?yàn)樵谙陆档倪^(guò)程中,參數(shù)可能會(huì)陷于某個(gè)局部極值點(diǎn)而使得梯度為零。
因此有了隨機(jī)梯度下降算法(stocastic gradient descent, SGD),每次只對(duì)一個(gè)訓(xùn)練樣本求梯度,然后讓參數(shù)值變化一次:
Loop{
??for i = 1 to m {
????
??}
}
這種方式一方面可以減少一定的運(yùn)算量,另一方面增加了隨機(jī)性,是的有可能跳出局部最小值。
應(yīng)用最多的是以上兩種方法的一個(gè)折中:mini-batch SGD,就是將訓(xùn)練數(shù)據(jù)分成很多的batch,然后每次使用一個(gè)batch做訓(xùn)練,這樣既可以規(guī)避梯度下降算法的一些缺陷,又不想隨機(jī)梯度下降(SGD)那樣激進(jìn)(隨機(jī)性太大)。實(shí)際上,mini-batch SGD也是用的最多的方法。
模型的評(píng)價(jià)
在訓(xùn)練的到一個(gè)模型之后,我們就要來(lái)評(píng)估一個(gè)模型。其實(shí),損失函數(shù)本身就可以用來(lái)評(píng)估一個(gè)模型,因?yàn)閾p失函數(shù)表征的就是預(yù)測(cè)值和真實(shí)值之間的一種誤差,我們抽取出主要部分,的到:
其中表示預(yù)測(cè)值,這個(gè)數(shù)值就是通常所說(shuō)的均方誤差。也可以使用他的算術(shù)平方根:
但是這個(gè)數(shù)值的大小與模型和應(yīng)用場(chǎng)景有很大的關(guān)系,不能建立一套統(tǒng)一的標(biāo)準(zhǔn)。因此就定義了另一個(gè)指標(biāo):
其中,TSS就是訓(xùn)練樣本方差的倍,RSS就是殘差的平方和。分析可得
具有以下性質(zhì):
-
越大,擬合的效果越好
-
的最優(yōu)值為1,并且模型的效果很離譜時(shí),
可能為負(fù)