问题描述
在这种情况下,我在成本敏感分类器"功能中使用了RWeka软件包和J48.我知道使用"party"软件包可以绘制普通的J48树,但不确定如何使用CSC输出进行绘制.
In this case I'm using the RWeka package and J48 within the Cost Sensitive Classifier function. I know with the package "party" I can plot a normal J48 tree, but not sure how to get a plot with the CSC output.
library(RWeka)
csc <- CostSensitiveClassifier(Species ~ ., data = iris,
control = Weka_control(`cost-matrix` = matrix(c(0,10, 0, 0, 0, 0, 0, 10, 0),
ncol = 3),
W = "weka.classifiers.trees.J48",
M = TRUE))
csc
CostSensitiveClassifier using minimized expected misclasification cost
weka.classifiers.trees.J48 -C 0.25 -M 2
Classifier Model
J48 pruned tree
------------------
Petal.Width <= 0.6: setosa (50.0)
Petal.Width > 0.6
| Petal.Width <= 1.7
| | Petal.Length <= 4.9: versicolor (48.0/1.0)
| | Petal.Length > 4.9
| | | Petal.Width <= 1.5: virginica (3.0)
| | | Petal.Width > 1.5: versicolor (3.0/1.0)
| Petal.Width > 1.7: virginica (46.0/1.0)
Number of Leaves : 5
Size of the tree : 9
Cost Matrix
0 0 0
10 0 10
0 0 0
plot(csc)
任何帮助都会很棒.
dput(csc)
structure(list(classifier = <S4 object of class structure("jobjRef", package = "rJava")>,
predictions = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("setosa", "versicolor",
"virginica"), class = "factor"), call = CostSensitiveClassifier(formula = Species ~
., data = iris, control = Weka_control(`cost-matrix` = matrix(c(0,
10, 0, 0, 0, 0, 0, 10, 0), ncol = 3), W = "weka.classifiers.trees.J48",
M = TRUE)), handlers = structure(list(control = list(
function (x)
{
if (inherits(x, "Weka_control")) {
ind <- which(names(x) %in% substring(options,
2L))
if (any(ind))
x[ind] <- lapply(x[ind], fun, ...)
}
else {
x <- as.character(x)
ind <- which(x %in% options)
if (any(ind))
x[ind + 1L] <- sapply(x[ind + 1L], fun, ...)
}
x
}, function (x)
{
if (inherits(x, "Weka_control")) {
ind <- which(names(x) %in% substring(options,
2L))
if (any(ind))
x[ind] <- lapply(x[ind], fun, ...)
}
else {
x <- as.character(x)
ind <- which(x %in% options)
if (any(ind))
x[ind + 1L] <- sapply(x[ind + 1L], fun, ...)
}
x
}), data = function (mf)
{
terms <- attr(mf, "terms")
if (any(attr(terms, "order") > 1L))
stop("Interactions are not allowed.")
factors <- attr(terms, "factors")
varnms <- rownames(factors)[c(TRUE, rowSums(factors)[-1L] >
0)]
mf[, sub("^`(.*)`$", "\\1", varnms), drop = FALSE]
}), .Names = c("control", "data")), levels = c("setosa",
"versicolor", "virginica"), terms = Species ~ Sepal.Length +
Sepal.Width + Petal.Length + Petal.Width), .Names = c("classifier",
"predictions", "call", "handlers", "levels", "terms"), class = c("CostSensitiveClassifier",
"Weka_meta", "Weka_classifier"))
推荐答案
实际上,事实证明这很容易.试试
Actually, it turns out to be pretty easy. Try
library(RWeka)
library(party)
library(partykit)
csc <- CostSensitiveClassifier(Species ~ ., data = iris,
control = Weka_control(`cost-matrix` = matrix(c(0,10, 0, 0, 0, 0, 0, 10, 0),
ncol = 3),
W = "weka.classifiers.trees.J48",
M = TRUE))
plot(as.party.Weka_tree(csc))
那给了我
问题是,此模型将其类别报告为
The problem is, this model reports it's class as
> class(csc)
[1] "CostSensitiveClassifier" "Weka_meta" "Weka_classifier"
,这些类没有方法.但是,"Weka_tree"有一个仅调用as.party.Weka_tree
并绘制结果的图形.我必须承认,我不知道CostSensitiveClassifier树和J48树之间的区别,所以我希望此图可以准确表示.
and there is no method for those classes. However, there is one for "Weka_tree" which just calls as.party.Weka_tree
and plots the result. I must admit I don't know the differences between a CostSensitiveClassifier tree and a J48 tree so I hope this plot is an accurate representation.
这篇关于如何在R中绘制CostSensitiveClassifier树?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!