跳转到内容

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)
   }
华夏公益教科书