微信公眾號:生信小知識
關注可了解更多的教程及單細胞知識。問題或建議,請公眾號留言;
前言為什麼要做Ridge Regression如何去做Ridge Regression關於λ對於離散型數據對於邏輯回歸對於其他小結
https://www.bilibili.com/video/BV1jE411D7YM
前言之所以最近又回過頭來看統計學了,是因為TCGA系列到了最後建模的時候,需要用到lasso回歸,如果不懂的話,建好了模型你也不懂有什麼用,所以,還是老老實實的來補習下統計學知識吧!!而且,StatQuest講的真的是非常簡單易懂了!!
為什麼要做Ridge Regression我們還是從一個簡單的例子講起:
這裡有一群小鼠的數據,每個點是一個小鼠的數據。
因為這個數據看上去很像線性,所以我們用線性回歸去擬合(最小二乘法)。最後我們得到一個擬合方程:
如果我們的數據足夠多,那麼我們的擬合結果肯定會更準。但是,如果我們的數據有限,直接考慮最最極限的情況——如果只有2個點,那麼:
我們所謂的擬合曲線就確定了。
這裡我們把紅色的點當做training data,也就是訓練集,把剩下的數據當做testing data。這樣來說,對於training data來說,根據二乘法計算得到的殘差=0,因為全部都完美的擬合了,但是對於training data來說,殘差會比較大,因為根據觀察我們可以知道擬合效果較差。這也就是說,用2個點擬合的方程,其偏差bias非常小,但是方差variance過大。這種情況,我們就稱為對於training data存在過擬合。
在這種情況下,就引出了Ridge Regression,這個方法主要做的是在擬合過程中,不那麼完美擬合,對於training data來說雖然一定程度上增大了bias,但是最後用在testing data時,預測能力得到提高,bias降低,同時variance也得到降低:
我們知道,對於training data紅色的2個點來說:
其中,斜率決定了對最小二乘法得到的殘差進行罰分,而λ決定了罰分的程度。
為了更清晰的理解,我們用一個具體的實例:
size = 0.4 + 1.3 x weight
如果我們用過擬合的方程,同時先假定λ=1:
殘差=0
λ*斜率2 = 1*1.32 = 1.69
這樣的話,(殘差+λ*斜率2)= 1.69
那麼現在我們換一個擬合方程——size = 0.9 + 0.8 x weight:
殘差=0.32+0.12
λ*斜率2 = 1*0.82
這樣的話,(殘差+λ*斜率2)= 0.74
可以看到這裡(殘差+λ*斜率2)值更小了。同時,這個擬合的方程對於testing data時,variance得到降低,同時bias也比較低。
關於λ想要理解λ的意義,我們首先要對斜率有個概念,還是以前面的例子來講:
如果斜率=1,也就是每增加1單位weight,就會增加1單位size。
如果斜率越大,每增加1單位weight,就會增加更多單位的size。這時,size對於weight非常的敏感。
如果斜率越小,每增加1單位weight,就會增加更少單位的size。這時,size對於weight不怎麼敏感。
而λ所做的事情就是讓擬合的曲線有一個更小的斜率,這樣的話就會使size對於weight的變化不怎麼敏感。
λ的取值可以是任何非負數:
那我們到底需要λ取多少合適呢?這就需要用到交叉驗證去做了。關於交叉驗證:
StatQuest - 機器學習——交叉驗證
對於離散型數據前面的數據都是連續型數據,Ridge Regression也可以用在離散型數據數據中。
用下面的例子來講:
對於正常飲食和高脂飲食組,有一些數據,經過擬合後的結果如下圖:
但是這個擬合方程需要配合一個設計矩陣來使用,關於設計矩陣日後我會把筆記發出來,有興趣的可以自己去找找資料學習下。
對於最小二乘法來擬合,我們算的想要得到的是最小的殘差,這時殘差的計算是統計所有數據和圖中紅色和綠色線所代表的均值與所有真實數據相差之和,也就是下圖我圈起來部分之和:
而使用Ridge Regression擬合的方程則是想要得到(殘差+λ*兩組均值之差2)最小,這時候,當λ越大時,為了使總和最小,兩組均值之差就會變小——也就是說,隨著λ越大,high fat diet 對於size的影響越來越不敏感。
對於邏輯回歸還是用一個實例:
經過邏輯回歸擬合方程後我們可以得到一個方程:
這裡需要注意的是:
邏輯回歸方程計算得到的是一個概率,即一個weight下,這個小鼠是肥胖的概率。
Ridge Regression需要讓(likelihood殘差+λ*斜率2)最小。
Ridge Regression做的是讓概率計算對於weight不那麼敏感。
對於其他如果我們只有1個數據,那麼我們無法確定一個具體的擬合結果,因為,經過一個點,可以有無數條直線。而想要確定一條直線,最少需要2個點,也就是最少需要2個數據。
同理,如果我們把這個往更大程度去推理:
如果我們想依賴1個基因來判斷小鼠的size,也就是在一個平面直角坐標系中,橫坐標是基因,縱坐標是size,那麼我們就至少需要2個數據點,這樣才能構成一個確定的直線。
如果我們想依賴2個基因來判斷小鼠的size,也就是在一個3維坐標系中,x軸是基因1,y軸是基因2,z軸是size,那麼我們就至少需要3個數據點,這樣才能構成一個確定的平面。
如果我們想依賴1000個基因來判斷小鼠的size,那麼我們就至少需要1001個數據點,這樣才能構成一個確定的1001維平面。
這裡就出現了一個問題,我們可能只有500個老鼠的數據點,那麼我們就沒有辦法做出一個1000個基因擬合的方程了!這時我們使用Ridge Regression進行正則化。
使用Ridge Regression進行正則化,我們可以使用更少的數據完成對1000個基因擬合的方程,具體做法如下所示:
圖中我們假設只有1個紅點作為training data,我們可以通過交叉驗證,通過最小化(殘差+λ*兩組均值之差2)的值來得到最終結果。
小結