R 中的資料探勘演算法/包/RWeka/Weka 分類樹
R 對 Weka 迴歸和分類樹學習器的介面。
J48(formula, data, subset, na.action, control = Weka_control(), options = NULL)
LMT(formula, data, subset, na.action, control = Weka_control(), options = NULL)
M5P(formula, data, subset, na.action, control = Weka_control(), options = NULL)
DecisionStump(formula, data, subset, na.action, control = Weka_control(), options = NULL)
formula,要擬合的模型的符號描述。
data,一個可選的資料框,包含模型中的變數。
subset,一個可選的向量,指定在擬合過程中要使用的觀測值子集。
na.action,一個函式,指示當資料包含 NA 時應該發生什麼。
control,一個 Weka_control 類的物件,用於將選項傳遞給 Weka 學習器。
options,一個命名的進一步選項列表,或 NULL(預設)。
有一個用於從擬合的模型中預測的 predict 方法,以及一個基於 evaluate_Weka_classifier 的 summary 方法。對於擬合的二元 Weka_tree,還有一個 plot 方法,透過包 party 提供的功能實現。這將 Weka_tree 轉換為 BinaryTree,然後簡單地呼叫此類的 plot 方法(參見 plot.BinaryTree),並對預設引數進行一些修改。如果 Weka 分類樹學習器實現了“Drawable”介面(即提供了 graph 方法),則可以使用 write_to_dot 建立樹的 DOT 表示,以便透過 Graphviz 或 Rgraphviz 包進行視覺化。
J48 生成未修剪或修剪的 C4.5 決策樹 (Quinlan, 1993)。
LMT 實現“Logistic Model Trees” (Landwehr, 2003; Landwehr 等人,2005)。
M5P(其中“P”代表“prime”)使用 M5' 演算法生成 M5 模型樹,該演算法在 Wang & Witten (1997) 中引入,並透過 Quinlan(1992) 增強了原始的 M5 演算法。
DecisionStump 實現決策樹樁(只有一個拆分的樹),這些樹樁經常用作元學習器(如 Boosting)的基礎學習器。
模型公式應僅使用“+”和“-”運算子分別表示要包含或不包含的變數。引數選項允許進一步自定義。當前,選項模型和例項(或這些選項的部分匹配)被使用:如果設定為 TRUE,則模型框架或相應的 Weka 例項分別包含在擬合的模型物件中,這可能會加快隨後對該物件的計算。預設情況下,兩者都不包含。
繼承自 Weka_tree 和 Weka_classifiers 類的列表,包含以下元件:
classifier,一個對 Java 物件的引用(jobjRef 類),該物件是透過應用 Weka
buildClassifier,方法使用給定的控制選項構建指定的模型。
predictions,一個數值向量或因子,包含訓練例項的模型預測(對構建的分類器和每個例項呼叫 Weka classifyInstance 方法的結果)。
call,匹配的呼叫。
m1 <- J48(Species ~ ., data = iris)
summary(m1)
table(iris$Species, predict(m1))
if(require("party", quietly = TRUE)) plot(m1)
write_to_dot(m1)
library("Rgraphviz")
ff <- tempfile()
write_to_dot(m1, ff)
plot(agread(ff))
DF2 <- read.arff(system.file("arff", "contact-lenses.arff", package = "RWeka"))
m2 <- J48(`contact-lenses` ~ ., data = DF2)
table(DF2$`contact-lenses`, predict(m2))
if(require("party", quietly = TRUE)) plot(m2)
DF3 <- read.arff(system.file("arff", "cpu.arff", package = "RWeka"))
m3 <- M5P(class ~ ., data = DF3)
if(require("party", quietly = TRUE)) plot(m3)
DF4 <- read.arff(system.file("arff", "weather.arff", package = "RWeka"))
m4 <- LMT(play ~ ., data = DF4)
table(DF4$play, predict(m4))
if(require("mlbench", quietly = TRUE) && require("party", quietly = TRUE)) {
data("PimaIndiansDiabetes", package = "mlbench")
m5 <- J48(diabetes ~ ., data = PimaIndiansDiabetes, control = Weka_control(R = TRUE))
plot(m5)
}