Plotting a decision tree gives an error: dim(X) must have a positive length
Plotting a decision tree gives an error: dim(X) must have a positive length
我尝试使用以下数据集制作决策树:
RESULT EXPG_HOME R_HOME_3DAY
1 1.321 0.20
2 1.123 0.30
1 0.762 0.26
如果我试试这个:
library(rpart)
tree <- rpart(RESULT ~ EXPG_HOME, df, method="class")
fancyRpartPlot(tree)
成功了。但是当我尝试时:
tree <- rpart(RESULT ~ R_HOME_3DAY, df, method="class")
fancyRpartPlot(tree)
我收到以下错误:
Error in apply(model$frame$yval2[, yval2per], 1, function(x) x[1 + x[1]]) :
dim(X) must have a positive length
想知道这里出了什么问题吗?
EXPG_HOME 和 R_HOME_3DAY 都是数字。
这就是我使用相关变量得到的结果:
> table(df$R_HOME_3DAY)
0 0.1 0.133333333 0.166666667 0.2 0.233333333
21 65 14 10 194 53
0.266666667 0.3 0.333333333 0.366666667 0.4 0.433333333
63 248 107 185 369 169
0.466666667 0.5 0.533333333 0.566666667 0.6 0.633333333
334 351 184 382 317 213
0.666666667 0.7 0.733333333 0.766666667 0.8 0.833333333
336 251 112 217 92 64
0.866666667 0.9 0.933333333
83 20 5
问题是你没有得到树,只有根(节点):)
> tree <- rpart(RESULT ~ EXPG_HOME, df, method="class")
> fancyRpartPlot(tree)
Error in apply(model$frame$yval2[, yval2per], 1, function(x) x[1 + x[1]]) :
dim(X) must have a positive length
> plot(tree)
Error in plot.rpart(tree) : fit is not a tree, just a root
> tree
n= 3
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 3 1 1 (0.6666667 0.3333333) *
发生的事情是自变量没有提供足够的信息来种植你的树。 rpart
包通过设置默认限制来限制树生长的深度。以下来自?rpart.control
.
rpart.control(minsplit = 20,
minbucket = round(minsplit/3),
cp = 0.01,
maxcompete = 4,
maxsurrogate = 5,
usesurrogate = 2,
xval = 10,
surrogatestyle = 0,
maxdepth = 30, ...)
所以,您可能想放宽控制参数如下:
tree <- rpart(RESULT ~ EXPG_HOME, df, method="class",
control = rpart.control(minsplit = 1,
minbucket = 1,
cp = 0.001)
这将极有可能产生一棵包含许多节点的树。从这里开始,您可以尝试使用参数来获得像样的树。
我尝试使用以下数据集制作决策树:
RESULT EXPG_HOME R_HOME_3DAY
1 1.321 0.20
2 1.123 0.30
1 0.762 0.26
如果我试试这个:
library(rpart)
tree <- rpart(RESULT ~ EXPG_HOME, df, method="class")
fancyRpartPlot(tree)
成功了。但是当我尝试时:
tree <- rpart(RESULT ~ R_HOME_3DAY, df, method="class")
fancyRpartPlot(tree)
我收到以下错误:
Error in apply(model$frame$yval2[, yval2per], 1, function(x) x[1 + x[1]]) :
dim(X) must have a positive length
想知道这里出了什么问题吗?
EXPG_HOME 和 R_HOME_3DAY 都是数字。
这就是我使用相关变量得到的结果:
> table(df$R_HOME_3DAY)
0 0.1 0.133333333 0.166666667 0.2 0.233333333
21 65 14 10 194 53
0.266666667 0.3 0.333333333 0.366666667 0.4 0.433333333
63 248 107 185 369 169
0.466666667 0.5 0.533333333 0.566666667 0.6 0.633333333
334 351 184 382 317 213
0.666666667 0.7 0.733333333 0.766666667 0.8 0.833333333
336 251 112 217 92 64
0.866666667 0.9 0.933333333
83 20 5
问题是你没有得到树,只有根(节点):)
> tree <- rpart(RESULT ~ EXPG_HOME, df, method="class")
> fancyRpartPlot(tree)
Error in apply(model$frame$yval2[, yval2per], 1, function(x) x[1 + x[1]]) :
dim(X) must have a positive length
> plot(tree)
Error in plot.rpart(tree) : fit is not a tree, just a root
> tree
n= 3
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 3 1 1 (0.6666667 0.3333333) *
发生的事情是自变量没有提供足够的信息来种植你的树。 rpart
包通过设置默认限制来限制树生长的深度。以下来自?rpart.control
.
rpart.control(minsplit = 20,
minbucket = round(minsplit/3),
cp = 0.01,
maxcompete = 4,
maxsurrogate = 5,
usesurrogate = 2,
xval = 10,
surrogatestyle = 0,
maxdepth = 30, ...)
所以,您可能想放宽控制参数如下:
tree <- rpart(RESULT ~ EXPG_HOME, df, method="class",
control = rpart.control(minsplit = 1,
minbucket = 1,
cp = 0.001)
这将极有可能产生一棵包含许多节点的树。从这里开始,您可以尝试使用参数来获得像样的树。