过滤相关性≥0.9的特征时触发IndexError:布尔索引维度不匹配问题求助
解决高相关性特征过滤时的IndexError问题
这个错误的核心原因很明确:你用来筛选列的布尔数组columns长度是19,但你的数据集data一共有45列,两者维度不匹配,导致布尔索引无法正常工作。
为什么会出现这种情况?大概率是你计算相关系数矩阵corr的时候,没有基于整个数据集的所有特征计算——比如你可能只取了data的部分列来生成corr,导致corr.shape[0]是19,和data.columns的长度45对不上。
解决方案步骤:
确保相关系数矩阵基于整个数据集生成
先检查你的corr生成代码,必须是基于data的所有列计算:corr = data.corr() # 基于data所有特征计算相关性矩阵这样
corr.shape[0]就会和data.columns的长度完全一致,生成的columns布尔数组长度也能匹配。修正后的完整代码
补全正确的相关性矩阵生成步骤后,你的代码就能正常运行:# 第一步:基于整个数据集计算特征相关性矩阵 corr = data.corr() # 初始化布尔数组,长度与特征总数一致 columns = np.full((corr.shape[0],), True, dtype=bool) for i in range(corr.shape[0]): for j in range(i+1, corr.shape[0]): if corr.iloc[i,j] >= 0.9: if columns[j]: columns[j] = False # 此时维度匹配,不会触发索引错误 selected_columns = data.columns[columns] data = data[selected_columns]调试小技巧
如果还是不确定问题所在,可以在代码中加入两行打印,确认维度是否一致:print(f"数据集特征总数:{data.shape[1]}") print(f"相关性矩阵的行数:{corr.shape[0]}")只要这两个数字相等,布尔索引就不会出现维度不匹配的问题。
内容的提问来源于stack exchange,提问作者Akhil Sahukaru
相关产品推荐
相关产品推荐

