You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Random Forest与Pandas实现特征重要性筛选及问题修复

解决SelectFromModel筛选特征时numpy数组无columns属性的问题

嘿,我完全懂你现在的困扰——当X_train是numpy数组时,确实没办法直接调用.columns属性,毕竟numpy数组本身就不带这个特性。不过别着急,我给你几个实用的解决方案,帮你顺利拿到筛选后的特征列名:

方法1:提前保存原始特征名(最推荐)

既然你的数据集原本有84个数值列,那肯定一开始是从DataFrame来的对吧?那在转成numpy数组之前,先把列名存下来就好啦:

# 假设你最初的训练数据是DataFrame格式的df_train
feature_names = df_train.columns.tolist()  # 先把所有列名存成列表

# 再将数据转换成numpy数组
X_train = df_train.drop('target', axis=1).values  # 假设目标列是'target'
y_train = df_train['target'].values

# 初始化并训练SelectFromModel
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier

sel = SelectFromModel(RandomForestClassifier(n_estimators=100))
sel.fit(X_train, y_train)

# 根据筛选结果匹配原始列名
selected_feat = [name for idx, name in enumerate(feature_names) if sel.get_support()[idx]]
print("筛选出的重要特征:", selected_feat)

这个方法的核心是提前保留原始特征名的映射关系,这样筛选后能直接对应到真实的列名,后续分析也更清晰。

方法2:将numpy数组转回DataFrame并指定列名

如果已经把数据转成numpy数组了,也可以再转回DataFrame,记得指定原始的列名:

# 假设你已经有原始特征名列表feature_names
import pandas as pd

X_train_df = pd.DataFrame(X_train, columns=feature_names)

# 用你原本想使用的方式获取选中特征
selected_feat = X_train_df.columns[sel.get_support()].tolist()
print("筛选出的重要特征:", selected_feat)

这里要注意,必须要有原始的特征名列表,不然转回DataFrame后列名会是默认的0、1、2...,没法对应到真实数据。

方法3:临时生成列名(应急用,不推荐)

如果你不小心没保存原始列名,临时可以给特征生成命名,但这个方法只能知道是哪几个位置的特征,没法对应真实列名,适合应急:

import pandas as pd

# 生成临时列名,比如feature_1到feature_84
temp_feature_names = [f"feature_{i+1}" for i in range(X_train.shape[1])]
X_train_df = pd.DataFrame(X_train, columns=temp_feature_names)

selected_feat = X_train_df.columns[sel.get_support()].tolist()
print("筛选出的特征(临时命名):", selected_feat)

另外,解释下你之前尝试的pd.DataFrame(columns=[(sel.get_support())])为什么不行:sel.get_support()返回的是一个布尔数组(比如array([True, False, True,...])),你直接把这个数组当成列名,会生成一个名叫[ True False ... ]的单列DataFrame,完全不是你想要的结果,所以得用布尔索引去匹配对应的列名才行。

内容的提问来源于stack exchange,提问作者Mojtaba Vasou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:57:24