Data Description
大家小時候都打過三國志,我們搜集了150個武將,讓我們來看看根據決策樹的法則,到底要被稱為將軍或軍師級的人物,應該具備什麼特質?
1.設定所需的函式庫(libraries)以及載入資料
install.packages("dplyr")
install.packages("ggplot2")
install.packages("rpart")
install.packages("rpart.plot")
install.packages("tree")
library(dplyr)
library(ggplot2)
library(rpart)
library(rpart.plot)
library(tree)
setwd("/media/hsusir/DATA/Rdata Practice/09Algorithm/Three_Kingdoms/")
dat1 <- read.csv("./Three-UTF8-1.csv",header=TRUE, sep=",")
2.基本敘述性統計
nrow(dat1)
## [1] 150
head(dat1)
## 名稱 序列號碼 統御 武力 智慧 政治 魅力 忠誠 國別 出身 身份
## 1 夏侯惇 1 94 96 62 56 78 99 1 1 將軍
## 2 許褚 2 83 97 26 16 68 89 1 1 將軍
## 3 荀攸 3 60 38 94 91 80 86 1 1 軍師
## 4 荀彧 4 64 35 97 90 84 80 1 1 軍師
## 5 張郃 5 88 93 61 54 62 85 1 1 將軍
## 6 程昱 6 82 25 91 80 74 89 1 1 軍師
dat1[sample(1:nrow(dat1),20),]
## 名稱 序列號碼 統御 武力 智慧 政治 魅力 忠誠 國別 出身 身份
## 90 丁奉 90 68 80 64 72 71 79 3 1 武官
## 24 鄧艾 24 93 85 93 81 75 82 1 1 將軍
## 27 華歆 27 26 45 66 75 32 80 1 1 文官
## 127 曹丕 127 90 85 64 80 80 30 1 2 將軍
## 105 黃祖 105 60 68 50 27 32 85 5 1 武官
## 115 李肅 115 38 54 67 68 41 74 6 1 文官
## 94 文醜 94 85 96 20 12 57 87 4 1 將軍
## 133 劉表 133 70 65 69 74 68 85 5 3 文官
## 81 呂範 81 26 30 71 76 74 78 3 1 文官
## 99 沮授 99 78 53 87 88 80 93 4 1 軍師
## 47 關羽 47 100 104 82 65 96 100 2 1 將軍
## 22 曹真 22 79 71 61 50 72 91 1 1 將軍
## 6 程昱 6 82 25 91 80 74 89 1 1 軍師
## 19 郭嘉 19 42 27 99 92 89 92 1 1 軍師
## 18 夏侯楙 18 26 47 32 40 25 80 1 1 武官
## 39 楊修 39 32 26 93 83 50 70 1 1 軍師
## 50 趙雲 50 96 107 85 80 95 96 2 1 將軍
## 82 凌統 82 70 81 58 56 62 87 3 1 將軍
## 21 曹植 21 20 14 89 75 82 75 1 1 文官
## 53 簡雍 53 39 39 70 76 77 85 2 1 文官
summary(dat1)
## 名稱 序列號碼 統御 武力
## 丁奉 : 1 Min. : 1.00 Min. : 19.00 Min. : 13.00
## 于禁 : 1 1st Qu.: 38.25 1st Qu.: 56.00 1st Qu.: 45.00
## 公孫度 : 1 Median : 75.50 Median : 72.00 Median : 68.50
## 公孫瓚 : 1 Mean : 75.50 Mean : 67.56 Mean : 64.79
## 典韋 : 1 3rd Qu.:112.75 3rd Qu.: 83.00 3rd Qu.: 84.00
## 凌統 : 1 Max. :150.00 Max. :100.00 Max. :107.00
## (Other):144
## 智慧 政治 魅力 忠誠
## Min. : 17.00 Min. : 12.00 Min. :10.00 Min. : 0.00
## 1st Qu.: 54.25 1st Qu.: 46.25 1st Qu.:56.00 1st Qu.: 75.00
## Median : 68.50 Median : 67.50 Median :70.00 Median : 84.50
## Mean : 67.27 Mean : 62.44 Mean :67.54 Mean : 80.17
## 3rd Qu.: 84.00 3rd Qu.: 81.75 3rd Qu.:81.75 3rd Qu.: 89.75
## Max. :100.00 Max. :102.00 Max. :99.00 Max. :100.00
##
## 國別 出身 身份
## Min. :1.000 Min. :1.000 將軍:58
## 1st Qu.:1.000 1st Qu.:1.000 文官:44
## Median :2.000 Median :1.000 武官:19
## Mean :3.127 Mean :1.253 軍師:29
## 3rd Qu.:5.000 3rd Qu.:1.000
## Max. :7.000 Max. :3.000
##
3.三國 Disicion Tree
fit1 <- rpart(身份~武力+政治+統御+智慧+魅力,data=dat1)
#fit1 <- tree(身份~武力+政治+統御+智慧+魅力,data=dat1)
prp(fit1,col=2,box.col="lightgray",shadow.col="gray")
4.計算混淆矩陣
result = rpart( 身份~武力+政治+統御+智慧+魅力, data=dat1)
Y = dat1$身份
Ypred = predict(result, type="class")
t = table(Y, Ypred) ## 同時顯示 t 的內容
cat("預測正確率= ", sum(diag(t))/sum(t), "\n" )
## 預測正確率= 0.8933333
5.Confusion Matrix Function
confmatrix = function(Y,Ypred)
{
tab = table(Y,Ypredict=Ypred)
print(tab)
p = sum(diag(t))/sum(t)*100
cat("\n\n預測正確率 = ",p,"% \n")
}
confmatrix(dat1$身份, Ypred)
## Ypredict
## Y 將軍 文官 武官 軍師
## 將軍 58 0 0 0
## 文官 4 36 3 1
## 武官 3 0 16 0
## 軍師 2 3 0 24
##
##
## 預測正確率 = 89.33333 %