嵌牛導(dǎo)讀:randomForest 包提供了利用隨機(jī)森林算法解決分類(lèi)和回歸問(wèn)題的功能;我們這里只關(guān)注隨機(jī)森林算法在分類(lèi)問(wèn)題中的應(yīng)用
嵌牛鼻子:R語(yǔ)言挚赊;隨機(jī)森林
嵌牛提問(wèn):如何使用R語(yǔ)言進(jìn)行隨機(jī)森林分析赂毯,分析結(jié)果是怎樣的透揣?
轉(zhuǎn)載源:https://www.cnblogs.com/xudongliang/p/7357967.html
嵌牛正文:
首先安裝randomForest這個(gè)包
install.packages("randomForest")
安裝成功之后疏哗,首先運(yùn)行一下example
library(randomForest)
通過(guò)查看函數(shù)的幫助文檔疲迂,可以看到對(duì)應(yīng)的example
data(iris)
set.seed(71)
iris.rf <- randomForest(Species ~ ., data=iris, importance=TRUE, proximity=TRUE)
print(iris.rf)
代碼很簡(jiǎn)單若未,全部的功能都封裝在 randomForest 這個(gè)R包中朱嘴,首先來(lái)看下用于分類(lèi)的數(shù)據(jù)
> str(iris)
'data.frame': 150 obs. of? 5 variables:
$ Sepal.Length: num? 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num? 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num? 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num? 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species? ? : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
> head(iris)
? Sepal.Length Sepal.Width Petal.Length Petal.Width Species
? ? ? ? 5.1? ? ? ? 3.5? ? ? ? ? 1.4? ? ? ? 0.2? setosa
? ? ? ? 4.9? ? ? ? 3.0? ? ? ? ? 1.4? ? ? ? 0.2? setosa
? ? ? ? 4.7? ? ? ? 3.2? ? ? ? ? 1.3? ? ? ? 0.2? setosa
? ? ? ? 4.6? ? ? ? 3.1? ? ? ? ? 1.5? ? ? ? 0.2? setosa
? ? ? ? 5.0? ? ? ? 3.6? ? ? ? ? 1.4? ? ? ? 0.2? setosa
? ? ? ? 5.4? ? ? ? 3.9? ? ? ? ? 1.7? ? ? ? 0.4? setosa
采用數(shù)據(jù)集iris 進(jìn)行分類(lèi),iris 數(shù)據(jù)集共有150行粗合,5列萍嬉,其中第5列為分類(lèi)變量,共有3種分類(lèi)情況隙疚,這個(gè)數(shù)據(jù)集可以看做150個(gè)樣本壤追,根據(jù)4個(gè)指標(biāo)進(jìn)行分類(lèi),最終分成了3類(lèi)
接下來(lái)調(diào)用randomForest 函數(shù)就行分類(lèi)
iris.rf <- randomForest(Species ~ ., data=iris, importance=TRUE, proximity=TRUE)
調(diào)用該函數(shù)時(shí)供屉,通過(guò)一個(gè)表達(dá)式指定分類(lèi)變量 Species 和對(duì)應(yīng)的數(shù)據(jù)集data 就可以了行冰,后面的importance 和 proximity 是計(jì)算每個(gè)變量的重要性和樣本之間的距離
分類(lèi)器構(gòu)建完畢之后溺蕉,首先看一下這個(gè)分類(lèi)器的準(zhǔn)確性
> print(iris.rf)
Call:
randomForest(formula = Species ~ ., data = iris, importance = TRUE,? ? ? proximity = TRUE)
? ? ? ? ? ? ? Type of random forest: classification
? ? ? ? ? ? ? ? ? ? Number of trees: 500
No. of variables tried at each split: 2
? ? ? ? OOB estimate of? error rate: 4%
Confusion matrix:
? ? ? ? ? setosa versicolor virginica class.error
setosa? ? ? ? 50? ? ? ? ? 0? ? ? ? 0? ? ? ? 0.00
versicolor? ? ? 0? ? ? ? 47? ? ? ? 3? ? ? ? 0.06
virginica? ? ? 0? ? ? ? ? 3? ? ? ? 47? ? ? ? 0.06
print 的結(jié)果中,OOB estimate of error rate 表明了分類(lèi)器的錯(cuò)誤率為4%悼做, Confusion matrix 表明了每個(gè)分類(lèi)的詳細(xì)的分類(lèi)情況疯特;
對(duì)于setosa 這個(gè)group而言,基于隨機(jī)森林算法的分類(lèi)器贿堰,有50個(gè)樣本分類(lèi)到了setosa 這個(gè)group, 而且這50個(gè)樣本和iris 中屬于setosa 這個(gè)group的樣本完全一致辙芍,所以對(duì)于setosa 這個(gè)group而言,分類(lèi)器的錯(cuò)誤率為0羹与;
對(duì)于versicolor 這個(gè)group而言故硅,基于隨機(jī)森林算法的分類(lèi)器,有47個(gè)樣本分類(lèi)到了versicolor 這個(gè)group, 3個(gè)樣本分類(lèi)到了virginica 這個(gè)group纵搁,有3個(gè)樣本分類(lèi)錯(cuò)誤吃衅,在iris 中屬于versicolor 這個(gè)group的樣本有50個(gè),所以對(duì)于versicolor 這個(gè)group而言腾誉,分類(lèi)器的錯(cuò)誤率為3/50 = 0.06 徘层;
對(duì)于virginica 這個(gè)group而言,基于隨機(jī)森林算法的分類(lèi)器利职,有3個(gè)樣本分類(lèi)到了versicolor 這個(gè)group, 47個(gè)樣本分類(lèi)到了virginica 這個(gè)group趣效,有3個(gè)樣本分類(lèi)錯(cuò)誤,在iris 中屬于virginica 這個(gè)group的樣本有50個(gè)猪贪,所以對(duì)于virginica這個(gè)group而言跷敬,分類(lèi)器的錯(cuò)誤率為3/50 = 0.06 ;
然后看一下樣本之間的距離
iris.mds <- cmdscale(1 - iris.rf$proximity, eig=TRUE)
通過(guò)調(diào)用cmdscale 函數(shù)進(jìn)行樣本之間的距離热押,proximity 是樣本之間的相似度矩陣西傀,所以用1減去之后得到樣本的類(lèi)似距離矩陣的一個(gè)矩陣
iris.mds 的結(jié)果如下
> str(iris.mds)
List of 5
$ points: num [1:150, 1:2] -0.566 -0.566 -0.566 -0.565 -0.565 ...
? ..- attr(*, "dimnames")=List of 2
? .. ..$ : chr [1:150] "1" "2" "3" "4" ...
? .. ..$ : NULL
$ eig? : num [1:150] 23.87 20.89 2.32 1.67 1.23 ...
$ x? ? : NULL
$ ac? ? : num 0
$ GOF? : num [1:2] 0.723 0.786
> head(iris.mds$points)
? ? ? ? [,1]? ? ? [,2]
-0.5656446 0.01611053
-0.5656904 0.01585927
-0.5656267 0.01654988
-0.5651292 0.01649026
-0.5653773 0.01576609
-0.5651923 0.01663060
在iris.mds 中points可以看做每個(gè)樣本映射到2維空間中的坐標(biāo),每一維空間是一個(gè)分類(lèi)特征桶癣,但是不是最原始的4個(gè)特征拥褂,而是由4個(gè)特征衍生得到的新的分類(lèi)特征,根據(jù)這個(gè)坐標(biāo)牙寞,可以畫(huà)一張散點(diǎn)圖饺鹃,得到每個(gè)樣本基于兩個(gè)分類(lèi)變量的分組情況
plot(iris.mds$points, col = rep(c("red", "blue", "green"), each = 50))
生成的圖片如下:
圖中不同分類(lèi)的樣本用不同的顏色標(biāo)注,可以看到基于兩個(gè)新的分類(lèi)特征间雀,樣本的分組效果還是很好的悔详,不同組的樣本明顯區(qū)分開(kāi)來(lái)
最后,在看一下4個(gè)特征雷蹂,每個(gè)特征的重要性
> iris.rf$importance
? ? ? ? ? ? ? ? ? setosa? versicolor? virginica MeanDecreaseAccuracy
Sepal.Length 0.027726158 0.0202591689 0.03688967? ? ? ? ? 0.028920613
Sepal.Width? 0.007300694 0.0006999737 0.01078650? ? ? ? ? 0.006093858
Petal.Length 0.331994212 0.3171074926 0.31762366? ? ? ? ? 0.319580655
Petal.Width? 0.332417881 0.3004615039 0.26540155? ? ? ? ? 0.296416932
? ? ? ? ? ? MeanDecreaseGini
Sepal.Length? ? ? ? 9.013793
Sepal.Width? ? ? ? ? 2.263645
Petal.Length? ? ? ? 44.436189
Petal.Width? ? ? ? 43.571706
?之前調(diào)用randomForest 函數(shù)時(shí),通過(guò)指定importance = TRUE 來(lái)計(jì)算每個(gè)特征的importance , 在 iris.rf$importance 矩陣中杯道,有兩個(gè)值是需要重點(diǎn)關(guān)注的MeanDecreaseAccuracy 和 ?MeanDecreaseGini
我們還可以利用
varImpPlot(iris.rf, main = "Top 30 - variable importance")
嵌欧嘶停總結(jié):以上介紹的主要是安裝randomForest包以及調(diào)用官網(wǎng)的例子來(lái)運(yùn)用這個(gè)包责蝠。更深入的了解隨機(jī)森林包還需要在實(shí)際使用中進(jìn)一步深入。