我目前正试图弄清楚如何制作一个Shiny应用程序,它接受用户输入并使用它们根据决策树创建预测。我的问题很简单,我认为可能归结为理解。
首先,我创建一个简单的树(使用树库):
tr<-prune.tree(tree(Y~., dataset,split="gini"),best=4)
请注意,我有20个变量。
如果我绘制这个树,我看到这些变量中只有5个实际用于创建树。当然,在我的Shiny应用程序中,我希望用户必须输入尽可能少的信息。但是,只有当用户输入绝对所有内容(所有20个变量,即使只使用了5个变量)时,预测才有效。
这是我多次尝试解决这个问题:
首先我尝试创建一个只包含相关信息的数据框:
predict(tr,newdata=data.frame(PREVIOUS=1.6,CONS_PRICE_IDX=96,EMP_VAR_RATE=-3.1,CAMPAIGN=1.4,NR_EMPLOYED=5000),"class")
这会返回错误&#34; eval中的错误(expr,envir,enclos):Object&#39; AGE&#39;找不到&#34; (年龄是另一个变量)。 (如果我使用&#39; list&#39;而不是&#39; data.frame&#39;),我会收到同样的错误。
然后我尝试创建以下数据框来计算所有变量,但仍然将未包含在树中的变量视为不相关:
predict(tr,newdata=data.frame(AGE=NULL,MONTH=NULL,DAY_OF_WEEK=NULL,PDAYS=NULL,POUTCOME=NULL,JOB=NULL,EURIBOR3M=NULL,CONS_CONF_IDX=NULL,MARITAL=NULL,EDUCATION=NULL,DEFAULTCREDIT=NULL,HOUSING=NULL,LOAN=NULL,CONTACT=NULL,PREVIOUS=1.6,CONS_PRICE_IDX=96,EMP_VAR_RATE=-3.1,CAMPAIGN=1.4,NR_EMPLOYED=5000),"class")
这会返回错误&#34; data.frame中的错误(AGE = NULL,MONTH = NULL,DAY_OF_WEEK = NULL,PDAYS = NULL,: 参数意味着不同的行数:0,1和#34;
如果我在这里使用列表,那么我会收到错误&#34; model.frame.default中的错误(条款,newdata,na.action = na.pass,xlev = object $ xlevels): 变量&#39; AGE&#39;&#34;
的无效类型(NULL)基本上,我不明白为什么R似乎需要数据来确定实际上不包含在决策树中的数据。如果我填写每个值,预测将起作用,但对于用户来说这将是非常繁琐的。有没有办法解决这个问题?
提前致谢。
编辑:
我的树是用这个公式创建的:
tr<-prune.tree(tree(Y~., dataset,split="gini"),best=4)
看起来像这样:
检查实际使用的变量:
summary(tr)
Variables actually used in tree construction:
"PREVIOUS" "CAMPAIGN" "EMP_VAR_RATE" "CONS_PRICE_IDX" "NR_EMPLOYED"
然后,创建以下树:
tr2<-prune.tree(tree(Y~PREVIOUS+CAMPAIGN+EMP_VAR_RATE+NR_EMPLOYED+CONS_PRICE_IDX, dataset,split="gini"),best=4)
收率:
正如你所看到的......这棵树完全不同,基本没用。