首页 > 其他分享 >Boruta特征选择

Boruta特征选择

时间:2024-03-25 22:22:39浏览次数:16  
标签:features 特征选择 selected cols selector np feat Boruta

Boruta特征选择

官方github地址:https://github.com/scikit-learn-contrib/boruta_py?tab=readme-ov-file

论文地址:https://www.jstatsoft.org/article/view/v036i11

官方代码:

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)

在本地运行时出现了问题:AttributeError: module 'numpy' has no attribute 'int'. np.int was a deprecated alias for the builtin int.就是numpy的1.20版本以后的都不在支持np.int,我尝试了降低numpy版本,但是报错wheel出问题了。看了github上的issues很多人都遇到了同样的问题,解决办法就是在调用boruta = BorutaPy(estimator=rf)前加三行代码:

np.int = np.int32
np.float = np.float64
np.bool = np.bool_

boruta = BorutaPy(estimator=rf)
boruta.fit(x, y)

下面是我修改后以及适配我的需求的代码:

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

file_names_to_add = ['xxx', 'xxxx']
file_path2 = '../xxxx'

for file_name in file_names_to_add:
    input_file_path = f"{file_path2}{file_name}.xlsx"
    print(input_file_path) 

    sheet_name_nor = 'xxx'

    y_tos = ['xxx', '...']

    for y_to in y_tos:
        sheet_name_uni = y_to
        print(sheet_name_uni)

        df = pd.read_excel(input_file_path, sheet_name=sheet_name_nor)

        cols_to_pre = ['xxxxxxx', 'xxxxxx','...']

        missing_cols = [col for col in cols_to_pre if col not in df.columns]
        if missing_cols:
            print(f"{missing_cols} not found in the, skipping.")
            cols_to_pre = [col for col in cols_to_pre if col in df.columns]

        # load X and y
        # NOTE BorutaPy accepts numpy arrays only, hence the .values attribute
        X = df[cols_to_pre].values
        y = df[y_to].values

        np.int = np.int32
        np.float = np.float64
        np.bool = np.bool_

        # 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)
        selected_features = [cols_to_pre[i] for i, support in enumerate(feat_selector.support_) if support]

        print('Selected features: ', selected_features)
        print('Feature ranking: ', feat_selector.ranking_)

因为'feat_selector.support_' 放回的是一个布尔数组,当我们想打印出选出来的特征时直接打印不行,需要通过使用布尔索引来解决这个问题。

selected_features = [cols_to_pre[i] for i, support in enumerate(feat_selector.support_) if support]

上段代码遍历 cols_to_pre 列表,并且只选择 feat_selector.support_ 中为 True 的列。

标签:features,特征选择,selected,cols,selector,np,feat,Boruta
From: https://www.cnblogs.com/benbenlzw/p/18095550

相关文章

  • Python特征选择技术总结
    本文还可以帮助你解答以下的面试问题:什么是特征选择?说出特性选择的一些好处你知道哪些特征选择技巧?区分单变量、双变量和多变量分析。我们能用PCA来进行特征选择吗?前向特征选择和后向特征选择的区别是什么?什么是特征选择,为什么它很重要?特性选择是选择与ML模型......
  • Python特征选择技术总结
    本文还可以帮助你解答以下的面试问题:什么是特征选择?说出特性选择的一些好处你知道哪些特征选择技巧?区分单变量、双变量和多变量分析。我们能用PCA来进行特征选择吗?前向特征选择和后向特征选择的区别是什么?什么是特征选择,为什么它很重要?特性选择是选择与ML模型......
  • R语言LASSO特征选择、决策树CART算法和CHAID算法电商网站购物行为预测分析
    全文链接:http://tecdat.cn/?p=32275原文出处:拓端数据部落公众号本文通过分析电子商务平台的用户购物行为,帮助客户构建了一个基于决策树模型的用户购物行为预测分析模型。该模型可以帮助企业预测用户的购物意愿、购物频率及购买金额等重要指标,为企业制定更有针对性的营销策略提供......
  • 【机器学习】特征选择与稀疏学习
    特征选择和稀疏学习子集搜索与评价对象都有很多属性来描述,属性也称为特征(feature),用于刻画对象的某一个特性。对一个学习任务而言,有些属性是关键有用的,而有些属性则可能不必要纳入训练数据。对当前学习任务有用的属性称为相关特征(relevantfeature)、无用的属性称为无关特征(irrelevan......
  • 基于协方差矩阵自适应演化策略(CMA-ES)的高效特征选择
    特征选择是指从原始特征集中选择一部分特征,以提高模型性能、减少计算开销或改善模型的解释性。特征选择的目标是找到对目标变量预测最具信息量的特征,同时减少不必要的特征。这有助于防止过拟合、提高模型的泛化能力,并且可以减少训练和推理的计算成本。如果特征N的数量很小,那么穷......
  • 特征选择 - Fisher Score
    特征选择的目的在理想情况下,特征选择想要达到以下效果:简化模型以提高可解释性:通过减少特征的数量,模型变得更简单,更容易理解。这对于那些需要理解模型如何做出预测的领域(如医疗或信贷评分)非常重要。改进模型性能:通过消除无关或冗余的特征,模型的预测性能可能会得到提高。这是......
  • 特征选择的3种方法
    当数据维数比较大时,就需要进行降维,特征选择是降维的一种主要方式,又包括3种方法:Filter、Wrapper和Enbedding。1.Filter过滤器方法,这种方法首先选定特征,再来进行学习。根据每一个属性的一些指标(如方差等),来确定这个属性的重要程度,然后对所有属性按照重要程度排序,从高到低的选择属性。......
  • 推荐系统中常用的特征选择方法
    背景推荐系统已经迈入了深度学习时代,模型结构比较复杂,下面介绍在深度学习背景下常用的特征选择方法 1.根据特征在正负样本上分布的差异直观感觉上一个特征越重要,那么它在正负样本的分布差异应该是越大的,基于此我们可以用KL散度来表示特征重要性,但是KL散度是非对称,我们可以采......
  • 基于模型过程中的特征选择
    特征选择的常用方法过滤法按照发散性或者相关性对各个特征进行评分,通过设定阈值或者待选择阈值的个数来选择特征。包装法根据目标函数(通常是预测效果评分)每次选择若干特征,或者排除若干特征。嵌入法使用机器学习的某些算法或模型进行训练,得到各个特征的权值系数,并根据系数从......
  • 利用无限潜在特征选择ILFS算法对分类特征变量做特征重要性排序,实现特征选择。
    利用无限潜在特征选择ILFS算法对分类特征变量做特征重要性排序,实现特征选择。通过重要性排序图,选择重要的特征变量,以期实现数据降维的目的。程序直接替换数据就可以用,程序内有注释,方便学习和使用。程序语言为matlab。ID:3530682564934266......