我有一个数据集“rf1”的845特征和1052行,并希望消除,为了做ML,高度相关的特征。我做了这个代码,但它显示我的特征和相关性没有消除它们...
`corr_simple<-function(rf1,sig=0.9)
{df_cor <- rf1 %>% mutate_if(is.character, as.factor)
df_cor <- df_cor %>% mutate_if(is.factor, as.numeric)
corr<-cor(df_cor)
corr[lower.tri(corr,diag=TRUE)] <- NA
corr[corr == 1] <- NA
corr <- as.data.frame(as.table(corr))
corr <- na.omit(corr)
corr <- subset(corr, abs(Freq) > sig)
corr <- corr[order(-abs(corr$Freq)),]
print(corr)
mtx_corr <- reshape2::acast(corr, Var1~Var2,value.var="Freq")}
corr_simple(rf1)`
这是结果,但我想消除阈值为0.9 MY RESULTS的变量
当我使用像这样的函数时,我会看到这样的错误消息:
`data<-data.frame(rf1)
cor_matrix <- cor(data)
cor_matrix_rm <- cor_matrix
cor_matrix_rm[upper.tri(cor_matrix_rm)] <- 0
diag(cor_matrix_rm) <- 0
cor_matrix_rm
data_new <- data[ , !apply(cor_matrix_rm, 2, function(x) any(x > 0.90))]
Error in [.data.frame(data, , !apply(cor_matrix_rm, 2, function(x) any(x > :
undefined columns selected`
我搜索并尝试了其他解决方案,但总是这个问题...
1条答案
按热度按时间w6lpcovy1#
你可以用一个循环来完成,这里有一个使用
mtcars
的例子,你把阈值设置为r_threshold
(在下面的示例中为.8)。循环mtcars
的列,每次都删除相关性绝对值与预定义阈值相关的列。删除相关列后,将移至下一列。保留前面步骤中未删除的列。注意,cyl
、disp
和wt
已被删除(您可以通过循环前后列名的差异看出这一点。由reprex package(v2.0.1)于2023年2月9日创建