我想使用包树中的函数cv.tree。出于锻炼目的,我使用文件' iris'来自R数据。
当使用cv.tree时,计算永远不会结束,也不会收到错误消息,我必须使用停止按钮。我的代码出了什么问题? 我的核心代码如下:
> library(party)
> data(iris)
> sample <- sample(2, size=nrow(iris), replace=TRUE, prob=c(.7,.3))
> sampling <- cbind(iris,sample)
> traindata <- sampling[sample==1,]
> library(Formula)
> formula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
> treemodel = ctree(formula,data=traindata)
> library(tree)
> class(treemodel) <- "tree"
> crossvalidation <- cv.tree(object=treemodel, rand=runif(nrow(traindata)), FUN=prune.tree, K=10)
我还使用了其他K值和FUN = prune.misclass。 谢谢你的帮助。 Ciau Uwe
答案 0 :(得分:0)
你有两个问题。
treemodel
对象不属于“树”类。
您已分配“树”类的事实并未解决此问题。
比较您的树和cv.tree
中示例中的树。
data(cpus, package="MASS")
cpus.ltr <- tree(log10(perf) ~ syct + mmin + mmax + cach
+ chmin + chmax, data=cpus)
cpus.ltr
# compare to your tree
treemodel
它们是非常不同的对象。 你必须找到一种从“BinaryTree”转换为“tree”的方法。
其次,rand
参数应采用整数向量。 runif(nrow(traindata))
给出0到1之间的数字,即不是整数。
但是,如果错误指定,cv.tree
似乎默默地忽略了这个参数。