我有一个包含大约 50 个预测变量的数据集,其中一些是相关的。现在,我正在尝试在 R 中拟合随机森林模型,以使用该数据集进行预测。
因为预测变量太多,所以我想删除一些预测变量。我能想到的唯一方法是 VIF 分析。
在做随机森林之前做 VIF 删除变量是否正确?还有其他方法可以减少随机森林的变量吗?是否有必要删除随机森林模型的变量?
我有一个包含大约 50 个预测变量的数据集,其中一些是相关的。现在,我正在尝试在 R 中拟合随机森林模型,以使用该数据集进行预测。
因为预测变量太多,所以我想删除一些预测变量。我能想到的唯一方法是 VIF 分析。
在做随机森林之前做 VIF 删除变量是否正确?还有其他方法可以减少随机森林的变量吗?是否有必要删除随机森林模型的变量?
您希望减少功能数量的原因可能有两个:
预测能力:随机森林模型的准确性并没有真正受到多重共线性的影响。你可以看看这个。它实际上是在运行每个决策树时选择训练数据的随机样本以及特征子集。因此,无论哪个功能使其杂质减少更多,它都会选择它。这样,无论是大量预测变量还是相关预测变量,模型的准确性都不应受到影响。
可解释性: 如果您想使用特征及其影响来解释模型输出,在这种情况下,您可能会因为多重共线性而受苦。如果两个预测变量相关并且它们很重要,那么树会选择其中一个,如果树的数量很少,您可能会丢失另一个。因此,您可能想减少功能。
方法: 我建议你使用randomForest中内置的重要性函数。这是根据 Gini Importance 或 Mean Decrease in Impurity (MDI) 计算每个特征的重要性。
```
fit <- randomForest(Target ~.,importance = T,ntree = 500, data=training_data)
var.imp1 <- data.frame(importance(fit, type=2))
var.imp1$Variables <- row.names(var.imp1)
varimp1 <- var.imp1[order(var.imp1$MeanDecreaseGini,decreasing = T),]
par(mar=c(10,5,1,1))
giniplot <- barplot(t(varimp1[-2]/sum(varimp1[-2])),las=2,
cex.names=1,
main="Gini Impurity Index Plot")
这将给出如下所示的内容,您可以排除不太重要的功能。
您还可以检查其他方法,例如
排列重要性或准确性的平均下降 (MDA)
信息增益/熵
增益比
当依赖项是分类的时,所有这些都非常有用。如果您的因变量是连续的,您可以遵循经典方法,这会导致每个特征与目标之间的相关性计算。