r - 将条件变量添加到 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,但是排除这些变量作为分支的可能变量。有没有办法告诉随机森林忽略这三个变量作为可能的分裂?
解决方案
这将要求您的节点拆分为每种花卉种类设置一个阈值,这将比大多数树学习器的计算成本更高。我不知道有什么包可以实现这个。
一种可能的解决方法是进行一些特征工程。在这种情况下,如果您的条件是一个较小的分类,您可以相对于它们的花种对每个特征进行标准化,以便分裂类似于“萼片长度至少比物种平均值高 20%”或“萼片长度是至少一个(物种)标准偏差高于物种平均值。”
推荐阅读
- pdf - pdfbox给定坐标与XML(相同的pdf转换为xml)坐标不匹配?
- python - 如何在范围```range()```中使用小数?
- android - 睡眠模式下大量 UDP 丢包
- google-sheets - 是否免费使用 Google Sheets API?
- javascript - 如何根据当前域修改axios中的baseURL
- google-bigquery - 如何永久关闭 BQ 中的 ..."Powered by Data Catalog" 弹出窗口
- sapui5 - 如何使输入字段成为超链接?
- angular - Bazel + Angular + SocketIO V3 原因:Uncaught TypeError: XMLHttpRequest is not a constructor
- python - Pyspark 将输出保存为多种格式
- php - HttpKernel\Exception\MethodNotAllowedHttpException:此路由不支持 GET 方法。支持的方法:Laravel 中的 POST