close

 

 

再來一個應用情境: 我們要準備各個分類(汽車、運動、科技)的數篇新聞集合,然後比對計算特徵關鍵字字詞頻率向量。

 

資料來源: http://enginebai.logdown.com/posts/241677/bayes-classification

BAYES  

(P:汽車  S:運動 T:科技)

 

 

> #載入套件 貝式分類
> library(e1071)

#去除 變數:新聞
> bayes <- bayes[,-c(1)]

BAYES(去變數)  

 

> colnames(bayes) <- c("class","benz","horse","baseketball","run","phone","app")   --欄位名稱轉成英文
>
> bayes$class <- as.factor(bayes$class)     --分類class轉成因子


> str(bayes)

Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 7 obs. of 7 variables:
$ class : Factor w/ 3 levels "P","S","T": 1 1 2 2 3 2 3      <<-因子
$ benz : num 15 35 5 1 10 2 1
$ horse : num 25 40 1 5 5 1 1
$ baseketball: num 1 1 35 32 7 20 1
$ run : num 5 3 50 15 1 22 1
$ phone : num 8 3 1 1 2 1 10
$ app : num 3 2 1 1 30 1 8

 

> n <- nrow(bayes)
> n
[1] 7
> set.seed(20170703)
> x_idx <- sample(seq_len(n),size=round(0.7*n))
> bayestraindata <- bayes[x_idx,] --訓練資料
> bayestestdata <-bayes[-x_idx,] --測試資料

 

# 建立模型
> bayesM <- naiveBayes(class ~ ., data = bayestraindata)

> results <- predict(bayesM, bayestestdata)

 

#評估

> cm <- table(x = bayestestdata$class, y = results ,dnn = c("實際","預測"))
> cm
預測
實際 P S T
P 0 0 1
S 0 1 0
T 0 0 0

有一個實際是P但被預測成T

#準確率 =0.5

> accuracy <- sum(diag(cm)) / sum(cm)
> accuracy
[1] 0.5

 

來一筆測試資料:

> newdata <- data.frame(benz=0,horse=20,baseketball=50,run=5,phone=5,app=1)
> newdata
benz horse baseketball run phone app         <<--提高運動類的字詞頻率
1 0 20 50 5 5 1
>
> predict(bayesM,newdata = newdata)   
[1] S
Levels: P S T

分類結果是:S (運動)

好像滿準的 哈哈 

 

這只是嘗試其他應用情境,資料量有點少  就看看囉~~

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 to52016 的頭像
    to52016

    Eason [資料科學//Python學習/資料庫] & [拍片&剪片]

    to52016 發表在 痞客邦 留言(0) 人氣()