为r中的随机森林模型添加条件变量



我想训练一个随机森林来进行分类预测。如果我想在预测模型中包含一组固定的自变量(例如,Y~.+x1+x2+x3中的x1, x2和x3),但将它们从自变量集合中排除(表示为。在示例中),可用于分区数据/在森林中创建分支/树,是否有一个简单的方法来做到这一点,使用caret,grf,或在R中的另一个包?

这里有一个例子:如果我想预测鸢尾花数据集中哪些花的萼片宽度超过3.2,但我想在决定是否创建一个新分支时以花的种类为条件,同时排除花的种类作为可能的变量进行分裂。想象一下,我知道花的种类是萼片宽度的一个很好的预测因子,但是我想知道在物种的条件下,还有什么其他因素可以预测萼片宽度:

data(iris)
d <- iris
d$sepal_width_over3point2<-as.factor(d$Sepal.Width>3.2)
d$Type1<-as.numeric(d$Species=='versicolor')
d$Type2<-as.numeric(d$Species=='virginica')
d$Type3<-as.numeric(d$Species=='setosa')
d<-subset(d,select=-c(Species,Sepal.Width))

## Set parameters to train models
# Run algorithms using 10-fold cross validation
control <- trainControl(method="cv", number=10)
metric <- "Accuracy"
# Random Forest
set.seed(11)
rf <- train(sepal_width_over3point2~.+Type1+Type2+Type3, data=d, method="rf", metric=metric, trControl=control)
print(rf)
example_varImp_rf<-varImp(rf)

当我看到这个模型中的变量重要性时,我想知道其他参数(萼片)的估计值。长度,花瓣。长度和花瓣宽度)取决于花的类型1、类型2和类型3,但排除这些变量作为分支的可能变量。有没有办法让随机森林忽略这三个变量作为可能的分裂?

这将要求您的节点分割为每个花卉物种具有一个阈值,这将比大多数树学习器更具计算成本。我不知道有哪个包实现了这个。

一个可能的解决方法是做一些特征工程。在这种情况下,如果你的条件是一个较小的分类,你可以标准化每个特征相对于他们的花卉种类,所以一个分裂将是"萼片长度至少比物种平均高20%";或"萼片长度至少比物种平均值高一个(种)标准差">

最新更新