顯示具有 rocr 標籤的文章。 顯示所有文章
顯示具有 rocr 標籤的文章。 顯示所有文章

2013年8月10日 星期六

Data mining with Rattle – ROC curve (SVM and NN)

# 範例說明 R圖形化使用者介面 rattle 套件 執行 ROC curve 比較


步驟 1
安裝並執行 rattle 套件-資料探勘使用者介面
install.packages(“rattle”)
library(rattle)
rattle()

步驟 2
匯入kernlab套件的資料集spam, 一般採用 spam {kernlab} 表示, 步驟如下:

Data \ Source: 選取 Library \ Data Name: 選取 spam:kernlab:Spam E-mail Database \ 執行.

匯入 spam 資料結果, 此為垃圾郵件資料集, 其中第58個變數是目標變數且為類別型資料, R中屬於因子(factor)資料物件, 在最下列訊息區顯示全部有 4601筆觀測值, 58個輸入變數, 可使用分類模型.

步驟 3
Rattle Support Vector Machines 方法, 採用 kernlab 套件的ksvm方法, R console 視窗中輸入以下指令可查詢其使用說明.
library(kernlab)
?ksvm

Model \ Type 選取 SVM \ Kernel 採用預設值 Radial Basis (rbfdot) \ 執行.

步驟 4
使用 Neural Network 方法, Rattle 採用 nnet 套件的nnet 方法, 該方法採用Feed-forward neural networks 且為一個隱藏層 (hidden layer), 預設節點數是十個.
Model \ Type 選取 Neural Net \ 執行.

步驟 5
模式比較主要採用 ROC curve 方法.

Rattle 會針對之前已完成的模型進行效益評估.

Evaluate \ Type: 選取 ROC \ Model: SVM , Neural Net 打勾 \ 按 執行.

步驟 6
考慮實際結果有二種情形(Yes, No), ROC curve視窗中x軸表示 False Positive (FP) rate (實際為N, 但預模型分類為Y, 此時FP愈小愈好), y軸表示 TP rate (實際為Y, 且預模型分類為Y, 此時FP愈大愈好), 因此, ROC曲線愈偏向左上角愈好,即曲線以下面積較大者較佳. 由圖形可知 ksvm 較偏向於左上角位置, 因此採用 svm 較佳。

下載說明: r-rattle-ROCcurve.pdf
# end

2013年1月4日 星期五

ROCR package - ROC curve

# Updated: 2025.8.1

# 數值模型績效指標
# MSE, RMSE, MAE




















# 類別模型績效指標
ROC (Receiver Operating Characteristics) curve 可用於分類效益評估,包括基本概念介紹。

 1. Introduction
 2. Create an ROC curve
 3. Area Under an ROC Curve (AUC)
 4. R-package “ROCR” demo
 5. References

檔案:roc_introduction.pdf
頁數:16
大小:小於1MB

ROC package 使用說明,範例包括200筆資料。
檔案:roc_r_example.pdf
頁數:4
大小:小於1MB

# end

# 2020.3.23 中英文對照,Kappa統計量更新:

# 分類預測模型評估-混淆矩陣 (Confusion matrix) -----
# 混淆矩陣可用於監督式分類模型評估

#          | 真實P類別 真實N類別
# *******************************
# 預測P類別 | TP真陽數  FP假陽數
# 預測N類別 | FN假陰數  TN真陰數 
# *******************************
#           | P       N

# 1.TPR(True positive rate) 真陽性率, 愈大愈好 -----
# =TP/(TP+FN)
# =TP/P 
# =Sensitivity 靈敏度
# =Recall 召回率
# =Probability of detection
# =Power
# 實際為陽性的樣本中,判斷為陽性的比例。
# 例如真正有生病的人中,被醫院判斷為有生病者的比例。

# 2.FPR(False positive rate) 假陽性率, 愈小愈好 -----
# =FP/(FP+TN)
# =FP/N
# =Fall-out
# =Probability of false alarm
# =Type I error 型一誤差(α)
# =1 - Specificity

# 3.FNR(False negative rate) 假陰性率 -----
# =FN/(TP+FN)
# =FN/P
# =Miss rate
# =Type II error 型二誤差(β)
# =1 - Sensitivity

# 4.TNR(True negative rate) 真陰性率 -----
# =TN/(FP+TN)
# =TN/N
# =Specificity 特異度
# =Selectivity
# 實際為陰性的樣本中,判斷為陰性的比例。
# 例如真正未生病的人中,被醫院判斷為未生病者的比例。

# Precision 精確度 -----
# =TP/(TP+FP)

# Accuracy 正確率(準確率) -----
# =(TP+TN)/(TP+FN+FP+TN)
# =(TP+TN)/(P+N)

# 混淆矩陣計算須有真實資料(實際資料),預測資料(分類器)

# 使用 caret 套件計算混淆矩陣, Kappa統計量

library(caret)

lvs <- c("normal", "abnormal")

truth <- factor(rep(lvs, times = c(86, 258)), 
                levels = rev(lvs))

pred <- factor(c(rep(lvs, times = c(54, 32)),
                 rep(lvs, times = c(27, 231))),
               levels = rev(lvs))

xtab <- table(pred, truth) # table(列, 行)

xtab # class: table

confusionMatrix(xtab)

# Accuracy : 0.8285
(231+54)/sum(xtab)

# Kappa : 0.5336

# Kappa統計量 -----
# https://stats.stackexchange.com/questions/82162/cohens-kappa-in-plain-english

# Kappa統計量是將觀察準確度(機器學習, 本例為行)與期望的準確度(隨機,表示實際值, 本例為列)進行一致性比較的指標, 一般是愈大愈好.

#       Cats Dogs   Total
# Cats  | 10 | 7  | 17
# Dogs  | 5  | 8  | 13
# ***********************
# Total | 15 | 15 | 30

# 行: 觀察的準確度 observed accuracy
(10 + 8) / 30 # 0.6

# 列: 期望的準確度 expected accuracy
(10+5) * 17/30 # for Cats=8.5
(7+8)  * 13/30 # for Dogs=6.5
(8.5 + 6.5)/30 # Expected Accuracy=0.5

# Kappa = (observed accuracy - expected accuracy)/(1 - expected accuracy)
(0.6 - 0.5)/(1-0.5) # kappa=0.2

# kappa Results
# > 0.75     excellent
# 0.60~0.74 good
# 0.4~0.59  fair
# < 0.4      poor

# confusion matrix
# kappa
# caret套件