新闻中心
Boruta特征选择结果在Pandas DataFrame中的处理与列名保留

本文详细介绍了如何使用boruta算法进行特征选择,并重点阐述了如何将boruta筛选出的特征结果有效地整合到pandas dataframe中,同时保留原始的列名。文章提供了两种实现方法,包括手动利用布尔掩码进行索引以及使用boruta最新版本提供的`return_df=true`参数,旨在帮助用户清晰、便捷地管理特征选择后的数据。
Boruta特征选择算法概述
Boruta是一种基于随机森林的包装器(Wrapper)特征选择算法,其设计目标是识别数据集中所有与目标变量具有统计显著性关联的特征。它通过引入“影子特征”(原始特征的随机置乱副本)并迭代地比较原始特征与影子特征的重要性,从而提供一个稳健的特征子集。
在使用Boruta进行特征选择时,通常会遵循以下步骤:
- 初始化一个基准评估器(如 RandomForestRegressor 或 RandomForestClassifier)。
- 使用该评估器初始化 BorutaPy 实例。
- 调用 fit 方法训练Boruta,传入特征矩阵 X 和目标变量 y。需要注意的是,fit 方法通常期望 X 和 y 为NumPy数组。
- 训练完成后,feat_selector.support_ 会返回一个布尔数组,指示哪些特征被选中;feat_selector.ranking_ 则提供特征的重要性排名。
以下是Boruta算法的基本初始化和训练代码示例:
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from boruta import BorutaPy
# 假设 X 是你的原始特征DataFrame,y 是目标变量
# 为了示例,我们创建一个虚拟的X和y
# X = pd.DataFrame(np.random.rand(100, 25), columns=[f'J{i}' for i in range(25)])
# y = pd.Series(np.random.rand(100))
# 确保 X 和 y 已经定义并准备好
# 例如:
# X = pd.read_csv('your_features.csv')
# y = pd.read_csv('your_target.csv').squeeze()
# 初始化随机森林回归模型作为Boruta的评估器
model = RandomForestRegressor(n_estimators=100, max_depth=5, random_state=42)
# 初始化Boruta特征选择器
feat_selector = BorutaPy(
verbose=0, # 设置为0可减少输出,2可查看详细过程
estimator=model,
n_estimators='auto',
max_iter=10, # 迭代次数
random_state=42,
)
# 训练Boruta
# 注意:fit方法通常期望NumPy数组作为输入
feat_selector.fit(np.array(X), np.array(y))
# 打印被Boruta选中的特征
print("Boruta特征选择结果:")
for i in range(len(feat_selector.support_)):
status = "✔️ Pass" if feat_selector.support_[i] else "❌ Fail"
print(f"特征: {X.columns[i]} - 排名: {feat_selector.ranking_[i]} - 状态: {status}")
# 使用 transform 方法获取筛选后的特征数据
# 此时,X_filtered 通常是一个NumPy数组,失去了原始的列名信息
X_filtered_numpy = feat_selector.transform(np.array(X))
print("\n筛选后的NumPy数组 (X_filtered_numpy) 的前5行:")
print(X_filtered_numpy[:5])
print(f"筛选后的特征数量: {X_filtered_numpy.shape[1]}")上述代码中,feat_selector.transform(np.array(X)) 返回的是一个NumPy数组,虽然包含了精选的特征数据,但丢失了原始的列名信息。这在后续的数据分析和模型解释中会带来不便。接下来,我们将介绍如何将这些精选特征重新封装成带有原始列名的Pandas DataFrame。
在Pandas DataFrame中获取带列名的精选特征
将Boruta筛选出的特征(通常是一个NumPy数组)重新封装成一个Pandas DataFrame,并保留原始的列名,是数据预处理中非常重要的一步。这有助于保持数据的可读性和可解释性。这里提供两种实现方法。
方法一:利用布尔掩码手动构建DataFrame
feat_selector.support_ 是一个布尔数组,其长度与原始特征数量相同,其中 True 表示对应的特征被Boruta选中,False 则表示未被选中。我们可以利用这个布尔掩码从原始DataFrame X 的列名中选择出精选特征的列名,然后与 feat_selector.transform() 返回的NumPy数组结合,构建新的DataFrame。
Musho
AI网页设计Figma插件
76
查看详情
# 方法一:利用布尔掩码手动构建DataFrame
# feat_selector.transform(X.values) 将原始DataFrame X 转换为NumPy数组进行转换
# X.columns[feat_selector.support_] 利用布尔掩码选择出被选中的列名
X_filtered_method1 = pd.DataFrame(
feat_selector.transform(X.values), # 注意这里使用 X.values 将 DataFrame 转换为 NumPy 数组
columns=X.columns[feat_selector.support_]
)
print("\n--- 方法一:手动构建DataFrame ---")
print("精选特征DataFrame (X_filtered_method1) 的前5行:")
print(X_filtered_method1.head())
print("\n精选特征DataFrame的列名:")
print(X_filtered_method1.columns)
print(f"精选特征数量: {X_filtered_method1.shape[1]}")说明:
- feat_selector.transform(X.values):虽然 fit 阶段要求NumPy数组,但 transform 方法也可以直接接受DataFrame。然而,为了确保兼容性和与 fit 方法的一致性,将其转换为NumPy数组 (X.values) 是一个稳妥的做法。
- X.columns[feat_selector.support_]:这行代码是关键。它利用Boruta的 support_ 属性作为布尔索引,从原始DataFrame X 的所有列名中筛选出被选中的特征列名。
方法二:利用Boruta最新版本return_df=True参数
Boruta库的较新版本(通常指其 master 分支或较新发布的稳定版本)为 transform 方法提供了一个便捷的参数 return_df=True。当设置此参数时,transform 方法将直接返回一个带有原始列名的Pandas DataFrame,无需手动处理。
# 方法二:利用Boruta最新版本`return_df=True`参数
# 确保你的 BorutaPy 版本支持 return_df=True 参数
print("\n-
-- 方法二:使用 return_df=True 参数 ---")
try:
X_filtered_method2 = feat_selector.transform(X, return_df=True)
print("精选特征DataFrame (X_filtered_method2) 的前5行:")
print(X_filtered_method2.head())
print("\n精选特征DataFrame的列名:")
print(X_filtered_method2.columns)
print(f"精选特征数量: {X_filtered_method2.shape[1]}")
except TypeError as e:
print(f"警告: 您的BorutaPy版本可能不支持 return_df=True 参数。错误信息: {e}")
print("请尝试升级 BorutaPy 到最新版本 (例如: pip install boruta==0.3 -U 或从GitHub安装最新master分支)。")注意事项:
- 版本兼容性: return_df=True 参数并非所有Boruta版本都支持。如果你遇到 TypeError,这通常意味着你的BorutaPy版本较旧。建议通过 pip install boruta --upgrade 或直接从其GitHub仓库安装最新版本。
- 简洁性: 如果你的Boruta版本支持此参数,方法二无疑是最简洁、最推荐的做法。它自动化了列名映射的过程,减少了出错的可能性。
总结与最佳实践
在数据科学工作流中,特征选择是至关重要的一步,而Boruta算法提供了一种强大的方法来识别相关特征。将Boruta的输出结果有效地整合回带有原始列名的Pandas DataFrame,对于后续的数据探索、模型训练和结果解释都具有重要意义。
- 手动构建 (方法一):适用于所有Boruta版本,通过 feat_selector.support_ 布尔掩码手动映射列名,具有通用性。
- return_df=True (方法二):如果你的Boruta版本支持,这是更简洁、更高效的方法,强烈推荐使用。它直接返回带有正确列名的DataFrame,简化了代码。
无论选择哪种方法,最终目标都是获得一个结构清晰、易于理解的精选特征DataFrame。这不仅能提高数据处理效率,还能确保模型构建和结果分析的准确性和可追溯性。在进行特征选择之前,请务必确保你的数据已经进行了适当的预处理,例如缺失值处理和特征编码,以确保Boruta算法能够准确地评估特征的重要性。
以上就是Boruta特征选择结果在Pandas DataFrame中的处理与列名保留的详细内容,更多请关注其它相关文章!
# 转换为
# 通化seo顾问
# 广州营销seo推广哪家有名
# shopex seo
# 网站SEO优化方法值得关注
# 耳机营销推广文案简短
# 息县新媒体推广营销公司
# 中山360seo报价
# 网站推广怎么做才能顺利
# 建设英文的网站有哪些
# 关键词历史文化街区排名
# 如何将
# 有效地
# 两种
# git
# 的是
# 官网
# 掩码
# 最新版本
# 是一个
# 布尔
# red
# ai
# csv
# app
# 编码
# github
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台
将JSON对象数组转置为键值对列表的实用指南
CSS响应式网页如何实现主次模块比例自适应_flex-grow与flex-shrink调整
生成rdflib自定义SPARQL函数:参数匹配与实践指南
mc.js免安装版 mc.js一键畅玩入口
J*a中实现Go语言select通道多路复用机制
漫蛙网页登录入口 漫蛙漫画官方授权网址
没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享
Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全
Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】
深入理解Google Cloud Datastore查询:祖先路径与数据一致性
J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析
LINQ to XML为何解析失败? 深入理解C# XDocument的异常处理
Go调试环境为何无法启动_Go调试器启动失败原因与解决策略
必由学官方平台入口 必由学在线课堂登录地址
AO3同人作品网入口 AO3搜索引擎官网永久地址
Angular中单选按钮的正确使用与常见陷阱解析
Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区
NetBeans Ant项目:自动化将资源文件复制到dist目录的教程
为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法
《GTA6》开发画面疑似泄露!这次可不是AI了
德邦快递查询平台 德邦快递物流信息查询入口
优化大型XML文件解析:基于Python流式处理的内存高效方案
字由网在线版登录地址 字由网网页版安全入口
AO3最新可访问网址 Archive of Our Own官方在线入口
Golang如何使用context实现超时取消_Golang context超时取消模式实践
html5 app怎么运行环境_配html5 app运行环境【教程】
在J*a里如何理解依赖关系的方向_依赖方向在模块结构中的作用
steam官方入口大全 steam账号注册及操作指南
汽车之家官方网站官网入口_汽车之家网页版直接进入
vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法
Lar*el 递归关系中排除指定分支的教程
《刺客信条:影》PS5 Pro和Switch 2画面对比
C++如何比较两个字符串_C++ string compare函数与操作符对比
Centos/Linux 系统下安装 composer 的完整步骤
深入理解Go语言中Map值与方法接收器的交互:为什么需要临时变量
如何在网页中实现特定地点的随机图片展示
网易大神怎么保存别人动态的图片_网易大神动态图片保存方法
Flexbox布局实践:实现粘性导航栏与底部固定页脚
QQ邮箱官方邮箱登录入口 QQ邮箱网页版快速访问
React/Next.js中实现列表项的动态选择与移动
Golang指针如何与map组合使用_Golang map指针组合实践
zookeeper 都有哪些功能?
使用Pandas转换并合并DataFrame:多列映射至统一结构
UC浏览器网页版登录入口官网 电脑版网址入口
AO3网页版合集入口 Archive of Our Own同人作品浏览指南
俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口
深入理解字体排版:Adobe光学字偶距与CSS字偶距的差异与实现
Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法
ArrayList与LinkedList核心操作的Big-O复杂度分析


2025-11-03
浏览次数:次
返回列表
-- 方法二:使用 return_df=True 参数 ---")
try:
X_filtered_method2 = feat_selector.transform(X, return_df=True)
print("精选特征DataFrame (X_filtered_method2) 的前5行:")
print(X_filtered_method2.head())
print("\n精选特征DataFrame的列名:")
print(X_filtered_method2.columns)
print(f"精选特征数量: {X_filtered_method2.shape[1]}")
except TypeError as e:
print(f"警告: 您的BorutaPy版本可能不支持 return_df=True 参数。错误信息: {e}")
print("请尝试升级 BorutaPy 到最新版本 (例如: pip install boruta==0.3 -U 或从GitHub安装最新master分支)。")