BorutaPy特征选择库:Python中的全相关特征选择神器
项目概述
BorutaPy是Boruta R包的Python实现,是一个全相关特征选择方法。与大多数最小最优特征选择方法不同,Boruta旨在找出所有可用于预测的信息特征,而不仅仅是找到分类器误差最小的紧凑特征子集。
项目结构
BorutaPy项目采用标准的Python包结构:
boruta_py/
├── boruta/ # 核心包目录
│ ├── __init__.py # 包初始化文件
│ ├── boruta_py.py # 主要算法实现
│ ├── examples/ # 示例文件目录
│ │ ├── Madalon_Data_Set.ipynb
│ │ ├── test_X.csv
│ │ └── test_y.csv
│ └── test/ # 测试文件目录
│ ├── __init__.py
│ └── test_boruta.py
├── LICENSE # BSD 3条款许可证
├── MANIFEST.in # 打包清单文件
├── README.md # 项目说明文档
├── requirements.txt # 依赖包列表
├── setup.py # 安装配置脚本
└── test_requirements.txt # 测试依赖包列表
快速安装
通过pip一键安装BorutaPy:
pip install Boruta
或者通过conda安装:
conda install -c conda-forge boruta_py
核心依赖
BorutaPy依赖于以下Python科学计算库:
- numpy >= 1.10.4
- scikit-learn >= 0.17.1
- scipy >= 0.17.0
使用方法
BorutaPy采用scikit-learn风格的接口,使用起来非常简单:
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from boruta import BorutaPy
# 加载数据
X = pd.read_csv('boruta/examples/test_X.csv', index_col=0).values
y = pd.read_csv('boruta/examples/test_y.csv', header=None, index_col=0).values
y = y.ravel()
# 定义随机森林分类器
rf = RandomForestClassifier(n_jobs=-1, class_weight='balanced', max_depth=5)
# 创建Boruta特征选择器
feat_selector = BorutaPy(rf, n_estimators='auto', verbose=2, random_state=1)
# 训练并筛选特征
feat_selector.fit(X, y)
# 查看选择的特征
print(feat_selector.support_)
# 查看特征排名
print(feat_selector.ranking_)
# 转换数据,只保留重要特征
X_filtered = feat_selector.transform(X)
核心参数详解
estimator参数
- 类型:object
- 说明:监督学习估计器,必须具有fit方法和feature_importances_属性
n_estimators参数
- 类型:int或string
- 默认值:1000
- 说明:设置集成方法中估计器的数量。如果设置为'auto',则根据数据集大小自动确定。
perc参数
- 类型:int
- 默认值:100
- 说明:使用用户定义的分位数来选择阴影特征和真实特征比较的阈值。较低的perc值会选出更多误报作为相关特征,但也会遗漏较少的相关特征。
alpha参数
- 类型:float
- 默认值:0.05
- 说明:在两个校正步骤中拒绝校正p值的水平。
two_step参数
- 类型:Boolean
- 默认值:True
- 说明:如果设置为False,则使用仅使用Bonferroni校正的原始Boruta实现。
max_iter参数
- 类型:int
- 默认值:100
- 说明:执行的最大迭代次数。
算法优势
BorutaPy相比原始R包有以下改进:
- 更快的运行时间:得益于scikit-learn的优化
- scikit-learn风格接口:易于集成到现有工作流中
- 兼容性:可与scikit-learn中的任何集成方法配合使用
- 自动n_estimator选择:简化配置过程
- 特征排名:提供特征重要性排序
- 基于基尼不纯度的特征重要性:与RandomForest R包的MDA不同
实际应用场景
BorutaPy特别适用于以下场景:
- 生物信息学数据分析
- 金融风险建模
- 医疗诊断特征选择
- 工业过程优化
技术细节
分位数阈值
原始方法使用阴影特征的最大值作为阈值来决定哪些真实特征比阴影特征表现更好。这可能过于严格。通过perc参数,可以设置阴影特征重要性的分位数,算法将其用作阈值。
多重检验两步校正
通过将其设为两步过程而不是严格的一步Bonferroni校正,放松了多重检验的校正。第一步使用广泛使用的Benjamini Hochberg FDR,第二步应用Bonferroni校正。
示例数据
项目提供了Madalon数据集示例,包含:
- test_X.csv:特征数据文件
- test_y.csv:标签数据文件
- Madalon_Data_Set.ipynb:完整的Jupyter Notebook示例
总结
BorutaPy是一个功能强大的全相关特征选择工具,特别适合需要理解数据生成现象的场景。它能够识别所有对预测有贡献的因素,而不仅仅是在特定方法背景下最明显的信号。通过灵活的参数配置和优化的算法实现,BorutaPy为Python用户提供了高效可靠的特征选择解决方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



