Liz's Blog

就是要學R #15:機器學習之決策樹、隨機森林實作篇

| Comments

機器學習這幾篇比較有既定的模式,根據不同套件來安裝並載入建造模式。即使統計觀念很不相同,但在R的操作上,都有類似的節奏。只是在不同模型裡,哪一種是比較好的工具,常常是一種藝術。

Udemy
課程名稱:Data Science and Machine Learning Bootcamp with R
講師:Jose Portilla

分類演算法中,上一篇學到KNN,這篇是決策樹、隨機森林。推薦可以先觀看這篇入門。

1.安裝並載入決策樹套件rpart。

install.packages('rpart')
library(rpart)

2.使用kyphosis駝背資料集來做決策樹的練習,共有81個樣本,4個變數,紀錄的是脊椎手術後是否還存在駝背。

str(kyphosis)
head(kyphosis)

3.檢查樹模型的結果。printcp()是用表格的方式呈現。

tree <- rpart(Kyphosis ~ . , method='class', data= kyphosis)
printcp(tree)

4.決策樹視覺化。內建決策樹的視覺化工作看起來不是這麼好看,所以安裝並載入rpart.plot套件。

plot(tree, uniform=TRUE, main="Main Title")
text(tree, use.n=TRUE, all=TRUE)

install.packages('rpart.plot')
library(rpart.plot)
prp(tree)

5.Random Forests(隨機森林)可以藉由產生大量經過隨機的樹來加強預測的準確性。可以參考這篇隨機森林Random Forest

#安裝並載入randomForest套件
install.packages('randomForest')
library(randomForest)

#使用randomForest()建造模型,從結果中可以到19.75%錯誤率。
model <- randomForest(Kyphosis ~ .,   data=kyphosis)
print(model)

#利用importance()函式來看每個指標的重要性
importance(model)

1.使用ISLR套件中的College資料集。共有777樣本數,18個變數。要練習透過變數來分類是私立大學還是公立大學。

library(ISLR)
head(College)
df<-College

2.探索資料。

library(ggplot2)

#利用散佈圖來看食宿費用、畢業率及私立與否分佈。
ggplot(df,aes(Room.Board,Grad.Rate)) + geom_point(aes(color=Private))

#利用直方圖來看全職大學生和私立與否的分佈情形。
ggplot(df,aes(F.Undergrad)) + geom_histogram(aes(fill=Private),color='black',bins=50)

#利用直方圖來看畢業率和私立與否的分佈。發現有一個畢業率超過100%的奇怪數字。
ggplot(df,aes(Grad.Rate)) + geom_histogram(aes(fill=Private),color='black',bins=50)

#利用subset()來找出是哪個學校,並把畢業率改成100%。
subset(df,Grad.Rate > 100)
df['Cazenovia College','Grad.Rate'] <- 100

3.訓練測試組資料

library(caTools)
set.seed(101) 
sample = sample.split(df$Private, SplitRatio = .70)
train = subset(df, sample == TRUE)
test = subset(df, sample == FALSE)

4.利用rpart()函式來預測是否為私立大學

library(rpart)
tree <- rpart(Private ~.,method='class',data = train)
tree.preds <- predict(tree,test)

#將tree.preds轉成資料框架,如果機率>=0.5,表示是私立大學,否則為公立大學。
tree.preds <- as.data.frame(tree.preds)
joiner <- function(x){
    if (x>=0.5){
        return('Yes')
    }else{
        return("No")
    }
}
tree.preds$Private <- sapply(tree.preds$Yes,joiner)
head(tree.preds)

#幫決策樹模型建立confusion matrix
table(tree.preds$Private,test$Private)

#畫出決策術模型
library(rpart.plot)
prp(tree)

5.使用隨機森林建模。

library(randomForest)
rf.model <- randomForest(Private ~ . , data = train,importance = TRUE)
rf.model$confusion
rf.model$importance

6.預測

p <- predict(rf.model,test)
table(p,test$Private)

【延伸閱讀】
1.就是要學R #1:Basic 基礎篇
2.就是要學R #2:Matrix 矩陣篇
3.就是要學R #3:Data Frame 資料框架篇
4.就是要學R #4:List 列表篇
5.就是要學R #5:Import & Export 匯入匯出篇(csv & excel)
6.就是要學R #6:Import & Export 匯入匯出篇(SQL & web scraping)
7.就是要學R #7:R programming 基礎篇
8.就是要學R #8:R Programming 進階篇
9.就是要學R #9:資料前處理篇(dplyr、tidyr)
10.就是要學R #10:ggplot2幫你搞定資料視覺化
11.就是要學R #11:資料視覺化應用篇(ggplot2、Plotly)
12.就是要學R #12:機器學習之線性迴歸實作篇
13.就是要學R #13:機器學習之邏輯迴歸實作篇
14.就是要學R #14:機器學習之K Nearest Neighbor(KNN)實作篇
15.就是要學R #15:機器學習之決策樹、隨機森林實作篇
16.就是要學R #16:機器學習之Support Vector Machine(SVM)實作篇
17.就是要學R #17:機器學習之K Means Clustering實作篇
18.就是要學R #18:機器學習之自然語言處理(NLP)實作篇
19.就是要學R #19:機器學習之類神經網路(Neural Net)實作篇

Comments

comments powered by Disqus