機(jī)器學(xué)習(xí)算法 - 隨機(jī)森林之決策樹初探(1)
隨機(jī)森林是基于集體智慧的一個(gè)機(jī)器學(xué)習(xí)算法,也是目前最好的機(jī)器學(xué)習(xí)算法之一。
隨機(jī)森林實(shí)際是一堆決策樹的組合(正如其名,樹多了就是森林了)。在用于分類一個(gè)新變量時(shí),相關(guān)的檢測(cè)數(shù)據(jù)提交給構(gòu)建好的每個(gè)分類樹。每個(gè)樹給出一個(gè)分類結(jié)果,最終選擇被最多的分類樹支持的分類結(jié)果?;貧w則是不同樹預(yù)測(cè)出的值的均值。
要理解隨機(jī)森林,我們先學(xué)習(xí)下決策樹。
決策樹 - 把你做選擇的過(guò)程呈現(xiàn)出來(lái)
決策樹是一個(gè)很直觀的跟我們?nèi)粘W鲞x擇的思維方式很相近的一個(gè)算法。
如果有一個(gè)數(shù)據(jù)集如下:
data <- data.frame(x=c(0,0.5,1.1,1.8,1.9,2,2.5,3,3.6,3.7), color=c(rep('blue',5),rep('green',5)))
data
## x color
## 1 0.0 blue
## 2 0.5 blue
## 3 1.1 blue
## 4 1.8 blue
## 5 1.9 blue
## 6 2.0 green
## 7 2.5 green
## 8 3.0 green
## 9 3.6 green
## 10 3.7 green那么假如加入一個(gè)新的點(diǎn),其x值為1,那么該點(diǎn)對(duì)應(yīng)的最可能的顏色是什么?
根據(jù)上面的數(shù)據(jù)找規(guī)律,如果x<2.0則對(duì)應(yīng)的點(diǎn)顏色為blue,如果x>=2.0則對(duì)應(yīng)的點(diǎn)顏色為green。這就構(gòu)成了一個(gè)只有一個(gè)決策節(jié)點(diǎn)的簡(jiǎn)單決策樹。

決策樹常用來(lái)回答這樣的問(wèn)題:給定一個(gè)帶標(biāo)簽的數(shù)據(jù)集(標(biāo)簽這里對(duì)應(yīng)我們的color列),怎么來(lái)對(duì)新加入的數(shù)據(jù)集進(jìn)行分類?
如果數(shù)據(jù)集再?gòu)?fù)雜一些,如下,
data <- data.frame(x=c(0,0.5,1.1,1.8,1.9,2,2.5,3,3.6,3.7),
y=c(1,0.5,1.5,2.1,2.8,2,2.2,3,3.3,3.5),
color=c(rep('blue',3),rep('red',2),rep('green',5)))
data
## x y color
## 1 0.0 1.0 blue
## 2 0.5 0.5 blue
## 3 1.1 1.5 blue
## 4 1.8 2.1 red
## 5 1.9 2.8 red
## 6 2.0 2.0 green
## 7 2.5 2.2 green
## 8 3.0 3.0 green
## 9 3.6 3.3 green
## 10 3.7 3.5 green如果
x>=2.0則對(duì)應(yīng)的點(diǎn)顏色為green。如果
x<2.0則對(duì)應(yīng)的點(diǎn)顏色可能為blue,也可能為red。
這時(shí)就需要再加一個(gè)新的決策節(jié)點(diǎn),利用變量y的信息。

這就是決策樹,也是我們?nèi)粘M评韱?wèn)題的一般方式。
訓(xùn)練決策樹 - 確定決策樹的根節(jié)點(diǎn)
第一個(gè)任務(wù)是確定決策樹的根節(jié)點(diǎn):選擇哪個(gè)變量和對(duì)應(yīng)閾值選擇多少能給數(shù)據(jù)做出最好的區(qū)分。
比如上面的例子,我們可以先處理變量x,選擇閾值為2 (為什么選2,是不是有比2更合適閾值,我們后續(xù)再說(shuō)),則可獲得如下分類:

我們也可以先處理變量y,選擇閾值為2,則可獲得如下分類:

