网站首页 > 文章中心 > 其它

python中rfe函数

作者:小编 更新时间:2023-08-25 08:36:58 浏览量:105人看过

C语言编程出现错误,'main' : not in formal parameter list

第二行应该是#includecmath

然后void main 后面应该是加(),而不是 ;

因为这个错误是指"main函数未在正式的参数列表"

你重新调试一下吧,希望能帮到你

递归特征消除(RFE)+ 交叉验证

递归特征消除(Recursive feature elimination)

递归特征消除的主要思想是反复构建模型,然后选出最好的(或者最差的)特征(根据系数来选),把选出来的特征放到一边,然后在剩余的特征上重复这个过程,直到遍历了所有的特征.在这个过程中被消除的次序就是特征的排序.

python中rfe函数-图1

RFE的稳定性很大程度上取决于迭代时,底层用的哪种模型.比如RFE采用的是普通的回归(LR),没有经过正则化的回归是不稳定的,那么RFE就是不稳定的.假如采用的是Lasso/Ridge,正则化的回归是稳定的,那么RFE就是稳定的.

from sklearn.feature_selection import RFE

from sklearn.feature_selection import RFECV

from sklearn.linear_model import LinearRegression,Ridge,Lasso

from pandas import read_csv

import numpy as np

from scipy.stats import pearsonr

python中rfe函数-图2

from sklearn.model_selection import StratifiedKFold

from sklearn.ensemble import RandomForestClassifier

import csv

tps = read_csv('E:\workfile\data\trade\tps.csv', header=0)

label = np.array(tps)[:, 0]

feature = np.array(tps)[:, 1:]

def RFErfe():

看一下RFE的输入参数:

estimator:估计函数,底层的回归模型.一个监督学习的估计函数,有fit方法,fit方法,通过 coef_ 属性或者 feature_importances_ 属性来提供feature重要性的信息.

n_features_to_select : int or None (default=None)选择(最优)feature的数量,超出的部分按照关联性排序.如果选择 None , 就选择一半的feature.

step:int or float, 可选(default=1)如果大于等于1,step对应于迭代过程中每次移除的属性的数量(integer).如果是(0.0,1.0),就对应于每次移除的特征的比例,四舍五入.

可以调用的属性:

n_features_ : int所选特征的数量.

support_ : array of shape [n_features],[n_features]大小的array,所选特征的一种模糊的表示,可以看出来,打印结果就是true和false,最优的是true,别的是false.

ranking_ : array of shape [n_features],[n_features]大小的array,特征的排序,比如 ranking_[i] 表示的就是第i个特征的排名位置.估计最佳的属性被排为1.

这是运行结果.

按照惯例跟进去看一下源码.

传入参数:

estimator:和上面的一样.

step:和上面的一样.

cv:int,交叉验证的生成器或者迭代器.可选.

cv可选择的输入为:

-integer,指定交叉验证的折数.

-一个object用作交叉验证的生成器.

-一种迭代的训练/测试集的分割.

对于None或者integer的输入.如果"y"是二分类或者多分类,就要用

class: sklearn.model_selection.StratifiedKFold

如果估计函数是一个分类器,或者"y"不是二分类也不是多分类,就要用

class: sklearn.model_selection.KFold

这里可以使用多种交叉验证的方法.

我这里使用的是回归的数据,所以呢可以知道使用的是KFold.

跟进去看一下KFold的源码.

shuffle : boolean, optional,可选.是否在分割成若干批次之前对数据进行洗牌.

random_state : int, RandomState 实例,或者None, optional, 可选default=None默认None.

如果是int, random_state是随机数生成器的种子.(指定一个,不指定的话每次结果都会不一样)

如果是RandomState 实例, random_state是随机数生成器.

如果是None,随机数是通过 RandomState 实例 np.random 生成的.此时 shuffle == True.

scoring : string, callable(可调用的) or None, optional,可选的 default: None,默认:None,评分标准.一个string型(参考model evaluation documentation模型评估文档)或者一个可以调用的评分object/function

with signature scorer(estimator, X, y) .

可调用的属性:

n_features_ : int,通过交叉验证得到的特征选择的数量.

support_:和上面一样.

ranking_:和上面一样.

grid_scores_:array of shape [n_subsets_of_features],交叉验证的分数,比如 grid_scores_[i] 第i个特征子集的CV分数. grid_scores_ is equal to ceil((n_features - 1) / step) + 1,

estimator_ :和上面一样.

谁动了我的VS

vlookup函数rfe怎么回事

VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])

VLOOKUP 函数语法具有下列参数 (参数:为操作、事件、方法、属性、函数或过程提供信息的值.):

lookup_value 必需.要在表格或区域的第一列中搜索的值.lookup_value 参数可以是值或引用.如果为 lookup_value

参数提供的值小于 table_array 参数第一列中的最小值,则 VLOOKUP

将返回错误值 #N/A.

col_index_num 必需.table_array

如果 col_index_num 参数:

小于 1,则 VLOOKUP 返回错误值 #VALUE!.

大于 table_array 的列数,则 VLOOKUP 返回错误值

#REF!.

range_lookup 可选.一个逻辑值,指定希望 VLOOKUP 查找精确匹配值还是近似匹配值:

如果 range_lookup 为 TRUE

或被省略,则返回精确匹配值或近似匹配值.如果找不到精确匹配值,则返回小于 lookup_value 的最大值.

要点 如果 range_lookup 为 TRUE

