R语言实现数据集Top10高相关性数值特征筛选与阈值化输出
大数值数据集高相关特征对快速筛查R实现
针对包含69个数值列的CW_ModelDevelopment数据集,逐行核验全量相关矩阵的方式效率极低,可直接通过以下方案实现需求,逻辑和Python同场景实现完全对齐:
前置依赖
代码复用现有dplyr管道风格,仅需额外加载专门处理相关矩阵格式的corrr包,可自动处理自相关、重复变量对的冗余计算问题,不需要手动对矩阵做三角拆分。
功能实现
自定义阈值输出超阈值特征对
可自由设置相关系数阈值,仅保留关联强度超过设定值的变量对,同时将相关系数转换为百分比形式直观展示:
# 加载依赖包 library(dplyr) library(corrr) # 自定义相关系数阈值,例:设定为0.7 custom_cutoff <- 0.7 CW_ModelDevelopment %>% # 筛选全部数值型列 select_if(is.numeric) %>% # 计算相关矩阵并转换为长表结构,和原代码cor()默认计算逻辑一致 correlate(use = "pairwise.complete.obs") %>% # 移除矩阵上三角冗余的重复计算结果 shave() %>% # 展平为可筛选的规整数据框 stretch(na.rm = TRUE) %>% mutate( # 转换为百分比形式的相关强度,保留1位小数 corr_percent = round(r * 100, 1), # 计算相关系数绝对值用于阈值判断和排序 abs_corr = abs(r) ) %>% # 按自定义阈值过滤结果 filter(abs_corr >= custom_cutoff) %>% # 按相关强度从高到低排序 arrange(desc(abs_corr)) %>% # 选择最终输出的展示列 select(变量1 = x, 变量2 = y, 原始相关系数 = r, 相关强度百分比 = corr_percent)
直接输出相关性Top10特征对
不需要设置阈值时,可直接提取关联强度最高的前10个变量对:
CW_ModelDevelopment %>% select_if(is.numeric) %>% correlate(use = "pairwise.complete.obs") %>% shave() %>% stretch(na.rm = TRUE) %>% mutate( corr_percent = round(r * 100, 1), abs_corr = abs(r) ) %>% # 按相关系数绝对值取排名前10的结果 slice_max(order_by = abs_corr, n = 10) %>% select(变量1 = x, 变量2 = y, 原始相关系数 = r, 相关强度百分比 = corr_percent)
注意事项
- 排序默认基于相关系数绝对值,可同时覆盖强正相关、强负相关的高关联特征,避免遗漏有实际意义的共线性特征
- 若仅需筛选正相关的特征对,可在过滤逻辑中增加
r > 0的判断条件 - 代码中
use = "pairwise.complete.obs"参数可避免存在缺失值时全列删除样本的问题,适配真实数据集的缺失值场景
内容的提问来源于stack exchange,提问作者Alam
相关产品推荐
相关产品推荐

