首页 > 解决方案 > 将条件变量添加到 R 中的随机森林模型

问题描述

我想训练一个随机森林来进行分类预测。如果我想在预测模型中包含一组固定的自变量(例如 x1、x2 和 x3Y~.+x1+x2+x3在数据/在森林中创建分支/树,是否有一种简单的方法可以使用 R 中的 、 或其他包来执行此caret操作grf

这是一个示例:如果我想预测 iris 数据集中哪些花的萼片宽度超过 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)

当我查看此模型中的变量重要性时,我想知道其他参数(Sepal.length、Petal.length 和 Petal.width)的估计值取决于花 Type1、Type2 和 Type3,但是排除这些变量作为分支的可能变量。有没有办法告诉随机森林忽略这三个变量作为可能的分裂?

标签: rmachine-learningrandom-forestcart-analysis

解决方案


这将要求您的节点拆分为每种花卉种类设置一个阈值,这将比大多数树学习器的计算成本更高。我不知道有什么包可以实现这个。

一种可能的解决方法是进行一些特征工程。在这种情况下,如果您的条件是一个较小的分类,您可以相对于它们的花种对每个特征进行标准化,以便分裂类似于“萼片长度至少比物种平均值高 20%”或“萼片长度是至少一个(物种)标准偏差高于物种平均值。”


推荐阅读