大資料比賽(3)- 模型選擇I

來源:互聯網
上載者:User

標籤:

聊完特徵,就要說說模型的選擇與實現。雖然已經接觸了不少機器學習方法和模型,但最近才對監督學習有了一些提綱挈領的認識,在介紹模型的同時對這些零散的知識進行簡單的匯總。(誰讓我健忘。。)

監督學習的基本模式

陳天奇大大有一篇將boost tree的文章裡提到了監督學習的key concepts,抄來加深一下印象:
監督學習要素:樣本(標記) 模型 參數 目標函數 最佳化方法
i. 模型和參數
模型指給定輸入xi如何去預測輸出 yi。我們比較常見的模型如線性模型(包括線性迴歸和logistic regression)採用了線性疊加的方式進行預測y^i=∑jwjxijy^i=∑jwjxij 。其實這裡的預測yy可以有不同的解釋,比如我們可以用它來作為迴歸目標的輸出,或者進行sigmoid 變換得到機率,或者作為排序的指標等。而一個線性模型根據yy的解釋不同(以及設計對應的目標函數)用到迴歸,分類或排序等情境。參數指我們需要學習的東西,線上性模型中,參數指我們的線性係數ww。
? Notations: i-th training example
? Model: how to make prediction given
? Parameters: the things we need to learn from data

ii. 目標函數:損失 + 正則
模型和參數本身指定了給定輸入我們如何做預測,但是沒有告訴我們如何去尋找一個比較好的參數,這個時候就需要目標函數登場了。一般的目標函數包含下面兩項:
? Objective Function(目標函數)

常見的誤差函數有L=∑nil(yi,y^i)L=∑inl(yi,y^i) 比如平方誤差 l(yi,y^i)=(yi?y^i)2l(yi,y^i)=(yi?y^i)2 ,logistic誤差函數(l(yi,y^i)=yiln(1+e?y^i)+(1?yi)ln(1+ey^i)l(yi,y^i)=yiln?(1+e?y^i)+(1?yi)ln?(1+ey^i) )等。而對於線性模型常見的正則化項有L2L2正則和L1L1正則。這樣目標函數的設計來自於統計學習裡面的一個重要概念叫做Bias-variance tradeoff,Bias可以理解為假設我們有無限多資料的時候,可以訓練出最好的模型所拿到的誤差。而Variance是因為我們只有有限資料,其中隨機性帶來的誤差。目標中誤差函數鼓勵我們的模型盡量去擬合訓練資料,這樣相對來說最後的模型會有比較少的 bias。而正則化項則鼓勵更加簡單的模型。因為當模型簡單之後,有限資料擬合出來結果的隨機性比較小,不容易過擬合,使得最後模型的預測更加穩定

iii.最佳化方法:
給定目標函數之後如何學習模型參數進而最佳化目標函數,也就是怎麼學的問題。不同的模型通常具有獨特的最佳化方法,在講述模型部分詳述

常用模型概述Tree Ensemble

現在在資料比賽中,效率最高、效果較好的常用模型就是基於分類或迴歸樹的樹形模型。下面就已有的一些資料進行簡單整理:

基礎:分類和迴歸樹

決策樹應當都很熟悉了,實際上是將空間用超平面進行劃分的一種方法,每次分割的時候(選擇分裂結點)都將當前的空間一分為二, 每一個葉子節點都是在空間中的一個不相交的地區。根據樣本特徵的取值可以把這個樣本劃分到某一個葉子節點來得到分類結果。而迴歸樹可以看做分類樹的擴充,不同點是在每個葉子節點上對應一個實值得分數,進而完成數值型的預測任務

boosting 與 bagging

整合學習方法是機器學習的重要內容,而boosting與bagging就是常用的兩種。所謂整合,其實就是將若干個“弱”分類器“綁”在一起構成一個“強”分類器(我來組成頭部!!!。。。。)
boosting:通常使用的是AdaBoost(Adaptive Boosting):初始化時對每一個訓練範例賦相等的權重1/n,然後用該學演算法對訓練集訓練t輪,每次訓練後,對誤分類樣本賦以較大的權重,(也就是讓學習演算法在後續的學習中集中對比較難的訓練例進行學習),每輪學習後得到的函數(分類器)也依據誤分類率獲得一個權重,從而得到一個預測函數序列h_1,?, h_m,預測效果好的預測函數權重較大,反之較小。最終的預測函數H對分類問題採用‘加權多數表決’的方式,對迴歸問題採用‘加權平均’的方法對新樣本進行判別。
(串列進行的,第k個分類器訓練時關注對前k-1分類器中錯分的樣本。流水作業,每個人都告訴下一個人哪裡比較難,有’經驗’傳承,學的好的人‘發言權’比較大)

