python特征递归消除

一、基础知识了解

 特征递归消除官方给了两者方法

1.RFE

2.RFECV

一.RFE

官方解释

链接:sklearn.feature_selection.RFE — scikit-learn 1.0.2 documentationhttps://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html?highlight=rfe#sklearn.feature_selection.RFE        给定一个为特征分配权重的外部估计器(例如,线性模型的系数),递归特征消除(RFE)的目标是通过递归地考虑越来越小的特征集来选择特征。首先,估计器在初始特征集上进行训练,每个特征的重要性通过任何特定属性或可调用获得。然后,从当前的特征集中剪除最不重要的特征。该过程在修剪后的集合上递归重复,直到最终达到要选择的所需特征数量。

sklearn.feature_selection.RFE

重要参数

参数参数说明
estimator

监督学习估计有fit提供有关功能的重要性(如信息的方法coef_feature_importances_

只估计器有具备这两个的其中一个才能进行特征递归消除

例如:随机森林

n_features_to_select要选择的特征数。如果None,则选择一半的特征。如果是整数,则参数是要选择的特征的绝对数量。如果在 0 和 1 之间浮动,则它是要选择的特征的一部分。
step如果大于或等于 1,则step对应于每次迭代要删除的(整数)个特征。如果在 (0.0, 1.0) 范围内,则step对应于每次迭代中要删除的特征的百分比(向下舍入)

重要属性

属性属性说明
ranking_特征排名,ranking_[i] 对应于第 i 个特征的排名位置。选定(即估计的最佳)特征被分配等级 1。
support_所选特征的掩码。

二.RFECV

使用交叉验证进行递归特征消除以选择特征数量

链接

sklearn.feature_selection.RFECV — scikit-learn 1.0.2 documentationhttps://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFECV.html?highlight=rfe#sklearn.feature_selection.RFECV

sklearn.feature_selection.RFECV

重要参数

参数参数说明
estimator

和RFE一样

一种监督学习估计器,其fit方法通过coef_ 属性或feature_importances_属性提供有关特征重要性的信息。

step

和RFE一样

如果大于或等于 1,则step对应于每次迭代要删除的(整数)个特征。如果在 (0.0, 1.0) 范围内,则step对应于每次迭代中要删除的特征的百分比(向下舍入)。请注意,最后一次迭代可能会删除少于 的step特征以达到min_features_to_select.

cv

确定交叉验证拆分策略。cv 的可能输入是:

  • 无,使用默认的 5 折交叉验证,

  • 整数,指定折叠次数。

重要属性

属性属性说明
ranking_特征排名,ranking_[i] 对应于第 i 个特征的排名位置。选定(即估计的最佳)特征被分配等级 1。
support_所选特征的掩码。

利用RFE进行

1.利用现有数据,对所选估计器进行参数优化

2.查看估计器的特征重要性

3.根据重要性,自行确定要选择的特征数 或者 利用曲线图选取最优特征数量(以折线图为主重要性为辅助参考)

重要性

从下面曲线图可以看出39因子的时候分数最高

4.开始进行特征消除

代码如下

import pandas as pd
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import RFECV
from sklearn.feature_selection import RFE
import numpy as np
# 1.读取训练数据集
filepath = r"G:\zwh\付老师\河南\1221\2010和2020建模数据\4.高砷点与筛选后的低砷点合并2010.xls"
#特征因子个数
feature_number = 45
data = pd.read_excel(filepath)  # reading file
data = np.array(data)
X=data[:,0:feature_number]
Y=data[:,-1]# 1.标准化处理
#标准差标准化(standardScale)使得经过处理的数据符合标准正态分布,即均值为0,标准差为1
#概念
#标准化:缩放和每个点都有关系,通过均值μ和标准差σ体现出来;输出范围是负无穷到正无穷
#优点
#提升模型的收敛速度
#提升模型的精度
#使用场景
#如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响
scaler = StandardScaler()
X_train = scaler.fit_transform(X)# 2.构建RF模型
#参数是基于个人数据优化的结果
RFC_model = RFC(n_estimators=41,max_depth=12,max_features=1,min_samples_leaf=1,min_samples_split=14,criterion='gini')                               # 随机森林
#feature_importances_基于杂质的特征重要性
RFC_feature_importances = RFC_model.fit(X, Y).feature_importances_    # 特征重要性
print("模型特征因子重要性:")
print(RFC_feature_importances)# 3.递归特征消除法和曲线图选取最优特征数量
# 建立得分列表
score = []
#range创建的结果不包括feature_number+1
for i in range(1, feature_number+1, 1):#fit_transform适合数据,然后转换它#为什么y不进行分类,因为数据的类别是事前确定的,如果更改y,那么数据就与现实情况不符X_transform = RFE(RFC_model, n_features_to_select=i, step=1).fit_transform(X, Y)# 交叉验证RFE_score = cross_val_score(RFC_model, X_transform, Y, cv=10).mean()# 交叉验证结果保存到列表score.append(RFE_score)
print('输出所有分类结果',score)
print('输出最优分类结果',max(score),'对应的特征数量', (score.index(max(score))*1)+1)# 输出最优分类结果和对应的特征数量
plt.figure(figsize=[20, 5])
plt.plot(range(1, 46, 1), score)
plt.xticks(range(1, 46, 1))
plt.show()# 4.递归特征消除法
# n_features_to_select表示筛选最终特征数量,step表示每次排除一个特征
selector1 = RFE(RFC_model, n_features_to_select=(score.index(max(score))*1)+1, step=1).fit(X, Y)
#所选特征的掩码和
print('RFE所选特征的掩码',selector1.support_)
print('RFE特征排除排序',selector1.ranking_)
print('RFE选择特征数量',selector1.n_features_)
X_transform1 = selector1.transform(X)
RFE_optimal_score =cross_val_score(RFC_model, X_transform1, Y, cv=10).mean()
print('RFE最优特征交叉验证分数',RFE_optimal_score)# 5. 交叉验证递归特征消除法
#使用交叉验证进行递归特征消除以选择特征数量。
# 采用交叉验证,每次排除一个特征,筛选出最优特征
selector = RFECV(RFC_model, step=1, cv=10)
selector = selector.fit(X, Y)
RFECV_X_transform = selector.transform(X)
# 最优特征分类结果
RFECV_optimal_score =cross_val_score(RFC_model , RFECV_X_transform, Y, cv=10).mean()
print('RFECV最优特征交叉验证分数',RFECV_optimal_score)
print("最佳数量和排序")
print('RFECV选取结果',selector.support_)
print('RFECV选取特征数量',selector.n_features_)
print('RFECV依次排数特征排序',selector.ranking_)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SIP 中的Dialog,call,session 和 transaction .

如果你对Sip协议中Call, Dialog, Transaction和Message之间的关系感觉到迷惑,那么,那么我可以告诉你,你并不孤单,因为大多数初学者对于这些名词之间的关系都会感到疑惑.Messages(消息) 消息是在服务器和客户端之间交换的独立文本, 有两种类型的消息,分别是请求(Requests)和响应…

JS 获取当前日期时间(兼容IE FF)

以前在页面中获得当前时间的方法如下: function SelectTodayClient() {var d new Date();var taday d.getYear() "-" (d.getMonth() 1) "-" d.getDate(); alert($(taday);} IE运行正常,FF运行如下: 这…

再次携号转网_潍坊一小伙欲携号转网屡被拒 联通客服:试运营状态不支持携转...

携号转网,也就是在手机号码保持不变的情况下,可以更换运营商,潍坊市民夏先生给记者打来电话说,他有一张联通的电话卡,想要办理携号转网业务,十几天过去了,号没转出去,还生了一肚子气…

机器学习参数优化数据改用所有数据还是训练集

参数优化过程中所用数据应该用训练集 (占所有数据的一部分),如果用所有数据会导致模型评估的所有结果都偏高,因为这些评估都涉及测试集,如果用所有数据进行训练,导致测试集预测结果大部分都正确&#xff0c…

《当程序员的那些狗日日子》(三十六)无名的配角

人事助理姐姐帮我办理完续签手续后,我也回到原来的工作状态,继续处理手上的工作。 之前洪协助我完成了客服后台的一些新功能,但是在投入使用后,我发现这些功能还是存在较大的问题,本来我以为就要离开公司了&#xff0c…

8个树莓派超级计算机_6 个可以尝试的树莓派教程

这些树莓派项目均旨在简化你的生活并提高生产力。-- Lauren Pritchett(作者)没有什么比体验树莓派创作结果更令人兴奋了。经过数小时的编程、测试和徒手构建,你的项目终于开始成形,你不禁大喊 “哇哦!”树莓派可以带给日常生活的可能性让我着…

SIP应答消息状态码与功能

SIP应答消息状态码与功能 类型 状态码 状态说明 临时应答(1XX) 100 Trying 正在处理中 180 Ringing 振铃 181 call being forwarder 呼叫正在前向 182 queue 排队 181* session progress 会话进行 会话成功(2XX) 200 OK 会话成功 重定向(3XX) 300 multiple 多重选择 301 moved …

sklearn的逻辑回归

官方逻辑回归链接 sklearn.linear_model.LogisticRegression — scikit-learn 1.0.2 documentationhttps://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression 一,参数说明 1.1…

Ext scope 学习

首先,用一句话来概括scope的作用:scope就是用来解决 js 中 this 的指向问题。 下面进行讨论: 1、 关于JavaScript中this的使用,这是一个由来已久的问题了。我们这里就不介绍它的发展历史了,只结合具体的例子&#xff…

python某公司为员工发放奖品_python 练习2

#######假定有下面这样的列表:names [fentiao, fendai, fensi, apple]输出结果为:I have fentiao, fendai, fensi and apple.names [fentiao, fendai, fensi, apple]print I have ,.join(names[:-1]) and names[-1]######系统里面有用户 用户有密码users [root,westos…

SIP 协议 理解

SIP主要支持以下5个方面信令技术功能: 用户定位:确定通信所使用的终端系统位置。主要是和sip服务器实体中的注册服务器和非sip实体的 位置服务器相关,每个用户在上线的所在的sip实体,会将该用户的sip号(sip域中的唯一…

sklearn中的支持向量机SVC

官方链接 sklearn.svm.SVC — scikit-learn 1.0.2 documentationhttps://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC该方法是基于libsvm(支持向量机库)实现的 libsvm官网 LIBSVM -- A Library for Support Vec…

python学习正则表达式_Python学习教程(Python学习路线):正则表达式—第二讲

Python学习教程(Python学习路线):正则表达式!前面也有跟大家分享关于正则表达式的Python学习教程,但是有伙伴说还是没完全吸收!这些是很正常的,正则表达式难吗?肯定难!不是一次教程就能完全掌握…

ArcGIS之GP服务发布

模型构建器官方解释: 链接 什么是模型构建器? 1.模型构建器是一个用来创建、编辑和管理模型的应用程序。模型是将一系列地理处理工具串联在一起的工作流,它将其中一个工具的输出作为另一个工具的输入。也可以将模型构建器看成是用于构建工…

认知与设计:理解UI设计准则——序

交互计算机系统的设计不仅仅是门艺术,也是(至少追求成为)一门科学。好吧,实际上不是科学,但可以说是一门计算机和认知学的交叉工程学科,基于科学的技术方法创造满足指定需求的交互系统。   就像汽车、建筑…

开源的SIP协议栈 PJSIP

PJSIP是一个开放源代码的SIP协议栈。它支持多种SIP的扩展功能,目前可说算是最流行的sip协议栈之一了。 下面列出其重要的几种优点: 1)代码层次非常清晰,从低级到高级都提供了很方便的接口供开发; 2)提供相当…

卸载idea_IDEA 不为人知的 5 个骚技巧!真香!

来自公众号:Java中文社群工欲善其事,必先利其器,磊哥最近发现了几个特别棒的 IDEA“骚”技巧,已经迫不及待的想要分享给你了,快上车...1.快速补全行末分号使用快捷键 Shfit Ctrl Enter 轻松实现。2.自带的 HTTP 请求…

网格搜索支持向量机运行结束不了

from sklearn import svm, model_selection import pandas as pd import numpy as np #支持向量机主要调节的参数有:C、kernel、degree、gamma、coef0。 #C 默认 1.0正则化参数。 #kernel {‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’}, defaul…

Oracle高级SQL培训与讲解

1 With子句 1.1 学习目标 掌握with子句用法,并且了解with子句能够提高查询效率的原因。 1.2 With子句要点 1. with子句的返回结果存到用户的临时表空间中,只做一次查询,反复使用,提高效率。2. 如果定义了with子…

理解会话

一 会话的初始化 Session用于进行媒体流传送。当一方发出请求,而另外一方或多方接受请求并通过信令交互成功后才能建立会话。 一次呼叫只能建立一次会话,但可以建立多个对话(Dialog),因为接受请求的可能不止一个。 …