最近工做之餘在研讀一本頗有趣的書:Introduction to statstics learning. 這本書是幾位數學系的老師編寫的,從統計的角度來解析常見的幾種機器學習算法,既然是introduction,內容也是入門級別的。與計算機系的書籍比起來,這本書會告訴讀者不一樣算法之間的聯繫,而這種聯繫本質上是由損失函數決定的。其實當你看完後發現名目繁多的算法其實不過是血脈相承的一家人,就會發現太好玩啦~
書籍相關鏈接:
學習路線: least square, trade off between bias and viriance, trade off between accuarcy and model interpretability => linear regression ,KNN (basic regression)=>logistic regression ,linear discriminant classifer,Quadratic discriminant cliassfier (basic classification) =>Cross-Validation,boostrap(Resample,enlarge data) => predictor selection, ridge,lasso,principle component regression(decrease dimension)=>polynormial regression,step function,regression spline(varialize the fit method)=>decision tree, and improved process(simulate the real human decison) => SVM=>unsupervised learning
接下來,我會針對每一種方法,給出該方法的基本原理,優勢,缺點,適用場景,參數肯定,擴展方案,我的評價,工程應用複雜度(因爲我並不瞭解優化的算法,因此該部分空缺,可是這是很重要的一個側寫) 因爲本博客主要是爲了我的總結,並非爲了發佈給你們看,因此本文不會有任何公式編輯,由於太麻煩。上述學習路線是根據Model的複雜度從低到高來的,同時model的可解釋性也在逐漸下降。
least square: 針對每一種observation的predicor,擬合所得的response數值與觀測的response數值的歐幾里得距離平方和mse,通常用來評估不一樣Model的效果,也能夠做爲單個model的目標函數。在評估model效果的時候,相似的criteria 還有R^2,F等。其中mse能夠分解爲bias variance,前者指模型的系統誤差,後者指當應用於不一樣數據集時model的變化幅度。通常來講靈活的Model具備較低的系統誤差,可是具備較高的方差。
linear regression: 假設response和多個predicor之間有線性關係,同一個整體的數據集,不一樣樣本會致使Model參數來回變化,可是參數的均值會是真正關係函數的參數。優勢:簡單。缺點:假設條件太強。適用場景:連續性response,predictor中的離散值能夠dummy爲多個變量。參數肯定:沒有tuning參數。擴展方案:首先要觀察predicor之間是否存在相關性,若是有相關性,那麼適用後文的predictor selection效果會更好點;能夠對Predictor作處理造成新的Predictor,而這種方式能夠擴展成polynormial,other flexible vairable, 說不定真的能夠找到一種變換,就是真實的關係呢~
KNN: 假設距離相近的點具備相同的性質,這個無需提早訓練model,基於局部類似性,只須要拿須要預測的點和測試集進行距離判斷便可。優勢:簡單。缺點:維度高時若是要選擇必定比例的點,那麼在每一個維度上的選擇範圍會迅速擴大,丟失Local屬性。應用場景:因爲無需Model,應用場景十分普遍,分類(class-donimant),迴歸(mean response)。參數肯定: k依具體狀況而定。複雜度:若是訓練集太多,那麼要作不少個距離運算和排序呢。擴展方案:model沒什麼要說的,工程上對距離運算和排序確定有提高手段。
logistic regression:假設response是二分類,preditor和機率存在必定的線性關係,可是考慮到機率值域,因此使用logistic函數進行轉換,目標使likelihood函數最大化,訓練處線性關係的參數。優勢:簡單。缺點:不太穩定,不太好適用於多分類問題;因爲中間的轉換關係,logistic數值雖然和機率在一個值域,可是已經不是機率了,並且閾值分界線並無特定的規則肯定。應用場景:分類,對於分類問題,不能經過簡單的yummy變換,由於yummy變換具備距離值屬性,然而咱們並不能說一個分類和另外一個分類的距離長短。參數肯定:分界閾值依具體狀況而定。複雜度:額 還行吧。擴展方案:其實可使用其餘basic function 來替換線性關係函數,不過此時就不必定是線性迴歸了。
Linear discriminant Analysis: 假設一個predictor, 把它指定到真實的response時,會發生什麼: 條件機率最大,類內距離小,類間距離大,本書採用的是基於bayes的LDA,根據指定對類機率最大,假設predictor在某個類中的數值服從正態分佈,且在全部類中的方差相同,那麼根據bayes假設,能夠獲取一個判別函數,並經過數據集來估計分佈的統計量。優勢:能夠處理多分類;缺點:這裏的強假設能夠看出bayes decision boundary是線性的,對於非線性的數據使用QDA更好。應用場景: 分類。參數肯定:無;擴展方案:能夠去掉方差相等假設,這樣就轉化爲了QLA;另外能夠用最小風險替換最小錯誤率優化。
QDA:如上所述,只是bayes decision boundary是非線性的,關於bayes decision boundary, 中午資料能夠參考 http://wenku.baidu.com/view/ac50412c453610661ed9f470.html
resample methods: 能夠經過該方法train 和test error的差別。最簡單的方法是把原始數據分爲兩類,然而這樣作使得sse on the test data 的方差特別高,並且浪費了不少數據。Leave-one-out cross-validation (LOOCV) k-fold CV e bootstrap。這幾種方法,能夠經過訓練集數量,測試集數量,測試之間的model關聯度來分析優劣。
predictor selection: 問題:當數據集不是很大,而Predictor很大的時候,很容易致使過擬合,由於尋找方法來縮減或者下降Predictor數量會緩解該問題。stepwise selection:根據criteria的變化,貪心的選擇最能下降錯誤率的predictor,直到一個結束條件。考慮到mse r^2確定是predictor越多,該兩個creteria越小,因此這兩個creteria是不能做爲selection的目標,能夠考慮添加predicotr數目的懲罰算子,改裝後的creteria.
Ridge Regression: 添加平方的懲罰算子。使用bias -variance來提升效果;然而即便使用該方法,最後的model裏面仍然是全部的predictor。 因此有了lasso
Lasso:添加絕對值的懲罰算子。
dimmension reduce method: 咱們將原始predictor線性組合得到新的predictor,不過有更少的維度。例如PCR,第一個主份量使得原始數據和該份量的距離最小;接下來選取垂直上一個份量的新份量,使得距離最小,如此直到結束條件。在這個過程當中,份量的組合和response 並沒有關係(份量係數的肯定只和ovservation的數據分佈有關),是一種unsuperwise的方式。這個方法能夠看作是ridge算法的連續版本。
partial least squares:在肯定主份量的時候,份量係數不是尋找距離最小,而是就像simple linear regression 同樣,根據mse最小獲取第一個主份量。上述幾種降維的方法能夠緩解 multicollinearity。
polynomial fit: 假設predictor能夠經過多項式的方式來預測response. 考慮到該Model應用於全局數據,而將Predictor劃分爲幾個區域分別使用不一樣的basic function 擬合聽起來是個不錯的注意,實際上這個trick和數值分析中的樣條是一樣的道理。考慮到人爲劃分區域,因此若是在區域邊界處添加連續和平滑的constraint ,看起來會更天然點。優勢:伸縮性較強,用於基本學習方法的提高;缺點:參數肯定。參數肯定:這裏有兩類參數須要肯定,一個是分區大小,一個是分區邊界位置。目前軟件中通常是按照平均一致的方式放置邊界,固然也能夠在你認爲變化比較大的放置邊界。至於分區大小,文中說要試驗不少次,選擇sme最小的那個。。。擴展方案:這個已經屬於提高方案了。。
Generalized additive models (GAMs):在每一個觀察點擬合一個函數,而後對函數進行線性組合,具備可加性。優勢:能夠進行線性和非線性擬合(分類),並且具備必定的解釋性,例如一個點對總體的影響。上述提高方法實際上並非Model的方法,而是一種MOdel的框架。應用場景:。。
Regression Trees:經過選取predictor的index和分割點 使得rss最小。考慮到分割層越多,那麼mse越小,因此樹結構會變得十分龐大,在目標函數中添加節點個數做爲懲罰算子會達到剪枝的目的。
classfication trees: 創建model的方法同上,只是目標函數不能是mse,由於沒法衡量兩個類型之間的距離,考慮到按照錯誤率並不敏感(??),因此使用gini or entropy做爲critera。決策樹和上面的linear method在原理上有很大的不一樣,決策樹在原理和決策過程當中和人類的思考方式很像,然而在實際運用中,決策樹的效果並非太好,並且決策樹不具備魯棒性。
bagging:原理如同上文的boostrap,經過重複採樣,創建多個Model,並在model之間均和。
Random Forests:儘管在bagging中存在數據差別,可是實際上基於不一樣數據簡歷的model的樹的上層基本都同樣,換句話說不一樣決策樹之間有着較高的相關性。而隨機森林則從另外一個角度出發, 它的model不一樣之處不是數據的不一樣,而是選取的predictor不同。基於經驗,model的Predictor的本身個數大約爲sqart(q)是比較合適的。很難想象把。。。
boost:經過在多重數據集上生成簡單的樹樁結構,而後對樹樁進行組合學習,而得到不錯的結果。參數肯定:1 樹樁深度,通常1比較合適;2 model數量,3 學習速度。http://www.cnblogs.com/LeftNotEasy/archive/2011/01/02/machine-learning-boosting-and-gradient-boosting.html
Support Vector Machines:在數據空間中尋找一個超平面,使得分開的類型間距離最大。support vector classifier 的公式和 lasso的公式很像;在效果上和regression的表現很像;實際上SVM的unique 並非由於核函數能夠進行非線性分析, 由於對於logistics regreesion也能夠代入非線性函數,只是從來習慣如此。