bagging:bootstrap aggregating的縮寫。訓練多輪,每輪的訓練集由從初始的訓練集中隨機取出的n個訓練樣本組成,(也就是說,某個初始訓練樣本可以出現多次或根本不出現),訓練之後可得到一個預測函數序列h_1,? ?h_n ,最終的預測函數H對分類問題採用‘多數表決’方式,對迴歸問題採用‘簡單平均’方法對新樣本進行判別。
(可以並行進行,第k個分類器取決於所選取的訓練樣本。並行作業,每個人隨機學習一部分內容,擁有同樣的表決權利)

Bagging與Boosting的區別:二者的主要區別是取樣方式不同。Bagging採用均勻取樣,而Boosting根據錯誤率來取樣,因此通常Boosting的分類精度要優於Bagging,但有些資料集中,boosting會引起退化(Overfit)。Bagging的訓練集的選擇是隨機的,各輪訓練集之間相互獨立,而Boostlng的各輪訓練集的選擇與前面各輪的學習結果有關;Bagging的各個預測函數沒有權重,而Boosting是有權重的;Bagging的各個預測函數可以並行產生,而Boosting的各個預測函數只能順序產生。對於神經網路這樣極為耗時的學習方法,Bagging可通過並行訓練節省大量時間開銷。

隨機森林 Random Forest

官方版:
隨機森林是一個用隨機方式建立的,包含多個決策樹(CART樹)的分類器。其輸出的類別是由各個樹多數表決而定。
隨機性主要體現在兩個方面:(1)訓練每棵樹時,從全部訓練樣本中選取一個子集進行訓練(即bootstrap取樣)。用剩餘的資料進行評測,評估其誤差;(2)在每個節點,隨機選取所有特徵的一個子集,用來計算最佳分割方式。
隨機森林的主要優點:(1)在大的、高維資料訓練時,不容易出現過擬合而且速度較快;(2)測試時速度很快;(3)對訓練資料中的雜訊和錯誤魯棒

隨機森林的訓練過程可以總結如下:(請注意黑體字的行、列採樣和sklearn參數)
(1)給定訓練集S,測試集T,特徵維數F。
以sklearn為例,確定參數:使用到的CART樹的數量n_estimators,每棵樹的深度max_depth,每個節點使用到的特徵數量max_features,終止條件:節點上最少樣本數min_samples_split ,節點上最少的資訊增益(或者熵)min_weight_fraction_leaf
(2)從S中有放回的抽取大小和S一樣的訓練集S(i)(‘行採樣’),作為根節點的樣本,從根節點開始訓練
(3)如果當前節點上達到終止條件,則設定當前節點為葉子節點,如果是分類問題,該葉子節點的預測輸出為當前節點樣本集合中數量最多的那一類c(j),機率p為c(j)占當前樣本集的比例;如果是迴歸問題,預測輸出為當前節點樣本集各個樣本值的平均值,然後繼續訓練其他節點。如果當前節點沒有達到終止條件,則從F維特徵中無放回的隨機選取f維特徵(‘列採樣’)。利用這f維特徵,尋找分類效果最好的一維特徵k及其閾值th,當前節點上樣本第k維特徵小於th的樣本被劃分到左節點,其餘的被劃分到右節點。
(4)重複直到所有CART都被訓練過

利用隨機森林的預測過程如下:
(1)從當前樹的根節點開始,根據當前節點的閾值th,判斷是進入左節點還是進入右節點(>=th),直到到達某個葉子節點,並輸出預測值。
(2)重複執行(1)直到所有t棵樹都輸出了預測值。如果是分類問題,則輸出為所有樹中預測機率總和最大的那一個類,即對每個c(j)的p進行累計;如果是迴歸問題,則輸出為所有樹的輸出的平均值。

通俗版:
為什麼隨機森林的效果好?不就是一群戰5渣的組合嗎?簡單來說,99.9%不相關的樹做出的預測結果涵蓋所有的情況,這些預測結果將會彼此抵消。少數優秀的樹的預測結果將會超脫於芸芸“噪音”,做出一個好的預測。隨機森林就是學習方法中最“百搭”的一種,你幾乎可以把任何東西扔進去,它基本上都是可供使用的。(在資料比賽中非常好用,運行速度快,調參比較簡單,假設你初步提了幾個特徵又不知道效果好不好,請選擇rf幫你測測;假設你剛改進了一個模型,不知道泛化能力怎麼樣,請選擇rf幫你比比;假如你完全沒思路,哈哈哈,請選擇rf,因為他比你猜的准)

