近期 ggplot2 套件作者- Hadley Wickham 即將出版 進階R程式設計(Advanced R programming) 書籍並提供免費線上參考資料,書本除了第一章簡介之外,其他包括:
1. Foundations
2. Functional programming
3. Metaprogramming
4. Performant code
等四大部份. 其中 Memory 有提供 R 記憶體管理議題.
LINK:
http://adv-r.had.co.nz/
2013年11月15日 星期五
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 方法.
參考:
ROC簡介 https://github.com/rwepa/DataDemo/blob/master/roc_introduction.pdf
ROCR套件說明 https://github.com/rwepa/DataDemo/blob/master/roc_r_example.pdf
ROC簡介 https://github.com/rwepa/DataDemo/blob/master/roc_introduction.pdf
ROCR套件說明 https://github.com/rwepa/DataDemo/blob/master/roc_r_example.pdf
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
R程式: roc_r_example.R https://github.com/rwepa/DataDemo/blob/master/roc_r_example.R
# end
# 2020.3.23 中英文對照,Kappa統計量更新:
# 分類預測模型評估-混淆矩陣 (Confusion matrix) -----
# 混淆矩陣可用於監督式分類模型評估
# 2020.3.23 中英文對照,Kappa統計量更新:
# 分類預測模型評估-混淆矩陣 (Confusion matrix) -----
# 混淆矩陣可用於監督式分類模型評估
# 2025.10.22 更新
# | 真實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 精確率(精確度) -----
# P類別精確度=TP/(TP+FP)
# N類別精確度=TN/(FN+TN)
# Accuracy 正確率(準確率) -----
# =(TP+TN)/(TP+FN+FP+TN)
# =(TP+TN)/(P+N)
# F1-score 同時考慮 Precision 精確率與 Recall 召回率
# F1-score = 2/[(1/Precision)+(1/Recall)]
# 混淆矩陣計算須有真實資料(實際資料),預測資料(分類器)
# 使用 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套件
# 使用 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套件
訂閱:
文章 (Atom)



