所需packages:rpart、rattle
library(rpart)
library(rattle)
data <- na.omit(read.csv("E:/Dataset/nonchange_adult.csv"))
讀入資料,這裡使用的是UCI Machine Learning Repository上的Adult資料集
一共有14個Input和一個Output資料
data <- subset(data, select =-c(native_country))
刪去不想要的欄位,select = -c(想刪除的欄位)
也可使用select = c(想要的欄位)
index <- sample(2, nrow(data), replace = TRUE, prob=c(0.7,0.3))
train <- data[index==1,]
test <- data[index==2, ]
將data分為70%訓練集與30%測試集
train_real <- subset(train, select = income)
train_predict <- subset(train, select = -income)
test_real<- subset(test, select = income)
test_predict<- subset(test, select = -income)
train_real和test_real為Output,先取出來方便等等計算錯誤率
predict的部分為用來放入Model做預測的資料(因為要預測不需要Output,所以將income那欄刪掉)
result <- rpart(income~., data = train, method="class")
建構決策樹,第一個逗號前為預測的公式,在這邊就是利用全部其他column來預測income這欄
data則填入train的資料
而因為這個資料集想實現的是分類問題,所以method選擇class,其他還有poisson、exp、anova可選
詳細部分可參考rpart的介紹
fancyRpartPlot(result)
畫出剛剛建構的決策樹(如下圖),這個套件畫出來蠻容易懂的,來自rattle package
pred_train <- predict(result, train_predict, type="class")
pred_test <- predict(result, test_predict, type="class")
將資料放入Model進行預測
pred_train <- round(as.numeric(pred_train))-1
pred_test <- round(as.numeric(pred_test))-1
將預測的值做一下處理,因為預測出來的值並不是數值型態的,要使用as.numeric轉型
後面的-1是因為他將類別表示為1和2,可是資料裡面是0和1(這部分我也不太了解為什麼...)
train_real <- as.numeric(unlist(train_real))
test_real <- as.numeric(unlist(test_real))
cmatrix_train <- table(pred_train, train_real)
cmatrix_test <- table(pred_test, test_real)
cmatrix_train <- as.vector(cmatrix_train)
cmatrix_test <- as.vector(cmatrix_test)
將real data轉為numeric並unlist(才能放進table
confuse matrix為一種評斷預測的準確度的方法
R語言有提供他的套件,但是我這邊是直接寫了一個Function,所以才那麼多資料型態的轉換,讓他能Fit我的Function
FM <- function(matrix){ # count Precision,recall,Fmeasure
accruracy <- (matrix[1]+matrix[4])/sum(matrix)
precision <- matrix[4]/(matrix[2]+matrix[4])
recall <- matrix[4]/(matrix[3]+matrix[4])
Fmeasure <- 2 * precision * recall / (precision + recall)
Flist <- list("accuracy" = accruracy, "precision" = precision,"recall" = recall, "Fmeasure" = Fmeasure)
return(Flist)
}
F_train <- FM(cmatrix_train)
F_test <- FM(cmatrix_test)
將matrix放入function運算,會算出accuracy、precision、recall、F1值
F_train F_test accuracy 0.8414128 0.8402188 precision 0.8547849 0.8528121 recall 0.9501131 0.9519145 Fmeasure 0.8999316 0.8996423
這就是本次的結果~ 準確度高達84%~
留言列表