在随机森林中,具有高基尼重要性的特征能否在 t 检验中显示不显着的 p 值?

数据挖掘 机器学习 特征选择 随机森林
2022-03-07 08:34:46

在我的数据中有两个类,当对这两个类的值进行 t 检验时,我的一个 Gini 重要性为 0.023(95 个特征中的第 8 位)的特征显示 p 值为 0.44。我想知道这是否有意义。直观地说,具有高基尼重要性的特征在类之间不会有非常不同的值吗?我想知道如何调和这两个事实。

编辑:如果有帮助,所有基尼系数的范围都在 0.0011 到 0.0295 之间,p 值的范围从 5.13e-109 到 1。t 检验和秩和检验都可以看到这些 p 值。

1个回答

直观地说,具有高基尼重要性的特征在类之间不会有非常不同的值吗?我想知道如何调和这两个事实。

如果我理解正确,这两个事实完全一致,以防您的类在一维特征空间中不可分离。

以下夸张的玩具示例应说明这种情况(和射频的功率)。

#uncomment the following line to remove all variables
# rm(list=ls())

library(ggplot2)
library(caret)
library(MASS)
library(GGally)
library(dplyr)

SEED <- 123456
SIMS <- 1000

set.seed(SEED)

x.signal <- rbind(
    mvrnorm(n = SIMS/2, c(0,0), matrix(c(1,0.9,0.9,1),2,2)),
    mvrnorm(n = SIMS/2, c(0,0), matrix(c(1,-0.9,-0.9,1),2,2)))

x.noise <- mvrnorm(n = SIMS, c(0,0), matrix(c(1,0.9,0.9,1),2,2))
y <- rep(c(TRUE, FALSE), each=SIMS/2)
df <- data.frame(
    x1.signal=x.signal[,1],
    x2.signal=x.signal[,2], 
    x1.noise=x.noise[,1], 
    x2.noise=x.noise[,2], 
    y=factor(y))

yName <- "y"
xName <- setdiff(colnames(df), yName)

ggpairs(df, aes(colour=y))

在此处输入图像描述

ctrl <- trainControl("cv", number = 5, verboseIter = TRUE)
rffit <- train(df[,xName], df[,yName], 
    method = "rf", trControl = ctrl, tuneLength = 5)

varImpPlot(rffit$finalModel)

在此处输入图像描述

## t = 0.061767, df = 997.98, p-value = 0.9508
t.test(filter(df, y=="TRUE")$x1.signal, 
    filter(df, y=="FALSE")$x1.signal,
    var.equal = FALSE, paired = FALSE)

## t = 0.22695, df = 996.04, p-value = 0.8205
t.test(filter(df, y=="TRUE")$x2.signal,
    filter(df, y=="FALSE")$x2.signal, 
    var.equal = FALSE, paired = FALSE)


dplyr::group_by(df, y) %>% 
    dplyr::summarise(mx1=mean(x1.signal), 
    mx2=mean(x2.signal))