那實(shí)際需要選擇哪個(gè)呢?
實(shí)際我們是希望每個(gè)選擇的變量和閾值能把不同的類分的越開越好;上面選擇變量x分組時(shí),Green完全分成一組;下面選擇y分組時(shí),Blue完全分成一組。怎么評(píng)價(jià)呢?
這時(shí)就需要一個(gè)評(píng)價(jià)指標(biāo),常用的指標(biāo)有Gini inpurity和Information gain。
Gini Impurity
在數(shù)據(jù)集中隨機(jī)選擇一個(gè)數(shù)據(jù)點(diǎn),并隨機(jī)分配給它一個(gè)數(shù)據(jù)集中存在的標(biāo)簽,分配錯(cuò)誤的概率即為Gini impurity。
我們先看第一套數(shù)據(jù)集,10個(gè)數(shù)據(jù)點(diǎn),5個(gè)blue,5個(gè)green。從中隨機(jī)選一個(gè)數(shù)據(jù)點(diǎn),再隨機(jī)選一個(gè)分類標(biāo)簽作為這個(gè)數(shù)據(jù)點(diǎn)的標(biāo)簽,分類錯(cuò)誤的概率是多少?如下表,錯(cuò)誤概率為0.25+0.25=0.5(看下面的計(jì)算過(guò)程)。
probility <- data.frame(Event=c("Pick Blue, Classify Blue",
"Pick Blue, Classify Green",
"Pick Green, Classify Blue",
"Pick Green, Classify Green"),
Probability=c(5/10 * 5/10, 5/10 * 5/10, 5/10 * 5/10, 5/10 * 5/10),
Type=c("Blue" == "Blue",
"Blue" == "Green",
"Green" == "Blue",
"Green" == "Green"))
probility
## Event Probability Type
## 1 Pick Blue, Classify Blue 0.25 TRUE
## 2 Pick Blue, Classify Green 0.25 FALSE
## 3 Pick Green, Classify Blue 0.25 FALSE
## 4 Pick Green, Classify Green 0.25 TRUE我們?cè)倏吹诙讛?shù)據(jù)集,10個(gè)數(shù)據(jù)點(diǎn),2個(gè)red,3個(gè)blue,5個(gè)green。從中隨機(jī)選一個(gè)數(shù)據(jù)點(diǎn),再隨機(jī)選一個(gè)分類標(biāo)簽作為這個(gè)數(shù)據(jù)點(diǎn)的標(biāo)簽,分類錯(cuò)誤的概率是多少?0.62。
probility <- data.frame(Event=c("Pick Blue, Classify Blue",
"Pick Blue, Classify Green",
"Pick Blue, Classify Red",
"Pick Green, Classify Blue",
"Pick Green, Classify Green",
"Pick Green, Classify Red",
"Pick Red, Classify Blue",
"Pick Red, Classify Green",
"Pick Red, Classify Red"
),
Probability=c(3/10 * 3/10, 3/10 * 5/10, 3/10 * 2/10,
5/10 * 3/10, 5/10 * 5/10, 5/10 * 2/10,
2/10 * 3/10, 2/10 * 5/10, 2/10 * 2/10),
Type=c("Blue" == "Blue",
"Blue" == "Green",
"Blue" == "Red",
"Green" == "Blue",
"Green" == "Green",
"Green" == "Red",
"Red" == "Blue",
"Red" == "Green",
"Red" == "Red"
))
probility
## Event Probability Type
## 1 Pick Blue, Classify Blue 0.09 TRUE
## 2 Pick Blue, Classify Green 0.15 FALSE
## 3 Pick Blue, Classify Red 0.06 FALSE
## 4 Pick Green, Classify Blue 0.15 FALSE
## 5 Pick Green, Classify Green 0.25 TRUE
## 6 Pick Green, Classify Red 0.10 FALSE
## 7 Pick Red, Classify Blue 0.06 FALSE
## 8 Pick Red, Classify Green 0.10 FALSE
## 9 Pick Red, Classify Red 0.04 TRUE
Wrong_probability = sum(probility[!probility$Type,"Probability"])
Wrong_probability
## [1] 0.62Gini Impurity計(jì)算公式:
假如我們的數(shù)據(jù)點(diǎn)共有C個(gè)類,p(i)是從中隨機(jī)拿到一個(gè)類為i的數(shù)據(jù),Gini Impurity計(jì)算公式為:
$$ G = \sum_{i=1}^{C} p(i)*(1-p(i)) $$?

