新闻中心
使用BorutaPy进行特征选择并输出带标题的Pandas DataFrame

本教程详细介绍了如何利用borutapy库进行稳健的特征选择,并将筛选后的特征及其原始列标题准确地重构为pandas dataframe。文章将提供两种主要方法:通过布尔掩码手动构建dataframe,以及利用borutapy新版本中`transform`方法的`return_df`参数直接获取带标题的dataframe,确保数据处理的便捷性和可读性。
引言:BorutaPy与特征选择
特征选择是机器学习流程中至关重要的一步,它有助于减少模型复杂度、提高泛化能力并加快训练速度。BorutaPy是一个基于随机森林的特征选择算法,它通过迭代地将原始特征与随机创建的“影子特征”进行比较,从而识别出所有相关特征。其独特的优势在于能够找到所有与目标变量具有统计学意义的特征,而不仅仅是那些“最佳”特征。
在BorutaPy完成特征选择后,通常需要将筛选出的特征重新组织成一个带有原始列标题的Pandas DataFrame,以便于后续的数据分析和模型构建。本文将详细介绍如何实现这一目标。
BorutaPy基础用法
首先,我们回顾一下BorutaPy进行特征选择的基本流程。这通常涉及初始化一个基线模型(如RandomForestRegressor),然后将其传递给BorutaPy实例进行训练。
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from boruta import BorutaPy
# 假设 X 是特征DataFrame,y 是目标变量Series
# 为了演示,我们先创建一些示例数据
np.random.seed(42)
data_size = 100
X = pd.DataFrame(np.random.rand(data_size, 10), columns=[f'Feature_{i}' for i in range(10)])
# 假设 'Feature_0', 'Feature_2', 'Feature_5' 是相关特征
y = X['Feature_0'] * 2 + X['Feature_2'] * 3 - X['Feature_5'] * 0.5 + np.random.randn(data_size) * 0.1
# 初始化基线模型
model = RandomForestRegressor(n_estimators=100, max_depth=5, random_state=42)
# 初始化Boruta特征选择器
feat_selector = BorutaPy(
verbose=2, # 详细输出模式
estimator=model,
n_estimators='auto',
max_iter=50, # 迭代次数
random_state=42,
)
# 训练Boruta。注意:BorutaPy的fit方法通常期望numpy数组作为输入
feat_selector.fit(X.values, y.values)
# 打印每个特征的支持度和排名
print("\n------Support and Ranking for each feature------\n")
for i in range(len(feat_selector.support_)):
if feat_selector.support_[i]:
print(f"Passes the test: {X.columns[i]} - Ranking: {feat_selector.ranking_[i]} ✔️")
else:
print(f"Doesn't pass the test: {X.columns[i]} - Ranking: {feat_selector.ranking_[i]} ❌")
# 获取筛选后的特征数组
X_filtered_array = feat_selector.transform(X.values)feat_selector.support_是一个布尔数组,指示每个原始特征是否被BorutaPy选中。feat_selector.transform()方法返回一个包含所有被选特征的NumPy数组,但它不包含列标题信息。
将筛选结果重构为带标题的DataFrame
BorutaPy的transform方法默认返回一个NumPy数组,这在许多情况下是足够的。然而,为了保持数据的可读性和易用性,将其转换回带有原始列标题的Pandas DataFrame是更佳实践。下面介绍两种实现方法。
方法一:利用布尔掩码手动构建DataFrame
这是最通用且兼容所有BorutaPy版本的方法。feat_selector.support_属性是一个布尔数组,其长度与原始特征数量相同,True表示该特征被选中,False表示未被选中。我们可以利用这个布尔掩码来选择原始DataFrame的列标题,并结合transform方法的输出数据来构建新的DataFrame。
VALL-E
VALL-E是一种用于文本到语音生成 (TTS) 的语言建模方法
134
查看详情
# 步骤1:获取被选中的特征列名
selected_feature_names = X.columns[feat_selector.support_]
# 步骤2:使用transform方法获取筛选后的特征数据(NumPy数组)
# 注意:transform方法也期望NumPy数组作为输入
X_filtered_data = feat_selector.transform(X.values)
# 步骤3:将数据和列名组合成一个新的Pandas DataFrame
X_filtered_df_method1 = pd.DataFrame(X_filtered_data, columns=selected_feature_names)
print("\n--- Method 1: Manually Constructed DataFrame ---")
print(X_filtered_df_method1.head())
print(f"Shape of X_filtered_df_method1: {X_filtered_df_method1.shape}")解释:
- X.columns[feat_selector.support_]:这行代码利用布尔索引从原始DataFrame X 的列名中筛选出所有被BorutaPy选中的特征名称。
- pd.DataFrame(X_filtered_data, columns=selected_feature_names):pd.DataFrame构造函数接受数据(X_filtered_data)和列名列表(selected_feature_names),从而创建出一个结构完整、带有正确标题的DataFrame。
方法二:使用 return_df=True 参数 (推荐)
BorutaPy的最新版本(通常是boruta-py的master分支或较新发布的版本)在transform方法中引入了一个方便的return_df参数。当设置为True时,transform方法将直接返回一个带有正确列标题的Pandas DataFrame,极大地简化了操作。
# 注意:此方法要求BorutaPy库版本支持 `return_df=True` 参数。
# 建议通过 `pip install boruta-py --upgrade` 更新到最新版本。
try:
# 尝试使用 return_df=True 参数
X_filtered_df_method2 = feat_selector.transform(X, return_df=True)
print("\n--- Method 2: Using return_df=True ---")
print(X_filtered_df_method2.head())
print(f"Shape of X_filtered_df_method2: {X_filtered_df_method2.shape}")
except TypeError as e:
print(f&
quot;\n--- Method 2: Not *ailable ---")
print(f"Error: {e}. Your BorutaPy version might not support `return_df=True`.")
print("Please consider updating BorutaPy (`pip install boruta-py --upgrade`) or use Method 1.")
注意事项:
- 版本依赖: return_df=True 参数并非在所有BorutaPy版本中都可用。如果您的代码运行报错(通常是TypeError,提示transform方法没有return_df参数),则说明您的BorutaPy版本较旧。您可以通过pip install boruta-py --upgrade命令尝试更新库。
- 输入类型: 当使用return_df=True时,transform方法可以直接接受Pandas DataFrame作为输入(X),而无需手动转换为NumPy数组(X.values)。这进一步简化了代码。
总结与最佳实践
将BorutaPy筛选后的特征重构为带标题的Pandas DataFrame是数据处理中常见的需求。
- 对于所有BorutaPy版本,通过feat_selector.support_布尔掩码手动选择原始列名并结合feat_selector.transform(X.values)的输出来构建DataFrame是一种可靠的方法。
- 对于最新版本的BorutaPy,推荐使用feat_selector.transform(X, return_df=True)。这种方法更加简洁高效,直接返回所需的DataFrame,减少了手动操作的复杂性。
在实际应用中,始终建议检查您所使用的库版本,以充分利用其提供的最新功能。如果return_df=True可用,它无疑是更优的选择。如果不可用,手动构建DataFrame的方法同样能够实现您的目标,并且兼容性更广。
以上就是使用BorutaPy进行特征选择并输出带标题的Pandas DataFrame的详细内容,更多请关注其它相关文章!
# 两种
# 商洛seo
# 培训网站优化多少钱
# 如何推广仓库产品营销
# 湛江谷歌seo品牌排行
# 网站建设初衷
# 江西企业seo
# 昌吉seo快速排名
# 江西互联网推广营销培训
# 经区威海网站建设
# 德州抖音seo营销策略
# ai
# 是一种
# 离线
# 最新版本
# 掩码
# 如何用
# 重构
# 您的
# 是一个
# 布尔
# red
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
精准捕获:如何在页面中监听除特定元素外的所有点击事件
Python getattr() 异常处理深度解析:避免程序意外退出
steam官方入口大全 steam账号注册及操作指南
Win11截图该按哪些键 Win11截屏完整流程解析【教程】
PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符
哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法
荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
J*aScript教程:根据元素文本内容动态设置背景色
PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果
Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖
Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法
ACG动漫视频网入口 ACG动漫*免费正版观看地址
使用J*aScript检测输入元素是否包含在特定类中
海棠账号登录入口_登录海棠账户同步阅读记录
C#如何安全地从用户上传的XML文件中读取数据? 验证与清理策略
Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025
响应式容器内容自动缩放与宽高比维持教程
一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰
win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】
QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台
J*aScript Promise链中如何正确终止后续.then执行并处理错误
QQ邮箱正确登录入口_QQ邮箱官方网站使用地址
抖音网页版快捷访问 抖音网页版网页版入口操作教程
Composer的 "conflict" 字段有什么用_如何声明不兼容的包以避免依赖冲突
优化Log4j2控制台输出性能:解决异步日志瓶颈
126邮箱手机版登录官网2026_126手机邮箱免费入口最新
LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置
如何修改开机登录密码_Windows账户安全设置超详细教程【必学】
Django表单验证失败时保留用户输入数据的最佳实践
解决Bootstrap卡片顶部边距导致背景图下移的问题
Go语言中JSON数据解码与字段访问指南
如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题
NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰
学习通在线学习平台 学习通网页版直接进入课程中心
Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程
Golang如何优雅处理error_Golang error处理最佳实践总结
j*a toString()的覆盖
Mac怎么查看崩溃日志_Mac控制台错误报告分析
Win11输入法不见了怎么办_Windows11恢复语言栏显示方法
一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化
深入理解J*a链表中的IPosition接口与使用
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
在Qt QML中通过Python字典动态更新TextEdit内容的教程
Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】
c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解
CSS图片焦点样式实现教程:理解与应用tabindex属性
jQuery Mask 插件中实现电话号码固定前导零的教程
PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程
DLsite中文平台入口 DLsite官网内容在线查看


2025-11-05
浏览次数:次
返回列表
quot;\n--- Method 2: Not *ailable ---")
print(f"Error: {e}. Your BorutaPy version might not support `return_df=True`.")
print("Please consider updating BorutaPy (`pip install boruta-py --upgrade`) or use Method 1.")