RFE递归式特征消除

1 声明

本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理。

2 RFE递归式特征消除简介

RFE(Recursive Feature Elimination)是特征选择的算法.它的工作原理是从训练数据集中的所有特征开始搜索特征子集,并成功地删除特征,直到保留所需的数量。这是通过对给定的算法模型进行拟合,按重要性对特征进行排序,丢弃最不重要的特征,并重新拟合模型来实现的。这个过程不断重复,直到特定数量的特征被保留下来。RFE的执行过程如下:

  1. 初始的特征集为所有可用的特征。
  2. 使用当前特征集进行建模,然后计算每个特征的重要性。
  3. 删除最不重要的一个(或多个)特征,更新特征集。
  4. 跳转到步骤2,直到完成所有特征的重要性评级。

3 RFE代码示例

import pandas as pd
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
pd.options.display.max_columns = None
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import StratifiedKFold
from sklearn.feature_selection import RFECV
data=pd.read_csv('../input/titanic.csv')
# 数据清洗,删除无用特征,axis=1是按照列操作。
data.drop(['Ticket', 'PassengerId'], axis=1, inplace=True)
# 分类变量转换,通过Dataframe的repalce结合字典映射。
gender_mapper = {'male': 0, 'female': 1}
data['Sex'].replace(gender_mapper, inplace=True)
#提取Title字段里的提取出称谓并做二值化转换。
data['Title'] = data['Name'].apply(lambda x: x.split(',')[1].strip().split(' ')[0])
data['Title'] = [0 if x in ['Mr.', 'Miss.', 'Mrs.'] else 1 for x in data['Title']]
data = data.rename(columns={'Title': 'Title_Unusual'})
data.drop('Name', axis=1, inplace=True)data['Cabin_Known'] = [0 if str(x) == 'nan' else 1 for x in data['Cabin']]
data.drop('Cabin', axis=1, inplace=True)#对Embarked字段进行One-Hot编码,生成哑变量
emb_dummies = pd.get_dummies(data['Embarked'], drop_first=True, prefix='Embarked')
data = pd.concat([data, emb_dummies], axis=1)
data.drop('Embarked', axis=1, inplace=True)
# 用均值填充age字段
data['Age'] = data['Age'].fillna(int(data['Age'].mean()))# 删除相关性高的特征,当前数据集特征无强相关性,所以correlated_features集合为空。
correlated_features = set()
correlation_matrix = data.drop('Survived', axis=1).corr()for i in range(len(correlation_matrix.columns)):for j in range(i):if abs(correlation_matrix.iloc[i, j]) > 0.8:colname = correlation_matrix.columns[i]correlated_features.add(colname)
data.drop(correlated_features)#定义X(所有特征)和Target、y(目标变量)
X = data.drop('Survived', axis=1)
target = data['Survived']
# random_state=101,随机种子,为了数据的可再现。
rfc = RandomForestClassifier(random_state=101)
'''
estimator:某个模型实例,这里用的是随机森林
step:每次迭代时要删除的特征个数
cv:交叉验证,用StratifiedKFold并指定K是10
scoring:指定优化时的度量方法,这里选择是'accuracy',精确度。'''
rfecv = RFECV(estimator=rfc, step=1, cv=StratifiedKFold(10), scoring='accuracy')
rfecv.fit(X, target)
#
print('优化后的特征个数是: {}'.format(rfecv.n_features_))#调用grid_scores_画图。
plt.figure(figsize=(16, 9))
plt.title('RFE_交叉验证', fontsize=18, fontweight='bold', pad=20)
plt.xlabel('被选择的特征', fontsize=14, labelpad=20)
plt.ylabel('% 选择的分类数', fontsize=14, labelpad=20)
plt.plot(range(1, len(rfecv.grid_scores_) + 1), rfecv.grid_scores_, color='#303F9F', linewidth=3)
plt.show()

4 总结