你以為這就完了?還記的上一篇中的特徵選取嗎?沒錯,rf可以幫你搞定,它能夠處理很高維度(feature很多)的資料,並且不用做特徵選取,在訓練完後,它還能夠給出哪些feature比較重要,訓練速度快,還支援並行哦,只要998,萬能分類器帶回家!!!。。

GBDT -Gradient Boost Decision Tree

Boosted Tree有各種‘馬甲’,比如GBDT, GBRT (gradient boosted regression tree),MART(Multiple Additive Regression Tree),LambdaMART也是一種boosted tree的變種,最早的提出者應該是Friedman。
GBDT主要由三個概念組成:Regression Decistion Tree(即DT),Gradient Boosting(即GB),Shrinkage(學習方法,大部分都使用)。DT不用多說就是迴歸樹,GB則是個比較大的命題,老樣子,雅俗共賞:
官方版
一般的,損失函數(loss function)描述的是模型的訓練誤差,損失函數越大,則說明模型越容易出錯(不考慮方差、偏差均衡問題)。學習的過程讓損失函數持續的下降,則說明我們的模型在不停的改進,而梯度方向是函數下降最快的方向(高數學過吧),神經網路中梯度下降法(SGD)就是這種思想。
在GBDT中,演算法流程如下:
(0) 給定一個初始值
(1) 建立M棵決策樹(迭代M次)
(2) 對函數估計值F(x)進行Logistic變換
(3) 對於K個分類進行下面的操作(通常為向量操作):

  • 求得殘差減少的梯度方向
  • 根據每一個樣本點x,與其殘差減少的梯度方向,得到一棵由J個葉子節點組成的決策樹
  • 為當決策樹建立完成後,得到每一個葉子節點的增益(在預測時用)
  • 將當前得到的決策樹與之前的那些決策樹合并起來,作為新的一個模型

通俗版:
之前介紹的Boost演算法是在演算法開始的時候,每一個樣本賦上一個權重值,在每一步結束後,增加分錯的點的權重,減少分對的點的權重,這樣使得某些誤分類點被“嚴重關注”。然後進行N次迭代得到N個簡單的分類器(basic learner)將它們組合起來得到一個最終的模型。
而Gradient Boost中,每一次的計算是為了減少上一次的殘差(residual),而為了消除殘差,我們可以在殘差減少的梯度(Gradient)方向上建立一個新的模型。即:

在Gradient Boost中,每個新的模型的建立是為了使得之前模型的殘差往梯度方向減少。

那什麼是殘差呢?很簡單,殘差就是一個加預測值後能得真實值的累加量
抄個例子:

比如A的真實年齡是18歲,但第一棵樹的預測年齡是12歲,差了6歲,即殘差為6歲。那麼在第二棵樹裡我們把A的年齡設為6歲去學習,如果第二棵樹真的能把A分到6歲的葉子節點,那累加兩棵樹的結論就是A的真實年齡;如果第二棵樹的結論是5歲,則A仍然存在1歲的殘差,第三棵樹裡A的年齡就變成1歲,繼續學習

Shrinkage(縮減)的思想認為,每次走一小步逐漸逼近結果的效果,要比每次邁一大步很快逼近結果的方式更容易避免過擬合。即它不完全信任每一個棵殘差樹,它認為每棵樹只學到了真理的一小部分,累加的時候只累加一小部分,通過多學幾棵樹彌補不足

y(i+1) = 殘差(y1~yi), 其中: 殘差(y1~yi) = y真實值 - y(1 ~ i)
y(1 ~ i) = SUM(y1, …, yi)
Shrinkage不改變第一個方程,只把第二個方程改為:
y(1 ~ i) = y(1 ~ i-1) + step * yi

GBDT適用於各種迴歸問題,在二分類等分類問題中也有不錯的效果。

xgboost -Extreme Gradient Boosting

xgboost在kaggle比賽中大放異彩,是Gradient Boosting Machine的一個c++實現,先放陳天奇大牛文章和講義:
Boosted Tree http://www.52cs.org/?p=429
講義 http://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf
還有一些相關資料:
xgboost導讀和實戰 http://vdisk.weibo.com/s/vlQWp3erG2yo/1431658679
XGBoost Parameters
http://xgboost.readthedocs.io/en/latest/parameter.html
XGboost參數設定(譯文)
http://blog.csdn.net/zzlzzh/article/details/50770054

簡單來說,不同於傳統的gbdt方式,只利用了一階的導數資訊;xgboost對loss function做了二階的泰勒展開,並在目標函數之外加入了正則項整體求最優解,用以權衡目標函數的下降和模型的複雜程度,避免過擬合;
優點是運行速度快、可以並存執行,缺點是參數比較複雜,調參不是很容易。

大資料比賽(3)- 模型選擇I

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.