或被省略,则必须按升序排列 table_array 第一列中的值;否则,VLOOKUP 可能无法返回正确的值.

有关详细信息,请参阅对区域或表中的数据进行排序.

如果 range_lookup 为 FALSE,则不需要对 table_array 第一列中的值进行排序.

如果 range_lookup 参数为 FALSE,VLOOKUP

将只查找精确匹配值.如果 table_array 的第一列中有两个或更多值与 lookup_value 匹配,则使用第一个找到的值.如果找不到精确匹配值,则返回错误值

#N/A.

注解

在 table_array 的第一列中搜索文本值时,请确保 table_array 第一列中的数据不包含前导空格、尾部空格、非打印字符或者未使用不一致的直引号(' 或 ")与弯引号(' 或

").否则,VLOOKUP 可能返回不正确或意外的值.

有关详细信息,请参阅 CLEAN 函数和 TRIM 函数.

在搜索数字或日期值时,请确保 table_array 第一列中的数据未存储为文本值.否则,VLOOKUP 可能返回不正确或意外的值.

如果 range_lookup 为 FALSE 且 lookup_value 为文本,则可以在 lookup_value 中使用通配符 - 问号 (?) 和星号

(*).问号匹配任意单个字符;星号匹配任意字符序列.如果要查找实际的问号或星号,请在字符前键入波形符 (~).

特征工程:特征处理方法

如果不同特征的数量级不在一个等级,模型就不是碗形,而是长条形,难收敛.如果是逻辑回归、线性回归,一定要做幅度调整,如果用树模型,就不需要幅度调整.因为树模型是对各个特征一个一个做的,幅度差异不影响.

可以把不同特征调整到[0,1]范围内,(x-min)/(max-min),适用于非高斯分布,可以保留数值大部分信息,但易受到异常值影响.

或者使用standard scaler, ,适用于高斯分布.优点是处理后的数据更加正态化,但是缺点是对分布要求严格.

树模型(决策树、随机森林、GBDT)不需要做数值的缩放,线性模型、SVM、神经网络、KNN、PCA降维都是需要做数值缩放的.

①.)加减平均:商品价格高于平均价格多少,用户在某个品类下消费超过平均用户多少,用户连续登录天数超过平均多少...

①.)等距切分.pd.cut()

如果是用逻辑回归模型,就要做离散化,如果使用树模型,如决策树、随机森林,就不一定要做离散化,因为模型本身会给你做离散化.

口红色号,衣服尺码等等

red:---1

如果用以上的编码方式,不同颜色之间存在了大小关系,而应该是等价的.

red:--1,0,0

blue:--0,1,0

yellow:--0,0,1

拆分成三列,"是否是red"、"是否是blue"、"是否是yellow".

python中rfe函数-图3

操作:pd.get_dummies()

哑变量和one hot其实是一件事,就像奇异果和猕猴桃.

相当于multi-hot,有多个1.

比如,我可以建一个词库,一句话里如果含有单词apple,那就在apple这列打1,含有多少单词就打多少个1.但是这种方法比较稀疏,词库太大了.

改进方法:比如我对于每一个领域都有一个词表,比如财经类词表,体育类词表...然后有一篇文章,我要对他进行分类,就可以看这篇文章里有多少个词是财经词表里的,有多少词是体育词表里面的.

比如:

性别:[男,女]

爱好:[足球,散步,电视剧]

要用爱好来表达性别

把这三列 ["喜欢足球的概率","喜欢散步的概率","喜欢电视剧的概率"] 加在对应的性别后面,可以作为新的特征.

既可以作为连续值,也可以作为离散值.

连续值:持续时间(浏览时长)、间隔时间(上次购买距离现在的时间)

离散值:哪个时间段、周几 等,离散后,就是类别型的数据.但不是说一定要做one-hot编码,比如时间段,可以离散化为"上班高峰期"和"非高峰期".而周几,可以用one-hot,也可以离散为"工作日"和"周末".

①.、词袋模型:就是指上面的hash技巧,文本数据去掉停用词,剩下的词组成list,在词库中的映射稀疏向量.

解决方案:使用TF-IDF特征.如果t虽然在文档中出现次数多,但是在其他文档中出现的次数也很多,那么这个词就不重要.

TF(t)=

IDF(t)=

TF-IDF权重=TF(t)*IDF(t)

①.)购物车购买转化率(用户维度统计特征)

等等...

统计值也可以用来发现一些规律,比如前一天加购物车的商品很有可能第二天购买;加车N件,只买了一件,剩余的不会买...

如:张三电子产品,李四服装,

增加一列,只有同时出现指定的用户和品类的时候,才取1.

①.)冗余,部分特征相关度高,消耗计算性能.

前者只踢掉原本特征里,和结果预测关系不大的列.后者是要在低维空间中,尽量保存住高维的信息.

①.)评估 单个 特征和结果值之间的相关程度,排序,留下Top相关的特征部分.

python包:SelectKBest(选最重要的K个)、SelectPercentile(选最重要的百分之多少)

看做一个子集搜索问题,筛选各种特征子集,用模型评估效果.

典型的包裹型算法为:递归特征删除算法(recursive feature elimination algorithm).

做法:

①.)先用全量特征跑逻辑回归模型

python包:RFE

L1正则化 + 逻辑回归LR/ linear SVM

L1正则化的效果,是让一些不重要的特征的权重系数变成0.

通常用在 稀疏的高维 数据.

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章