机器学习-自动筛选特征
2018-03-02 14:26
337 查看
选择属性(weka的书中把特征翻译成属性,那么这里的属性其实也就是指特征了)
选择属性的目的:
就是通过搜索数据中所有可能的属性组合,以找到预测效果最好的属性子集。
也就是说假设属性目前有6个,准确率为80%,假设只取5个属性(这就是子集),反而准确率却变为90%
选择属性和PCA降维有啥不同?
选择属性和PCA的目的都是一样,都是为了降低特征的数量,减少计算量
但是PCA是将原始特征进行一个映射压缩,这使得原始的特征面目全非,生成新的特征。也就是说原本20个特征,PCA以后用
全新的5个特征(这5个特征我已经不知道是代表原来的啥了)来表示。但有时这5个特征并不能完全代替这原本的20个特征,而是容纳了98%的信息,这也是能接收的范围。
在weka Explorer页面中,有Select attributes 选择属性的菜单
进入Select attributes以后
有Attribute Evaluator(属性评估器),Search Method(搜索方法)两个选项,这两项需要组合使用
属性评估器
子集评估器
CfsSubsetEval 评估每个属性的预测能力以及其相互之间的冗余度,倾向于选择与类别属性相关度搞,但相互直接相关度低的属性
WrapperSubsetEval 使用一个分类器(可以是任何分类算法)来评估属性集,它对每一个子集采用交叉验证来估计
单个属性评估器
ReliefFAttributeEval 是基于实例的评估器,它随机抽取实例样本,并检查具有相同和不同类别的邻近实例。它可运行在
离散型类别和连续型类别的数据上,参数包括指定抽样实例的数量,要检查的邻近实例的数量,是否对最近邻的距离加权,以及控制
权重如何根据距离衰减的指数函数
InfoGainAttributeEval 评估器通过测量类别对应的属性信息增益来评估属性
GainRatioAttributeEval 评估器通过测量相应类别的增益率来评估属性
SysmmtricalUncertAttributeEval 评估器通过测量相应类别对称的不确定性来评估属性
OneRAttributeEval 评估器使用见得OneR分类器采用的准确性度量。
搜索方法
搜索方法遍历属性空间以搜索好的子集,然后使用评估器来衡量其质量。
BestFirst 搜索方法执行带回溯的贪婪爬山法。
GreedyStepwise 搜索方法贪婪搜索属性的子集空间
Ranker 不是一个搜索属性子集的方法,而是对单个属性进行排名
在sklearn中如何自动筛选特征
有两种方式,sklearn中都有相应的模块:
1.sklearn.feature_selection
2.sklearn.ensemble(集成模块,对于决策树模型中都会有一个属性feature_importances_,就可通过这个排序后筛选特征)
sklearn.feature_selection
sklearn.ensemble
选择属性的目的:
就是通过搜索数据中所有可能的属性组合,以找到预测效果最好的属性子集。
也就是说假设属性目前有6个,准确率为80%,假设只取5个属性(这就是子集),反而准确率却变为90%
选择属性和PCA降维有啥不同?
选择属性和PCA的目的都是一样,都是为了降低特征的数量,减少计算量
但是PCA是将原始特征进行一个映射压缩,这使得原始的特征面目全非,生成新的特征。也就是说原本20个特征,PCA以后用
全新的5个特征(这5个特征我已经不知道是代表原来的啥了)来表示。但有时这5个特征并不能完全代替这原本的20个特征,而是容纳了98%的信息,这也是能接收的范围。
在weka Explorer页面中,有Select attributes 选择属性的菜单
进入Select attributes以后
有Attribute Evaluator(属性评估器),Search Method(搜索方法)两个选项,这两项需要组合使用
属性评估器
子集评估器
CfsSubsetEval 评估每个属性的预测能力以及其相互之间的冗余度,倾向于选择与类别属性相关度搞,但相互直接相关度低的属性
WrapperSubsetEval 使用一个分类器(可以是任何分类算法)来评估属性集,它对每一个子集采用交叉验证来估计
单个属性评估器
ReliefFAttributeEval 是基于实例的评估器,它随机抽取实例样本,并检查具有相同和不同类别的邻近实例。它可运行在
离散型类别和连续型类别的数据上,参数包括指定抽样实例的数量,要检查的邻近实例的数量,是否对最近邻的距离加权,以及控制
权重如何根据距离衰减的指数函数
InfoGainAttributeEval 评估器通过测量类别对应的属性信息增益来评估属性
GainRatioAttributeEval 评估器通过测量相应类别的增益率来评估属性
SysmmtricalUncertAttributeEval 评估器通过测量相应类别对称的不确定性来评估属性
OneRAttributeEval 评估器使用见得OneR分类器采用的准确性度量。
搜索方法
搜索方法遍历属性空间以搜索好的子集,然后使用评估器来衡量其质量。
BestFirst 搜索方法执行带回溯的贪婪爬山法。
GreedyStepwise 搜索方法贪婪搜索属性的子集空间
Ranker 不是一个搜索属性子集的方法,而是对单个属性进行排名
在sklearn中如何自动筛选特征
有两种方式,sklearn中都有相应的模块:
1.sklearn.feature_selection
2.sklearn.ensemble(集成模块,对于决策树模型中都会有一个属性feature_importances_,就可通过这个排序后筛选特征)
sklearn.feature_selection
#coding=utf-8 ''' Created on 2018-3-1 ''' # RFE和RFECV # 作用:通过筛选子集+分类器进行特征筛选 # 参数详情请参考 # http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html#sklearn.feature_selection.RFE # http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFECV.html#sklearn.feature_selection.RFECV # 这个方法有个缺点,就是当数据量很大但内存的很小的时候并没有分片训练的功能 from sklearn import datasets from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression dataset =datasets.load_iris() # 加载数据 print dataset.data.shape # (150, 4) model = LogisticRegression() # 构建分类器 rfe = RFE(model) rfe = rfe.fit(dataset.data,dataset.target) print(rfe.n_features_) #选出来特征的数量 # 2 print(rfe.support_) #查看哪些特征是被选择的 # [False True False True],结果说明第2,4个特征被选择 print(rfe.ranking_) #查看特征排名 # [3 1 2 1],结果说明特征排名分别为3,1,2,1,其中有两个并列第一 print rfe.get_support(True) # [1 3],返回筛选出来的特征的下标 from sklearn.feature_selection import RFECV # 使用RFECV,和RFE相比,这里分类器的验证结果为交叉验证 rfecv = RFECV(model) # limit number of variables to three rfecv = rfecv.fit(dataset.data,dataset.target) print(rfecv.n_features_) #选出来特征的数量 # 3 print(rfecv.support_) #查看哪些特征是被选择的 # [False True True True],结果说明第2,3,4个特征被选择 print(rfecv.ranking_) #查看特征排名 # [2 1 1 1],结果说明特征排名分别为2,1,1,1,其中有三个并列第一 # SelectPercentile # 作用:通过计算每个特征的得分值筛选特征,得分越高,特征就越好 # 参数详情请参考 # http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectPercentile.html#sklearn.feature_selection.SelectPercentile from sklearn import datasets from sklearn.feature_selection import SelectPercentile, f_classif import numpy as np dataset =datasets.load_iris() # 加载数据 print dataset.data.shape # (150, 4) # f_classif为内置的计算函数函数,有多种计算函数供选择;保持10%最有意义的特征 selectorPer = SelectPercentile(f_classif, percentile=10) selectorPer = selectorPer.fit(datase 4000 t.data,dataset.target) print(selectorPer.scores_) #特征的得分值 # [ 119.26450218 47.3644614 1179.0343277 959.32440573] print(selectorPer.pvalues_) #特征的p-value值 # [ 1.66966919e-31 1.32791652e-16 3.05197580e-91 4.37695696e-85],结果说明第2,4个特征被选择 scores = -np.log10(selectorPer.pvalues_) print scores # [ 30.77736957 15.87682923 90.51541891 84.35882772] scores /= scores.max() print scores # [ 0.3400235 0.17540469 1. 0.93198296] # SelectKBest # 作用:根据k最高分选择特征 from sklearn import datasets from sklearn.feature_selection import SelectKBest dataset =datasets.load_iris() # 加载数据 print dataset.data.shape # (150, 4) # f_classif为内置的计算函数函数,有多种计算函数供选择;选择前k个最高得分特征 selectKB = SelectKBest(f_classif,k=2) selectKB = selectKB.fit(dataset.data,dataset.target) print(selectKB.scores_) #特征的得分值 # [ 119.26450218 47.3644614 1179.0343277 959.32440573] print(selectKB.pvalues_) #特征的得分值 # [ 1.66966919e-31 1.32791652e-16 3.05197580e-91 4.37695696e-85] print(selectKB.get_support()) #特征的得分值 # [False False True True] print selectKB.get_support(True) # [2 3],返回筛选出来的特征的下标,但是有个缺点就是按得分值进行排序没有排序
sklearn.ensemble
#coding=utf-8 ''' Created on 2018-3-1 ''' from sklearn import datasets from sklearn import metrics from sklearn.ensemble import ExtraTreesClassifier dataset =datasets.load_iris() # 加载数据 model = ExtraTreesClassifier() # 生成决策树 model.fit(dataset.data,dataset.target) print(model.feature_importances_) #获取关键特征 # [ 0.13826514 0.09158596 0.28037233 0.48977657]
相关文章推荐
- 机器学习-特征筛选
- 机器学习-GridSearchCV自动调参,RF特征选择
- 机器学习python特征筛选
- [置顶] 【机器学习 sklearn】特征筛选feature_selection
- 机器学习特征提取 | 自动特征工程featuretools
- 模式识别、机器学习、推荐系统、图像特征等方面个人主页及博客
- 自动筛选的逻辑(8)-透视表筛选的应用
- 机器学习中,有哪些特征选择的工程方法?
- 用Python开始机器学习(5:文本特征抽取与向量化)
- 机器学习与智能优化 之 排序与选择特征
- 斯坦福大学公开课机器学习课程(Andrew Ng)十特征选择
- 有36辆自动赛车和6条跑道,没有计时器的前提下,最少用几次比赛可以筛选出最快的三辆赛车?----腾讯2016研发工程师在线模拟笔试题
- Python机器学习----第3部分 特征抽取
- Python机器学习:4.9 利用随机森林评估特征重要性
- Excel自动筛选、单元格选择不同的值显示不同的颜色、第一行不动
- 机器学习模型为什么要将特征离散化(转)
- 【Machine Learning】机器学习の特征
- 1.为什么需要继承?如何继承?继承到什么? 2.方法的重载与重写的区别 3.类型的自动转换和强制转换 4.子类特有的方法的调用规则 5.子类重写的方法的调用规则 6.多态的理解 7.面向对象的三大特征
- 机器学习 数据量不足问题----1 做好特征工程 2 不要用太多的特征 3 做好交叉验证 使用线性svm
- 七月算法机器学习笔记5 -- 特征工程