boruta特征选择的python实现

Boruta的Python项目详细描述


Boruta_py

此项目托管了boruta所有相关功能选择方法的python实现

[相关博文](http://danielhomola.com/2015/05/08/borutapy-an-all-relevant-feature-selection-method/

依赖关系

  • 努比
  • scipy
  • SCIKIT学习

如何使用

下载、导入并执行与任何其他scikit学习方法相同的操作:

  • 适合(X,Y)
  • 变换(x)
  • 拟合变换(x,y)

说明

Boruta R包的Python实现。

这个实现试图模拟scikit学习接口,所以使用fit, 变换或拟合变换,以运行功能选择。

有关更多信息,请参阅这些函数的文档和下面的示例。

原始代码和方法作者:Miron B Kursa,https://m2.icm.edu.pl/boruta/

Boruta是一种全相关的特征选择方法,而大多数其他方法都是 最小最优;这意味着它试图找到所有带有 可用于预测的信息,而不是找到可能的压缩 某些分类器误差最小的特征子集。

为什么要费心选择所有相关的功能? 当你试图理解产生数据的现象时,你应该 关心所有导致它的因素,而不仅仅是最明显的迹象 在你的方法论背景下(是的,最小的最佳特性集 根据定义,取决于分类器的选择。

波鲁塔派有什么不同?

它是用python重新编码的原始r包,并增加了一些额外的特性。 一些改进包括:

  • 得益于scikit learn,更快的运行时间

  • scikit类学习界面

  • 与scikit learn中的任何集成方法兼容

  • 自动n_估计器选择

  • 功能排序

有关详细信息,请查看文档字符串的顶部。

我们强烈建议使用深度在3-7之间的修剪过的树。

另外,在对原始代码进行了大量的研究之后,我确定了几个方面 其中核心算法可以改进/修改以使其不那么严格 更适用于生物数据,其中Bonferroni校正可能是 过于苛刻。

百分比作为阈值 原始方法使用阴影特征的最大值作为 决定哪一个真实的特征比影子的更好。这可能是 过于苛刻。

为了控制这个,我添加了perc参数,它设置 阴影特征重要性的百分位数,该算法用作 门槛。默认值为100,等于取最大值作为 R版的Boruta有,但可以放松。注意,因为这是 百分比,它随数据集的大小而变化。有几千个 它的功能不像Boruta跑步结束时的几十个那样严格。

多次测试的两步校正
将多次测试的校正简化为两步 过程,而不是严格的一步Bonferroni校正。

我们需要首先纠正,因为在每次迭代中,我们测试了 与零假设相反的特性(特性是否比 随机的)。为此,在原始的 已知在这种情况下过于严格的代码(至少对于 生物数据),以及原始代码修正n个特征,即使 我们在第50次迭代中只剩下k<;<;n个特性。为此 校正的第一步是广泛使用的Benjamini Hochberg FDR。

在那之后不过,我们也需要解释一下 在每次迭代中使用 同样的测试。在这种情况下,Bonferroni是完美的,因此它被应用于 用当前迭代索引偏离p值阈值。

如果不需要此两步校正,则必须使用 设置为false,则(perc=100)borutapy的行为与r版本完全相同。

参数

估计器:对象

< Buff行情>

一种有监督的学习估计器,其"拟合"方法返回 重要特性。重要特征必须与 功能重要性中的高绝对值。

n_估计量:int或string,默认值=1000

< Buff行情>

如果int设置所选系综方法中的估计数。 如果"auto",则根据 数据集。所用估计器的其他参数需要设置 初始化。

perc:int,默认值=100

< Buff行情>

我们使用用户定义的百分比代替最大值来选择 我们比较阴影和真实特征的阈值。最大值 往往过于严格。这提供了一个更好的控制。这个 perc越低,误报率越高,但 此外,不太相关的功能也将被忽略。通常的权衡。 默认值基本上是香草波鲁塔,对应于最大值。

alpha:浮点,默认值=0.05

< Buff行情>

校正后的p值在两次校正中均被拒绝的水平 步骤:

两步:布尔值,默认值=真

< Buff行情>

如果您想使用Boruta与Bonferroni的原始实现 更正仅将此设置为false。

最大值:int,默认值=100

< Buff行情>

要执行的最大迭代次数。

详细:int,默认值=0

< Buff行情>

控制输出的详细程度。

属性

n_功能:int

< Buff行情>

选定功能的数量。

支持:形状数组[n_功能]

< Buff行情>

所选功能的掩码-只有确认的功能才为真。

支持弱:形状数组[n_功能]

< Buff行情>

选定的尝试性特征的掩码,尚未获得足够的信息 在最大迭代次数期间支持..

排名:形状数组[n_特征]

< Buff行情>

特征排序,使得排序与 第i个功能的排名位置。选定(即,估计 最佳)特征被分配到等级1和暂定特征被分配 等级2,

示例

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from boruta import BorutaPy

# load X and y
# NOTE BorutaPy accepts numpy arrays only, hence the .values attribute
X = pd.read_csv('examples/test_X.csv', index_col=0).values
y = pd.read_csv('examples/test_y.csv', header=None, index_col=0).values
y = y.ravel()

# define random forest classifier, with utilising all cores and
# sampling in proportion to y labels
rf = RandomForestClassifier(n_jobs=-1, class_weight='balanced', max_depth=5)

# define Boruta feature selection method
feat_selector = BorutaPy(rf, n_estimators='auto', verbose=2, random_state=1)

# find all relevant features - 5 features should be selected
feat_selector.fit(X, y)

# check selected features - first 5 features are selected
feat_selector.support_

# check ranking of features
feat_selector.ranking_

# call transform() on X to filter it down to selected features
X_filtered = feat_selector.transform(X)

参考文献

  1. Kursa M.,Rudnicki W.,"Boruta软件包的功能选择",统计软件杂志,第36卷,第11期,2010年9月

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java中MealMaster文件的解析   java在GWT中检测离线和在线状态   xml解析问题在运行时通过Java创建xml文件   java当我们在类名中使用“iOS”作为一个词时,我们应该大写“i”吗?   需要帮助从Java中JSON格式的API响应定义变量吗   获取ip地址类的java代码   Java发送可选参数   java个性化适配器,尝试获取每个元素的id并显示它   java解决方案:迭代器,它不知道是否有下一个元素   java无法删除父实体,因为在双向映射情况下存在子引用   java JColorChooser获取组件   java单元测试同步   java复杂聚合   安卓将声明与java中int数组的定义分开   JavaMQTT主题匹配评估   javascript如何在我的安卓 studio项目中集成第三方应用程序apk?   使用Maven生成java错误   恒定折叠在java中有称为“恒定折叠”的概念吗?