跳轉到內容

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)
   }
華夏公益教科書