作者clsmbstu ()
看板R_Language
標題[問題] 在SVM取得分類界線(decision boundary)
時間Wed Jan 11 11:43:45 2017
[問題類型]:
程式諮詢(我想用R做某件事情,但是我不知道要怎麼用R寫出來)
[軟體熟悉度]:
使用者(已經有用R做過不少作品)
[問題敘述]:
我有一個類別變數,有四個levels,
表達該列的受試者為年輕或老年、男性或女性。(YM、YF、OM、OF)
另有六個從0到8的測驗九點量表分數(可以想成是同一個測驗裡的不同題)。
我想達到的目的是讓SVM學習如何分辨這四個群體的表現,
進而告訴我這四個群體的差別(decision boundary)在哪。
更精確地說,我希望有個東西可以量化這四個群組的表現,
例如老年男性在這六題較其它三組給出較高的分數,
老年女性只在第一題稍高但其他都偏低,等等。
原本MANOVA再做事後分析應該就能解決這個問題,
但是六題每一題的分數在受試者間給出的都不是常態分佈,
所以目前嘗試用SVM解決...
或是大家有更好的辦法嗎?
gamma和cost的選擇已經調整過,選擇表現最佳者,
cross-validation也有做,
機器學習的結果已經確認是有效的,但我即使用str去看做出來的模型,
還是不知道decision boundary放在哪裡。
[程式範例]:
svm.model <- svm(Subject_AgeSex ~ X1 + X2 + X3 + X4 + X5 + X6,
data = train.data,
scale = FALSE, cost = 64, gamma = 0.05, cross = 10)
[環境敘述]:
R version 3.3.2 (2016-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X El Capitan 10.11.6
locale:
[1] zh_TW.UTF-8/zh_TW.UTF-8/zh_TW.UTF-8/C/zh_TW.UTF-8/zh_TW.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggplot2_2.2.0 e1071_1.6-7
loaded via a namespace (and not attached):
[1] colorspace_1.3-2 scales_0.4.1 assertthat_0.1 lazyeval_0.2.0
[5] plyr_1.8.4 class_7.3-14 tools_3.3.2 gtable_0.2.0
[9] tibble_1.2 Rcpp_0.12.8 grid_3.3.2 munsell_0.4.3
[關鍵字]:
SVM
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.121.113
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1484106227.A.28D.html
※ 編輯: clsmbstu (140.112.121.113), 01/11/2017 13:22:26
※ 編輯: clsmbstu (140.112.121.113), 01/11/2017 13:24:49
→ clsmbstu: 編輯內容:補充問題敘述與分析目的 01/11 13:25
→ andrew43: 用predict(svm_model, dt) 其中 dt 中先放很密的數列 01/11 15:10
這樣的話,我只能不斷透過嘗試去尋找它在每一種狀況下的邊界囉?
例如說:
newdata <- as.data.frame(matrix(rep(seq(0, 8, 0.01), times = 6),
nrow = length(seq(0, 8, 0.01)), ncol = 6))
names(newdata) <- paste("X", 1:6, sep = "")
predict(svm.model, newdata)
這種狀況是X1 ~ X6同步變動,
如果想看其中之一/之二比較高的狀況,
就要自行調整newdata的內容,我有理解錯嗎?謝謝!
※ 編輯: clsmbstu (140.112.121.113), 01/11/2017 15:50:18
→ andrew43: 我覺得是這樣。和你一樣在str(svm_model)找不到解。 01/11 15:51
推 vennu: 用mds降維,然後把4類結果用不同顏色標上去,再把sv畫上去 01/18 18:00
→ vennu: 。試試…… 01/18 18:00