R語(yǔ)言實(shí)現(xiàn)隨機(jī)森林(randomForest)分析

嵌牛導(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)一步深入。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萎庭,一起剝皮案震驚了整個(gè)濱河市霜医,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驳规,老刑警劉巖肴敛,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異吗购,居然都是意外死亡医男,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)捻勉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)镀梭,“玉大人,你說(shuō)我怎么就攤上這事踱启”ㄕ耍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵埠偿,是天一觀的道長(zhǎng)透罢。 經(jīng)常有香客問(wèn)我,道長(zhǎng)冠蒋,這世上最難降的妖魔是什么羽圃? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮浊服,結(jié)果婚禮上统屈,老公的妹妹穿的比我還像新娘。我一直安慰自己牙躺,他們只是感情好愁憔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著孽拷,像睡著了一般吨掌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脓恕,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天膜宋,我揣著相機(jī)與錄音,去河邊找鬼炼幔。 笑死秋茫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乃秀。 我是一名探鬼主播肛著,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼圆兵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了枢贿?” 一聲冷哼從身側(cè)響起殉农,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎局荚,沒(méi)想到半個(gè)月后超凳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耀态,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年轮傍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茫陆。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡金麸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出簿盅,到底是詐尸還是另有隱情挥下,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布桨醋,位于F島的核電站棚瘟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喜最。R本人自食惡果不足惜偎蘸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞬内。 院中可真熱鬧迷雪,春花似錦、人聲如沸虫蝶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)能真。三九已至赁严,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粉铐,已是汗流浹背疼约。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蝙泼,地道東北人程剥。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像汤踏,于是被迫代替她去往敵國(guó)和親织鲸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哨免,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容