RFE递归式特征消除相关推荐

  1. 使用RFE(反向特征消除)进行数据降维

    1 直接使用skl库即可 skl含有的rfe库可以直接以多个变量为目标进行数据降维(主要特征提取),该代码源于2020年华为杯数模比赛b题,项目代码以及数据见:https://github.com/x ...

  2. 利用多项式特征生成与递归特征消除解决特征组合与特征选择问题

    目录 项目背景 技术栈 实现 数据 代码 总结 项目背景 无论是对于什么数据都存在两个非常经典的问题:问题一是,数据与标签之间,数据与数据之间的一些实际关系很难搞清楚.有些时候特征A,特征B可能都与标 ...

  3. 使用特征_R语言-使用caret包实现特征选择:递归特征消除(RFE)算法

    在caret(short for classification and regression training)包中有多个函数可以实现特征选择,总的分为封装法和过滤法.封装法,将特征选择过程与训练过程 ...

  4. python卡方检验筛选特征原理_基于Python的遥感特征筛选—递归特征消除(RFE)与极限树(Extra-Trees)...

    引言 基于前几篇文章关于筛选方法的介绍,本篇同样给大家介绍两种python封装的经典特征降维方法,递归特征消除(RFE)与极限树(Extra-Trees, ET).其中,RFE整合了两种不同的超参数, ...

  5. R语言基于递归特征消除RFE(Recursive Feature Elimination)进行特征筛选(feature selection)

    R语言基于递归特征消除RFE(Recursive Feature Elimination)进行特征筛选(feature selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可 ...

  6. 使用RFECV、递归特征消除 (Recursive Feature Elimination)进行特征筛选详解及实战

    使用RFECV.递归特征消除 (Recursive Feature Elimination)进行特征筛选详解及实战 包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征. 所 ...

  7. 特征选择之支持向量机递归特征消除(SVM-RFE)

    支持向量机递归特征消除(下文简称SVM-RFE)是由Guyon等人在对癌症分类时提出来的,最初只能对两类数据进行特征提取.它是一种基于Embedded方法. 支持向量机 支持向量机广泛用于模式识别,机 ...

  8. R语言使用caret包的rfe函数进行特征筛选、选择、特征消除RFE(Recursive Feature Elimination)进行特征筛选(feature selection)

    R语言使用caret包的rfe函数进行特征筛选.选择.特征消除RFE(Recursive Feature Elimination)进行特征筛选(feature selection) 目录

  9. 递归特征消除和K折交叉验证(以决策树回归为例)

    与特征选择不同的是递归特征消除后不会输出权值 导入相应模块 import matplotlib.pyplot as plt import numpy as np import pandas as pd ...

最新文章

  1. 无法量产自动驾驶汽车的企业,与谷歌公司差在哪儿
  2. mysql如何提高其查询速度的方法
  3. 数据表格搜索php代码_手把手教学:提取PDF各种表格文本数据(附代码)
  4. com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围
  5. Java操作Kafka创建Topic、Producer、Consumer
  6. 菜鸟学习数据科学家 5 大误区
  7. springboot接收浏览器发送delete请求( method not allowed 405解决方法)
  8. Nginx + PHP(php-fpm)遇到的502 Bad Gateway错误
  9. 关于ssm框架的整理(三) 2021-05-11
  10. java unicode32_【JAVA SE基础篇】32.String类入门
  11. php无线级输出数据,thinkphp5.0无限极分类及格式化输出
  12. 游戏开发之C++类中的static、const梳理总结(C++基础)
  13. mysql的skip-slave-start参数
  14. 《学习之道》第二章专注思维和发散思维
  15. 软件资格证考试——初级程序员
  16. U3D游戏开发工程师正确入行姿势指南
  17. Linux——(1)基本命令
  18. python tk checkbutton_Python tkinter之CheckButton(多选框)
  19. Jeecg-Boot简介
  20. Node-RED使用指南:22:定制化Node的使用方法

热门文章

  1. 八关斋戒的内容、功德及其受持方法
  2. 用PS制作个人食品网站首页
  3. 2020年小红书校招数据分析笔试题
  4. 文件系统 1 之 根文件系统制作
  5. Spring AOP及其在SpringBoot中的使用
  6. 营销宝典:让天下没有难写的营销软文
  7. 软件加入使用时间_Nice!一个软件搞定录屏/剪辑 ScreenFlow(含入门教程)| Mac软件天堂...
  8. 三菱服务器显示代码d2,三菱QD64D2手册QD64D2用户手册 - 广州凌控
  9. git-reflog用法回顾
  10. python 实现录音加百度语音识别