IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Boruta原理及Python-BorutaPy的API应用 -> 正文阅读

[人工智能]Boruta原理及Python-BorutaPy的API应用

一、基本介绍

Boruta 算法是一种特征筛选方法,其核心是基于两个思想:shadow features和binomial distribution。
该算法可以自动在数据集上执行特征选择。作为 R 的一个包而诞生。目前 Python 的 Boruta 版本是 BorutaPy。

二、基本原理

2.1 算法原理

2.1.1 前言
假设检验原理:https://blog.csdn.net/andy_shenzl/article/details/81453509

2.1.2 算法步骤

  • 创建阴影特征 (shadow feature) 。从X开始,对每个真实特征R,随机打乱顺序,这些被打乱顺序的原始特征称为阴影特征(shadow features)。此时,阴影数据帧将附加到原始数据帧以获得新的数据帧,该数据帧的列数是X的列数的两倍。 在Boruta中,原始特征之间不会相互竞争。相反,原始特征与shuffle后的特征(shadow features)竞争
    在这里插入图片描述

  • 获取重要性。用新的特征矩阵N作为输入,训练模型,能输出feature_importances_的模型,如RandomForest, lightgbm,xgboost都可以,得到真实特征和阴影特征的feature importances

  • 设置阈值。取阴影特征feature importance的百分位数作为阈值(原始版本为最大值S_max),真实特征中feature importance大于阈值的,记录一次命中。

  • 特征筛选。累计各特征命中数,结合命中数和迭代次数做假设检验。根据不同检验统计指标值和显著性水平的对比(大于alpha)得到接受的重要特征和拒绝的不重要特征,删除不重要的特征。假设检验保留的则是boruta认为和标签值之间存在着较好的关联的可接受的特征。
    在这里插入图片描述

  • 迭代。重复上述步骤,知道每个特征都被标记过或达到迭代次数。
    在这里插入图片描述

2.1.3 boruta假设检验

在这里插入图片描述

  • 拒绝区域(红色区域):此处结束的要素被视为噪音,因此将其丢弃;
  • 一个无法解决的区域(蓝色区域):Boruta对于该区域中的特征犹豫不决;
  • 可接受区域(绿色区域):此处的特征被认为是可预测的,因此将其保留。

上述步骤中的假设检验都是针对单次的迭代进行的,实际上boruta内部一共迭代n次,n由用户来指定,如果迭代n次则我们必须做n次的假设检验,而进行n次的假设检验的问题在于我们无法保证这n次假设检验的通过与否不受随机性的干扰,每一次假设检验也有通过与不通过两种状态,所以我们在这个层面上也要考虑进行一定的处理。

  • Bonferroni校正。boruta R包的原生解决方案,Bonferroni校正,使用了更加严格的显著性水平。比如我们原始设置的显著性水平为0.05,进行了10次的独立的假设检验,那么我们每次检验的显著性水平应该变成0.05/10=0.005,显然这样对于单次假设检验来说,这么低的显著性水平的要求是非常苛刻的,这样的处理方案很多时候太过严格,导致太多弱关联性的特征被删除。
  • 两步校正。BorutaPy采用的是BH检验。

2.1.4 注意
对于相关性问题,boruta是比较敏感的,因为保留的是重要性高于随机生成特征重要性的特征。显然,所有相关属性的集合可能包含相互之间相关性特别强的特征(boruta对特征共线性问题并没有做出处理),所以还是要先做相关性分析与处理之后再做分析比较稳妥。另外小样本可能也是一个影响的因素。

2.2 BorutaPy包

2.2.1参数详解
在这里插入图片描述
2.2.2属性详解
在这里插入图片描述

2.2.3 案例

import pandas as pd
from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor
from boruta import BorutaPy
import numpy as np
def boruta_test2():
    X = pd.read_csv(r'G:\\Algorithm\\practice\\csv_data\\test_X.csv', index_col=0)
    y = pd.read_csv(r'G:\\Algorithm\\practice\\csv_data\\test_y.csv', header=None, index_col=0).values
    y = y.ravel()

    rf = RandomForestRegressor(n_jobs=-1, max_depth=5)
    boruta_model = BorutaPy(
        estimator=rf,
        n_estimators='auto',
        max_iter=100  # number of trials to perform
    )

    # 模型训练
    boruta_model.fit(np.array(X), np.array(y))
    # 输出结果
    boruta_model.support_    #筛选后的特征,False代表滤除掉此特征
    boruta_model.ranking_   #1为选定的特征,2为暂定特征
    green_area = X.columns[boruta_model.support_].to_list()
    blue_area = X.columns[boruta_model.support_weak_].to_list() 
    print('features in the green area:', green_area)
    print('features in the blue area:', blue_area)

if __name__ == "__main__":
    boruta_test2()

三、参考文献
假设检验:https://blog.csdn.net/andy_shenzl/article/details/81453509
boruta中的假设检验:https://zhuanlan.zhihu.com/p/83550478
boruta介绍:https://blog.csdn.net/weixin_39653948/article/details/109995763

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 09:57:29  更:2022-05-14 09:59:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:39:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码