1.決策樹
1.1從LR到決策樹
相信大家都做過用LR來進行分類,總結一下LR模型的優缺點:
優點
-
適合需要得到一個分類概率的場景。
-
實現效率較高。
-
很好處理線性特征。
缺點
-
當特征空間很大時,邏輯回歸的性能不是很好。
-
不能很好地處理大量多類特征。
-
對於非線性特征,需要進行轉換。
以上就是LR模型的優缺點,沒錯,決策樹的出現就是為了解決LR模型不足的地方,這也是我們為什么要學習決策樹的原因了,沒有任何一個模型是萬能的。
決策樹的優點
-
模擬人的直觀決策規則。
-
可以處理非線性特征。
-
考慮了特征之間的相互作用。
其實用一下圖片能更好的理解LR模型和決策樹模型算法的根本區別,我們可以思考一下一個決策問題:是否去相親,一個女孩的母親要給這個女海介紹對象。
大家都看得很明白了吧!LR模型是一股腦兒的把所有特征塞入學習,而決策樹更像是編程語言中的if-else一樣,去做條件判斷,這就是根本性的區別。
1.2“樹”的成長過程
決策樹基於“樹”結構進行決策的,這時我們就要面臨兩個問題 :
-
“樹”怎么長。
-
這顆“樹”長到什么時候停。
弄懂了這兩個問題,那么這個模型就已經建立起來了,決策樹的總體流程是“分而治之”的思想,一是自根至葉的遞歸過程,一是在每個中間節點尋找一個“划分”屬性,相當於就是一個特征屬性了。接下來我們來逐個解決以上兩個問題。
這顆“樹”長到什么時候停
-
當前結點包含的樣本全屬於同一類別,無需划分;例如:樣本當中都是決定去相親的,屬於同一類別,就是不管特征如何改變都不會影響結果,這種就不需要划分了。
-
當前屬性集為空,或是所有樣本在所有屬性上取值相同,無法划分;例如:所有的樣本特征都是一樣的,就造成無法划分了,訓練集太單一。
-
當前結點包含的樣本集合為空,不能划分。
1.3“樹”怎么長
在生活當中,我們都會碰到很多需要做出決策的地方,例如:吃飯地點、數碼產品購買、旅游地區等,你會發現在這些選擇當中都是依賴於大部分人做出的選擇,也就是跟隨大眾的選擇。其實在決策樹當中也是一樣的,當大部分的樣本都是同一類的時候,那么就已經做出了決策。
我們可以把大眾的選擇抽象化,這就引入了一個概念就是純度,想想也是如此,大眾選擇就意味着純度越高。好,在深入一點,就涉及到一句話:信息熵越低,純度越高。我相信大家或多或少都聽說過“熵”這個概念,信息熵通俗來說就是用來度量包含的“信息量”,如果樣本的屬性都是一樣的,就會讓人覺得這包含的信息很單一,沒有差異化,相反樣本的屬性都不一樣,那么包含的信息量就很多了。
一到這里就頭疼了,因為馬上要引入信息熵的公式,其實也很簡單:
Pk表示的是:當前樣本集合D中第k類樣本所占的比例為Pk。
信息增益
廢話不多說直接上公式:
看不懂的先不管,簡單一句話就是:划分前的信息熵--划分后的信息熵。表示的是向純度方向邁出的“步長”。
1.3.1ID3算法
解釋:在根節點處計算信息熵,然后根據屬性依次划分並計算其節點的信息熵,用根節點信息熵--屬性節點的信息熵=信息增益,根據信息增益進行降序排列,排在前面的就是第一個划分屬性,其后依次類推,這就得到了決策樹的形狀,也就是怎么“長”了。
如果不理解的,可以查看我一下分享的示例,結合我說的,包你看懂:
1.https://www.wailian.work/images/2018/12/11/image39e7b.png
2.https://www.wailian.work/images/2018/12/11/image61cdc.png
3.https://www.wailian.work/images/2018/12/11/image9e194.png
4.https://www.wailian.work/images/2018/12/11/image09288.png
不過,信息增益有一個問題:對可取值數目較多的屬性有所偏好,例如:考慮將“編號”作為一個屬性。這就引出了另一個 算法C4.5。
1.3.2C4.5
為了解決信息增益的問題,引入一個信息增益率:
屬性a的可能取值數目越多(即V越大),則IV(a)的值通常就越大。信息增益比本質: 是在信息增益的基礎之上乘上一個懲罰參數。特征個數較多時,懲罰參數較小;特征個數較少時,懲罰參數較大。不過有一個缺點:
- 缺點:信息增益比偏向取值較少的特征。
使用信息增益比:基於以上缺點,並不是直接選擇信息增益率最大的特征,而是現在候選特征中找出信息增益高於平均水平的特征,然后在這些特征中再選擇信息增益率最高的特征。
1.3.3CART算法
數學家真實聰明,想到了另外一個表示純度的方法,叫做基尼指數(討厭的公式):
表示在樣本集合中一個隨機選中的樣本被分錯的概率。舉例來說,現在一個袋子里有3種顏色的球若干個,伸手進去掏出2個球,顏色不一樣的概率,這下明白了吧。Gini(D)越小,數據集D的純度越高。
舉個例子
假設現在有特征 “學歷”,此特征有三個特征取值: “本科”,“碩士”, “博士”,
當使用“學歷”這個特征對樣本集合D進行划分時,划分值分別有三個,因而有三種划分的可能集合,划分后的子集如下:
1.划分點: “本科”,划分后的子集合 : {本科},{碩士,博士}
2.划分點: “碩士”,划分后的子集合 : {碩士},{本科,博士}
3.划分點: “碩士”,划分后的子集合 : {博士},{本科,碩士}}
對於上述的每一種划分,都可以計算出基於 划分特征= 某個特征值 將樣本集合D划分為兩個子集的純度:
因而對於一個具有多個取值(超過2個)的特征,需要計算以每一個取值作為划分點,對樣本D划分之后子集的純度Gini(D,Ai),(其中Ai 表示特征A的可能取值)
然后從所有的可能划分的Gini(D,Ai)中找出Gini指數最小的划分,這個划分的划分點,便是使用特征A對樣本集合D進行划分的最佳划分點。到此就可以長成一棵“大樹”了。
1.3.4三種不同的決策樹
-
ID3:取值多的屬性,更容易使數據更純,其信息增益更大。
訓練得到的是一棵龐大且深度淺的樹:不合理。
-
C4.5:采用信息增益率替代信息增益。
-
CART:以基尼系數替代熵,最小化不純度,而不是最大化信息增益。
1.4隨機森林(Random Forest)
Bagging思想
Bagging是bootstrap aggregating。思想就是從總體樣本當中隨機取一部分樣本進行訓練,通過多次這樣的結果,進行投票獲取平均值作為結果輸出,這就極大可能的避免了不好的樣本數據,從而提高准確度。因為有些是不好的樣本,相當於噪聲,模型學入噪聲后會使准確度不高。
舉個例子:
假設有1000個樣本,如果按照以前的思維,是直接把這1000個樣本拿來訓練,但現在不一樣,先抽取800個樣本來進行訓練,假如噪聲點是這800個樣本以外的樣本點,就很有效的避開了。重復以上操作,提高模型輸出的平均值。
隨機森林
RandomForest(隨機森林)是一種基於樹模型的Bagging的優化版本,一棵樹的生成肯定還是不如多棵樹,因此就有了隨機森林,解決決策樹泛化能力弱的特點。(可以理解成三個臭皮匠頂過諸葛亮)
而同一批數據,用同樣的算法只能產生一棵樹,這時Bagging策略可以幫助我們產生不同的數據集。Bagging策略來源於bootstrap aggregation:從樣本集(假設樣本集N個數據點)中重采樣選出Nb個樣本(有放回的采樣,樣本數據點個數仍然不變為N),在所有樣本上,對這n個樣本建立分類器(ID3\C4.5\CART\SVM\LOGISTIC),重復以上兩步m次,獲得m個分類器,最后根據這m個分類器的投票結果,決定數據屬於哪一類。
總的來說就是隨機選擇樣本數,隨機選取特征,隨機選擇分類器,建立多顆這樣的決策樹,然后通過這幾課決策樹來投票,決定數據屬於哪一類(投票機制有一票否決制、少數服從多數、加權多數)
優點:
-
在當前的很多數據集上,相對其他算法有着很大的優勢,表現良好。
-
它能夠處理很高維度(feature很多)的數據,並且不用做特征選擇(因為特征子集是隨機選擇的)。
-
在訓練完后,它能夠給出哪些feature比較重要。
-
訓練速度快,容易做成並行化方法(訓練時樹與樹之間是相互獨立的)。
-
在訓練過程中,能夠檢測到feature間的互相影響。
-
對於不平衡的數據集來說,它可以平衡誤差。
-
如果有很大一部分的特征遺失,仍可以維持准確度。
缺點:
-
隨機森林已經被證明在某些噪音較大的分類或回歸問題上會過擬合。
-
對於有不同取值的屬性的數據,取值划分較多的屬性會對隨機森林產生更大的影響,所以隨機森林在這種數據上產出的屬性權值是不可信的。
1.5Python代碼
尋覓互聯網,少有機器學習通俗易懂之算法講解、案例等,項目立於這一問題之上,整理一份基本算法講解+案例於文檔,供大家學習之。通俗易懂之文章亦不可以面概全,但凡有不正確或爭議之處,望告知,自當不吝賜教!
.
.
.
.
歡迎添加微信交流!請備注“機器學習”。