引言
本篇文章主要偏向於實際應用的目標,我會把詳細的python代碼專門寫在 jupyter notebook上。這篇文章主要介紹了一些關於應用Logistic Regression,LDA和Shrinkage Methods的一些要點,讓你在實際應用中可以更好地發揮各個模型的優勢,這篇文章全部來自於對An Introduction to Statistical Learning的總結,如果你有相關的統計學基礎,你可以很快讀懂文章,並結合到實際的應用,如果你沒有相應的基礎,希望你參考我的這篇文章:學好機器學習必會的統計學知識。
這是與本篇文章相對應地python代碼和一些數據集,請點我
Logistic Regression
Default數據集描述,詳細信息在第6頁。
logistic regression 是一個線性模型用於做分類的,它直接對Y屬於某個類別的概率進行建模。比如對於Default數據集來說,Pr(default = Yes | balance, student, income). 這也就是說,對於任何給定的balance, student, income的值,我都可以求出default = Yes的概率。如果我設定闕值爲0.3,那麼只要Pr(default = Yes | balance, student, income) > 0.3,我就預測default的結果爲Yes.
既然logistic regression是對概率進行建模,因此我們需要一個函數的輸出在0到1之間。有很多函數符合這個性質,但是在logistic regression中,我們用logistic function,公式如下:
那麼我們如如何來估算Logistic Regression的要參數呢?答案是用maximum likelihood. 比如,我們對Pr(default = Yes | X)來進行建模,把估算出的一系列參數插入到模型中,使得所有defaulted人的概率接近1,使得所有沒有defaulted人的概率接近0. 我們可以把這樣的想法寫成一個數學公式表達出來:
我們目的是找出一系列參數來最大化上面的likelihood函數。
Linear Discriminant Analysis
Logistic regression用logistic函數直接對Pr(Y = k|X = x)建模。而LDA用一種間接的方法去估算這些概率。LDA對每個response中X的分佈進行建模,然後用Bayes理論去反轉去估算Pr(Y = k|X = x). 如果每個response中X的分佈爲正態分佈,那麼LDA與logistic regression模型是非常相似的。LDA相比於logistic regression模型有以下3個優勢:
- 當類別能well-separated時, logistic regression模型的參數估計是非常不穩定的,而LDA並沒有這樣的問題。
- 如果數據集中的樣本很少並且每個類別中的X是接近正態分佈的,那麼LDA也要比logistic regression模型更加穩定。
- 當我們的response超過2個類別時,LDA是更受歡迎的。
假設我們一共有k個類別,Bayes 理論可以寫成如下公式:
πk: 第k個類別的prior probabilityfk(x): 第k個類別中X的density function- 以後我們會把Pr(Y = k | X = x)簡寫成
pk(X) ,稱爲posterior probability
LDA總體的思路已經被濃縮在上面的一個公式中了。LDA的主要目標就是估算出prior probability和density function,之後我們就可以在給定X的情況下,分別求出屬於各個類別的概率。想要估算出density function,我們必須假設它的形式,在LDA中,我們的假設都是正態分佈。
只有一個特徵的LDA
我們已經假設
μk: 第k個類別的meanσ2k: 第k個類別的variance
LDA不僅僅假設X的density function是正態的,而且它還假設
由於我們最終的目標是做分類,我們只要求出在給定X的情況下,屬於各個類別的概率,哪個概率最大,最後我們就預測屬於哪個類別。因此,我們可以繼續簡化上面的公式,在簡化過程中,算每個類別概率都會用到的項我直接捨棄,過程如下:
因此,最終公式如下:
最終,哪個
nk: 第k個類別observations的數量
- n:total number of training observations
prior probability最好是問一下你應用領域的專家,由於很多原因,訓練集並不一定很好地估計出prior probability. 如果你實在沒有專家可以諮詢,那麼就用下面這個簡單的公式:
總結來說:LDA分類器假設每個類別中的X服從正態分佈,並且每個分佈都具有一樣的方差,之後插入這些估算的參數到Bayes classifier,進而估算每個類別的概率。
多個特徵的LDA
先前只有一個特徵的LDA,我們假設X服從正態分佈。這回具有多個特徵的LDA也是相似的道理,只不過是X的分佈爲多變量Gaussian分佈,我們記作
μ: X的mean(a vector with p component)- Σ = Cov(X):p × p covariance matrix of X
multivariate Gaussian density function的公式如下:
就像上面的單變量LDA一樣,通過一些化簡,我們可以得出下面的公式:
Quadratic Discriminant Analysis
QDA的假設要比LDA更鬆一些,LDA的假設爲X分佈的方差都一樣,而QDA並沒有這樣的假設。如果你自己動手化簡上面的過程,你就會明白當各個類別內X的方差不一樣時,就會導致化簡結果出現
大致上來說,如果training observations相對較少,LDA的性能要比QDA要好,因爲LDA減少了方差。如果training set是非常大的,QDA是更好地選擇,因爲分類器地方差並不是我們主要考慮地對象。或者當方差相等的假設不成立時,QDA也是一個更合理地選擇。
如果QDA模型中假設covariance matrices是diagonal,這就意味着我們假設各個類別中的分佈是conditionally independent,因此導致我們的分類器與 Gaussian Naive Bayes是等價的。
幾個分類方法之間的比較
logistic regression和LDA之間唯一的不同就是估算參數的方式。logistic regression用 maximum likelihood 估算參數,而LDA假設分佈爲正態分佈從而估算方差和平均值。
LDA假設observations來自於Gaussian distribution,每個類之間有同樣的covariance matrix,因此當假設成立時,它的性能要比logistic regression好。但是,如果假設不成立,logistic regression要比LDA表現地更好。
當真正地決策邊界是線性的時候,LDA和logistic regression模型性能會很好。當決策邊界是稍微非線性的,QDA可能會給出更好地結果。最後,如果決策邊界是高度非線性的,non-parametric方法KNN可能會更有優勢,前提是我們選擇出一個合適的K值。
如果我們想要logistic regression去學習非線性的關係時,我們可以transformations of the predictors,也就是在模型中加入
Shrinkage Methods
shrinking the coefficient estimates 可以明顯顯著地減小方差。shrinking regression coefficients接近0的2個最著名的技術是ridge regression 和 the lasso
ridge regression
least squares估算線性迴歸係數時最小化residual sum of squares (RSS),而Ridge regression是和它相似的,只不過加上正則化項,即L2-penalty,因此,ridge regression最小化:
tuning parameter
當我們用least squares去估算係數時,它是scale invariant. 也就是說,把
假設你的機器學習應用中,有個長度變量,它的單位是cm,如果你把它的單位變成m,也就是這個變量縮小了100倍,ridge regression產生的係數就和先前不一樣了,因爲如果你想把估算的係數在擴大100倍,但penalty項並不會允許你這樣做,因爲這會增加penalty項的大小,導致整體的loss增加。因此,在使用ridge regression之前,一定要standardizing the predictors,讓它們在same scale上。
ridge regression相比於least squares的優勢在於它植入了bias-variance
trade-off. 隨着
從上圖我們可以看出,隨着
The Lasso
ridge regression在最終的模型上會包含所有的predictors,正則項
The Lasso也叫做L1-penalty,它生成sparse models,即只包含了變量的子集。
比較ridge regression和lasso
當小部分的predictors對response有實質的影響,而其餘的predictors相關聯的係數很小或接近於0,在這種情況下,lasso的性能要比ridge regression要好。當大部分的predictors都與response有關,並且相關聯的係數大小基本上相等,在這種情況下,ridge regression的性能要好。然而,在實際應用中,我們不可能事先知道有多少predictors與response相關聯,因此,cross-validation是一個好的技術來判斷哪個方法更好。