0

0

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

DDD

DDD

发布时间:2025-11-03 11:14:25

|

260人浏览过

|

来源于php中文网

原创

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

本文详细介绍了如何使用boruta算法进行特征选择,并重点阐述了如何将boruta筛选出的特征结果有效地整合到pandas dataframe中,同时保留原始的列名。文章提供了两种实现方法,包括手动利用布尔掩码进行索引以及使用boruta最新版本提供的`return_df=true`参数,旨在帮助用户清晰、便捷地管理特征选择后的数据。

Boruta特征选择算法概述

Boruta是一种基于随机森林的包装器(Wrapper)特征选择算法,其设计目标是识别数据集中所有与目标变量具有统计显著性关联的特征。它通过引入“影子特征”(原始特征的随机置乱副本)并迭代地比较原始特征与影子特征的重要性,从而提供一个稳健的特征子集。

在使用Boruta进行特征选择时,通常会遵循以下步骤:

  1. 初始化一个基准评估器(如 RandomForestRegressor 或 RandomForestClassifier)。
  2. 使用该评估器初始化 BorutaPy 实例。
  3. 调用 fit 方法训练Boruta,传入特征矩阵 X 和目标变量 y。需要注意的是,fit 方法通常期望 X 和 y 为NumPy数组。
  4. 训练完成后,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。

Remove.bg
Remove.bg

AI在线抠图软件,图片去除背景

下载
# 方法一:利用布尔掩码手动构建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算法能够准确地评估特征的重要性。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

53

2025.12.04

pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

339

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

411

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

757

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

348

2025.07.23

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

66

2026.01.21

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

404

2023.08.14

数据分析的方法
数据分析的方法

数据分析的方法有:对比分析法,分组分析法,预测分析法,漏斗分析法,AB测试分析法,象限分析法,公式拆解法,可行域分析法,二八分析法,假设性分析法。php中文网为大家带来了数据分析的相关知识、以及相关文章等内容。

469

2023.07.04

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.9万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号