R 軟體裡的多變量決策樹: 預測多個反應變數

除了類神經網路之外,絕大部分的決策樹與其他分類技術通常都只能預測「1 個」反應變數(response variable)。

但是,R 軟體裡面其實有些套件可以預測多個反應變數,例如 party 套件裡面的 ctree (conditional inference tree) 與 mvpart 套件裡面的 mvpart 函數。


1. party 套件中的 ctree example:

?View Code LANGUAGE
library(party)
 
result1 = ctree(Sepal.Length + Sepal.Width ~ .,data=iris)
plot(result1)
Ypred1 = predict(result1)
class(Ypred1)
# [1] "list"
 
head(Ypred1,3)
# [[1]]
# [1] 5.006 3.428
#
# [[2]]
# [1] 5.006 3.428
#
# [[3]]
# [1] 5.006 3.428
 
# 反應變數可以混合分類變數(Species)與數值變數(Sepal.Length)
result2 = ctree(Species + Sepal.Width ~ .,data=iris)
Ypred2 = predict(result2)
class(Ypred2)
# [1] "list"
 
head(Ypred2,3)
# 前三個值 1,0,0 是 Species 三個分類的事後機率, 最後一個值是 Sepal.Length 的預測值
# [[1]]
# [1] 1.000000 0.000000 0.000000 3.713636
#
# [[2]]
# [1] 1.000000 0.000000 0.000000 3.203571
# 
# [[3]]
# [1] 1.000000 0.000000 0.000000 3.203571

2. 已從 CRAN 網站被移除的 mvpart 套件:

(1) 先下載 mvpart 套件原始碼: 到 https://cran.r-project.org/src/contrib/Archive/mvpart/ 下載最後一版 mvpart_1.6-2.tar.gz
(2) 安裝 Rtools 軟體: https://cran.r-project.org/bin/windows/Rtools/
(3) 在 R 軟體執行以下指令(請修改下載檔案的位置):
install.packages(“d:/R/mvpart_1.6-2.tar.gz”, repos = NULL, type = “source”)
(4) Example:

?View Code LANGUAGE
library(mvpart)
# 只能預測多個數值反應變數
result3 = mvpart(cbind(Sepal.Length,Sepal.Width) ~ .,data=iris)
plot(result3)
Ypred3 = predict(result3)
class(Ypred3)
# [1] "matrix"
 
head(Ypred3,3)
 
#       [,1]  [,2]
# [1,] 5.006 3.428
# [2,] 5.006 3.428
# [3,] 5.006 3.428