對(duì)第一套數(shù)據(jù)集,10個(gè)數(shù)據(jù)點(diǎn),5個(gè)blue,5個(gè)green。從中隨機(jī)選一個(gè)數(shù)據(jù)點(diǎn),再隨機(jī)選一個(gè)分類標(biāo)簽作為這個(gè)數(shù)據(jù)點(diǎn)的標(biāo)簽,分類錯(cuò)誤的概率是多少?錯(cuò)誤概率為0.25+0.25=0.5。

對(duì)第二套數(shù)據(jù)集,10個(gè)數(shù)據(jù)點(diǎn),2個(gè)red,3個(gè)blue,5個(gè)green。
從中隨機(jī)選一個(gè)數(shù)據(jù)點(diǎn),再隨機(jī)選一個(gè)分類標(biāo)簽作為這個(gè)數(shù)據(jù)點(diǎn)的標(biāo)簽,分類錯(cuò)誤的概率是多少?0.62。

決策樹分類后的Gini Impurity
對(duì)第一套數(shù)據(jù)集來(lái)講,按照x<2分成兩個(gè)分支,各個(gè)分支都只包含一個(gè)分類數(shù)據(jù),各自的Gini
IMpurity值為0。
這是一個(gè)完美的決策樹,把Gini Impurity為0.5的數(shù)據(jù)集分類為2個(gè)Gini Impurity為0的數(shù)據(jù)集。Gini Impurity==?0是能獲得的最好的分類結(jié)果。


第二套數(shù)據(jù)集,我們有兩種確定根節(jié)點(diǎn)的方式,哪一個(gè)更優(yōu)呢?
我們可以先處理變量x,選擇閾值為2,則可獲得如下分類:

每個(gè)分支的Gini Impurity可以如下計(jì)算:

當(dāng)前決策的Gini impurity需要對(duì)各個(gè)分支包含的數(shù)據(jù)點(diǎn)的比例進(jìn)行加權(quán),即

我們也可以先處理變量y,選擇閾值為2,則可獲得如下分類:

每個(gè)分支的Gini Impurity可以如下計(jì)算:

當(dāng)前決策的Gini impurity需要對(duì)各個(gè)分支包含的數(shù)據(jù)點(diǎn)的比例進(jìn)行加權(quán),即

兩個(gè)數(shù)值比較0.24<0.29,選擇x作為第一個(gè)分類節(jié)點(diǎn)是我們第二套數(shù)據(jù)第一步?jīng)Q策樹的最佳選擇。
前面手算單個(gè)變量、單個(gè)分組不算麻煩,也是個(gè)學(xué)習(xí)的過(guò)程。后續(xù)如果有更多變量和閾值時(shí),再手算就不合適了。下一篇我們通過(guò)暴力方式自寫函數(shù)訓(xùn)練決策樹。
當(dāng)前計(jì)算的結(jié)果,可以作為正對(duì)照,確定后續(xù)函數(shù)結(jié)果的準(zhǔn)確性。(NBT:你想成為計(jì)算生物學(xué)家?)
參考:
https://victorzhou.com/blog/intro-to-random-forests/
https://victorzhou.com/blog/gini-impurity/
https://stats.stackexchange.com/questions/192310/is-random-forest-suitable-for-very-small-data-sets
https://towardsdatascience.com/understanding-random-forest-58381e0602d2
https://www.stat.berkeley.edu/~breiman/RandomForests/reg_philosophy.html
https://medium.com/@williamkoehrsen/random-forest-simple-explanation-377895a60d2d
往期精品(點(diǎn)擊圖片直達(dá)文字對(duì)應(yīng)教程)
后臺(tái)回復(fù)“生信寶典福利第一波”或點(diǎn)擊閱讀原文獲取教程合集

?
(請(qǐng)備注姓名-學(xué)校/企業(yè)-職務(wù)等)



























