線(xiàn)性回歸是機(jī)器學(xué)習(xí)算法中最簡(jiǎn)單的算法之一,它是監(jiān)督學(xué)習(xí)的一種算法,主要思想是在給定訓(xùn)練集上學(xué)習(xí)得到一個(gè)線(xiàn)性函數(shù),在損失函數(shù)的約束下,求解相關(guān)系數(shù),最終在測(cè)試集上測(cè)試模型的回歸效果。
10年積累的成都網(wǎng)站建設(shè)、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有金門(mén)免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
也就是說(shuō) LinearRegression 模型會(huì)構(gòu)造一個(gè)線(xiàn)性回歸公式
y' = w^T x + b
,其中 w 和 x 均為向量,w 就是系數(shù),截距是 b,得分是根據(jù)真實(shí)的 y 值和預(yù)測(cè)值 y' 計(jì)算得到的。
正則化(Regularization)
機(jī)器學(xué)習(xí)中幾乎都可以看到損失函數(shù)后面會(huì)添加一個(gè)額外項(xiàng),常用的額外項(xiàng)一般有兩種,一般英文稱(chēng)作 ?1-norm 和 ?2-norm ,中文稱(chēng)作 L1正則化 和 L2正則化 ,或者 L1范數(shù) 和 L2范數(shù) 。
L1正則化和L2正則化可以看做是損失函數(shù)的懲罰項(xiàng)。所謂『懲罰』是指對(duì)損失函數(shù)中的某些參數(shù)做一些限制。對(duì)于線(xiàn)性回歸模型,使用L1正則化的模型建叫做Lasso回歸,使用L2正則化的模型叫做Ridge回歸(嶺回歸)。下圖是Python中Lasso回歸的損失函數(shù),式中加號(hào)后面一項(xiàng)α||w||1即為L(zhǎng)1正則化項(xiàng)。
下圖是Python中Ridge回歸的損失函數(shù),式中加號(hào)后面一項(xiàng)α||w||22即為L(zhǎng)2正則化項(xiàng)。
一般回歸分析中回歸w表示特征的系數(shù),從上式可以看到正則化項(xiàng)是對(duì)系數(shù)做了處理(限制)。 L1正則化和L2正則化的說(shuō)明如下:
L1正則化是指權(quán)值向量w中各個(gè)元素的 絕對(duì)值之和 ,通常表示為||w||1
L2正則化是指權(quán)值向量w中各個(gè)元素的 平方和然后再求平方根 (可以看到Ridge回歸的L2正則化項(xiàng)有平方符號(hào)),通常表示為||w||2
一般都會(huì)在正則化項(xiàng)之前添加一個(gè)系數(shù),Python中用α表示,一些文章也用λ表示。這個(gè)系數(shù)需要用戶(hù)指定。
那添加L1和L2正則化有什么用? 下面是L1正則化和L2正則化的作用 ,這些表述可以在很多文章中找到。
L1正則化可以產(chǎn)生稀疏權(quán)值矩陣,即產(chǎn)生一個(gè)稀疏模型,可以用于特征選擇
L2正則化可以防止模型過(guò)擬合(overfitting);一定程度上,L1也可以防止過(guò)擬合
稀疏模型與特征選擇
上面提到L1正則化有助于生成一個(gè)稀疏權(quán)值矩陣,進(jìn)而可以用于特征選擇。為什么要生成一個(gè)稀疏矩陣?
稀疏矩陣指的是很多元素為0,只有少數(shù)元素是非零值的矩陣,即得到的線(xiàn)性回歸模型的大部分系數(shù)都是0.
通常機(jī)器學(xué)習(xí)中特征數(shù)量很多,例如文本處理時(shí),如果將一個(gè)詞組(term)作為一個(gè)特征,那么特征數(shù)量會(huì)達(dá)到上萬(wàn)個(gè)(bigram)。在預(yù)測(cè)或分類(lèi)時(shí),那么多特征顯然難以選擇,但是如果代入這些特征得到的模型是一個(gè)稀疏模型,表示只有少數(shù)特征對(duì)這個(gè)模型有貢獻(xiàn),絕大部分特征是沒(méi)有貢獻(xiàn)的,或者貢獻(xiàn)微?。ㄒ?yàn)樗鼈兦懊娴南禂?shù)是0或者是很小的值,即使去掉對(duì)模型也沒(méi)有什么影響),此時(shí)我們就可以只關(guān)注系數(shù)是非零值的特征。這就是稀疏模型與特征選擇的關(guān)系。
L1和L2正則化的直觀理解
這部分內(nèi)容將解釋 為什么L1正則化可以產(chǎn)生稀疏模型(L1是怎么讓系數(shù)等于零的) ,以及 為什么L2正則化可以防止過(guò)擬合 。
L1正則化和特征選擇
假設(shè)有如下帶L1正則化的損失函數(shù):
J=J0+α∑w|w|(1)
其中J0是原始的損失函數(shù),加號(hào)后面的一項(xiàng)是L1正則化項(xiàng),α是正則化系數(shù)。注意到L1正則化是權(quán)值的 絕對(duì)值之和 ,J是帶有絕對(duì)值符號(hào)的函數(shù),因此J是不完全可微的。機(jī)器學(xué)習(xí)的任務(wù)就是要通過(guò)一些方法(比如梯度下降)求出損失函數(shù)的最小值。當(dāng)我們?cè)谠紦p失函數(shù)J0后添加L1正則化項(xiàng)時(shí),相當(dāng)于對(duì)J0做了一個(gè)約束。令L=α∑w|w|,則J=J0+L,此時(shí)我們的任務(wù)變成 在L約束下求出J0取最小值的解 。考慮二維的情況,即只有兩個(gè)權(quán)值w1和w2,此時(shí)L=|w1|+|w2|對(duì)于梯度下降法,求解J0的過(guò)程可以畫(huà)出等值線(xiàn),同時(shí)L1正則化的函數(shù)L也可以在w1w2的二維平面上畫(huà)出來(lái)。如下圖:
圖1? L1正則化
圖中等值線(xiàn)是J0的等值線(xiàn),黑色方形是L函數(shù)的圖形。在圖中,當(dāng)J0等值線(xiàn)與L圖形首次相交的地方就是最優(yōu)解。上圖中J0與L在L的一個(gè)頂點(diǎn)處相交,這個(gè)頂點(diǎn)就是最優(yōu)解。注意到這個(gè)頂點(diǎn)的值是(w1,w2)=(0,w)??梢灾庇^想象,因?yàn)長(zhǎng)函數(shù)有很多『突出的角』(二維情況下四個(gè),多維情況下更多),J0與這些角接觸的機(jī)率會(huì)遠(yuǎn)大于與L其它部位接觸的機(jī)率,而在這些角上,會(huì)有很多權(quán)值等于0,這就是為什么L1正則化可以產(chǎn)生稀疏模型,進(jìn)而可以用于特征選擇。
而正則化前面的系數(shù)α,可以控制L圖形的大小。α越小,L的圖形越大(上圖中的黑色方框);α越大,L的圖形就越小,可以小到黑色方框只超出原點(diǎn)范圍一點(diǎn)點(diǎn),這是最優(yōu)點(diǎn)的值(w1,w2)=(0,w)中的w可以取到很小的值。
類(lèi)似,假設(shè)有如下帶L2正則化的損失函數(shù):
J=J0+α∑ww2(2)
同樣可以畫(huà)出他們?cè)诙S平面上的圖形,如下:
圖2? L2正則化
二維平面下L2正則化的函數(shù)圖形是個(gè)圓,與方形相比,被磨去了棱角。因此J0與L相交時(shí)使得w1或w2等于零的機(jī)率小了許多,這就是為什么L2正則化不具有稀疏性的原因。
L2正則化和過(guò)擬合
擬合過(guò)程中通常都傾向于讓權(quán)值盡可能小,最后構(gòu)造一個(gè)所有參數(shù)都比較小的模型。因?yàn)橐话阏J(rèn)為參數(shù)值小的模型比較簡(jiǎn)單,能適應(yīng)不同的數(shù)據(jù)集,也在一定程度上避免了過(guò)擬合現(xiàn)象。可以設(shè)想一下對(duì)于一個(gè)線(xiàn)性回歸方程,若參數(shù)很大,那么只要數(shù)據(jù)偏移一點(diǎn)點(diǎn),就會(huì)對(duì)結(jié)果造成很大的影響;但如果參數(shù)足夠小,數(shù)據(jù)偏移得多一點(diǎn)也不會(huì)對(duì)結(jié)果造成什么影響,專(zhuān)業(yè)一點(diǎn)的說(shuō)法是『抗擾動(dòng)能力強(qiáng)』。
那為什么L2正則化可以獲得值很小的參數(shù)?
以線(xiàn)性回歸中的梯度下降法為例。假設(shè)要求的參數(shù)為θ,hθ(x)是我們的假設(shè)函數(shù),那么線(xiàn)性回歸的代價(jià)函數(shù)如下:
J(θ)=12m∑i=1m(hθ(x(i))?y(i))(3)
那么在梯度下降法中,最終用于迭代計(jì)算參數(shù)θ的迭代式為:
θj:=θj?α1m∑i=1m(hθ(x(i))?y(i))x(i)j(4)
其中α是learning rate. 上式是沒(méi)有添加L2正則化項(xiàng)的迭代公式,如果在原始代價(jià)函數(shù)之后添加L2正則化,則迭代公式會(huì)變成下面的樣子:
θj:=θj(1?αλm)?α1m∑i=1m(hθ(x(i))?y(i))x(i)j(5)
其中 λ就是正則化參數(shù) 。從上式可以看到,與未添加L2正則化的迭代公式相比,每一次迭代,θj都要先乘以一個(gè)小于1的因子,從而使得θj不斷減小,因此總得來(lái)看,θ是不斷減小的。
最開(kāi)始也提到L1正則化一定程度上也可以防止過(guò)擬合。之前做了解釋?zhuān)?dāng)L1的正則化系數(shù)很小時(shí),得到的最優(yōu)解會(huì)很小,可以達(dá)到和L2正則化類(lèi)似的效果。
正則化參數(shù)的選擇
L1正則化參數(shù)
通常越大的λ可以讓代價(jià)函數(shù)在參數(shù)為0時(shí)取到最小值。下面是一個(gè)簡(jiǎn)單的例子,這個(gè)例子來(lái)自 Quora上的問(wèn)答 。為了方便敘述,一些符號(hào)跟這篇帖子的符號(hào)保持一致。
假設(shè)有如下帶L1正則化項(xiàng)的代價(jià)函數(shù):
F(x)=f(x)+λ||x||1
其中x是要估計(jì)的參數(shù),相當(dāng)于上文中提到的w以及θ. 注意到L1正則化在某些位置是不可導(dǎo)的,當(dāng)λ足夠大時(shí)可以使得F(x)在x=0時(shí)取到最小值。如下圖:
圖3 L1正則化參數(shù)的選擇
分別取λ=0.5和λ=2,可以看到越大的λ越容易使F(x)在x=0時(shí)取到最小值。
L2正則化參數(shù)
從公式5可以看到,λ越大,θj衰減得越快。另一個(gè)理解可以參考圖2,λ越大,L2圓的半徑越小,最后求得代價(jià)函數(shù)最值時(shí)各參數(shù)也會(huì)變得很小。
Reference
過(guò)擬合的解釋?zhuān)?/p>
正則化的解釋?zhuān)?/p>
正則化的解釋?zhuān)?/p>
正則化的數(shù)學(xué)解釋?zhuān)ㄒ恍﹫D來(lái)源于這里):
原文參考:blog.csdn.net/jinping_shi/article/details/52433975
線(xiàn)性回歸:
設(shè)x,y分別為一組數(shù)據(jù),代碼如下
import matplotlib.pyplot as plt
import numpy as np
ro=np.polyfit(x,y,deg=1) #deg為擬合的多項(xiàng)式的次數(shù)(線(xiàn)性回歸就選1)
ry=np.polyval(ro,x) #忘記x和ro哪個(gè)在前哪個(gè)在后了。。。
print ro #輸出的第一個(gè)數(shù)是斜率k,第二個(gè)數(shù)是縱截距b
plt.scatter(x,y)
plt.plot(x,ry)