1、特征选择

当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,从两个方面考虑来选择特征:

  • 特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。
  • 特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。除方差法外,本文介绍的其他方法均从相关性考虑。

  根据特征选择的形式又可以将特征选择方法分为3种:

  • Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
  • Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
  • Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。

  我们使用sklearn中的feature_selection库来进行特征选择。

#特征选择
#1:Filter过滤法:按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
#1.1:方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。
VarianceThreshold(threshold=3).fit_transform(iris.data)
#1.2:相关系数法,先要计算各个特征对目标值的相关系数以及相关系数的P值。
#选择K个最好的特征,返回选择特征后的数据
#第一个参数为计算评估特征是否好的函数,该函数输入特征矩阵和目标向量,输出二元组(评分,P值)的数组,数组第i项为第i个特征的评分和P值。在此定义为计算相关系数
#参数k为选择的特征个数
#SelectKBest(lambda X, Y: array(map(lambda x:pearsonr(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)
#1.3:卡方检验是检验定性自变量对定性因变量的相关性。
#选择K个最好的特征,返回选择特征后的数据
SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)
#1。4;互信息法,评价定性自变量对定性因变量的相关性
#由于MINE的设计不是函数式的,定义mic方法将其为函数式的,返回一个二元组,二元组的第2项设置成固定的P值0.5
'''
'''
def mic(x, y):m = MINE()m.compute_score(x, y)return (m.mic(), 0.5)
#选择K个最好的特征,返回特征选择后的数据
SelectKBest(lambda X, Y: array(map(lambda x:mic(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)
'''
'''
#2:Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
#2.1:递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。
#递归特征消除法,返回特征选择后的数据
#参数estimator为基模型
#参数n_features_to_select为选择的特征个数
RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)
#3:Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。
#3.1:基于惩罚项的特征选择法,使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。
#带L1惩罚项的逻辑回归作为基模型的特征选择
SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)
#3.2:基于树模型的特征选择法,树模型中GBDT也可用来作为基模型进行特征选择
#GBDT作为基模型的特征选择
SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)

2、降维

当特征选择完成后,可以直接训练模型了,但是可能由于特征矩阵过大,导致计算量大,训练时间长的问题,因此降低特征矩阵维度也是必不可少的。常见的降维方法除了以上提到的基于L1惩罚项的模型以外,另外还有主成分分析法(PCA)和线性判别分析(LDA),线性判别分析本身也是一个分类模型。PCA和LDA有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。

#降维,PCA和LDA有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。
#1:主成分分析法(PCA)
#主成分分析法,返回降维后的数据
#参数n_components为主成分数目
PCA(n_components=2).fit_transform(iris.data)
#2:线性判别分析法(LDA)
#线性判别分析法,返回降维后的数据
#参数n_components为降维后的维数
LDA(n_components=2).fit_transform(iris.data, iris.target)

参考:http://www.cnblogs.com/jasonfreak/p/5448385.html

【数据平台】sklearn库特征工程之特征选择和降维相关推荐

  1. 【数据平台】sklearn库特征工程之数据预处理

    1.背景: 通过特征提取,我们能得到未经处理的特征,这时的特征可能有以下问题: 不属于同一量纲:即特征的规格不一样,不能够放在一起比较.无量纲化可以解决这一问题. 信息冗余:对于某些定量特征,其包含的 ...

  2. ML之FE:对爬取的某平台二手房数据进行数据分析以及特征工程处理

    ML之FE:对爬取的某平台二手房数据进行数据分析以及特征工程处理 目录 对爬取的某平台二手房数据进行数据分析以及特征工程处理 1.定义数据集 2.特征工程(数据分析+数据处理) 对爬取的某平台二手房数 ...

  3. 用机器学习神器sklearn做特征工程!

    Datawhale干货 作者:jasonfreak,编辑:数据STUDIO 使用sklearn做特征工程 特征工程是什么? 有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是 ...

  4. 【AlgorithmStar机器学习】AS机器学习库特征工程使用说明文档

    目录 Algorithm Star介绍 概述 AS库的一般处理流程 数据采集与清洗 向量生成与特征提取选择 机器学习 后续处理 Algorithm Star使用 数据类型-操作数 浮点类型操作数 整数 ...

  5. ML之FE:数据处理—特征工程之特征选择常用方法之基于搜索策略的三种分类、基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现

    ML之FE:数据处理-特征工程之特征选择常用方法之基于搜索策略的三种分类.基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现 目录 Wrapper包裹式/封装式- ...

  6. 特征工程之特征选择_特征工程与特征选择

    特征工程之特征选择

  7. 【机器学习入门】(12) 特征工程:特征选择、数据降维、PCA

    各位同学好,今天我和大家分享一下python机器学习中的特征选择和数据降维.内容有: (1)过滤选择:(2)数据降维PCA:(3)sklearn实现 那我们开始吧. 一个数据集中可能会有以下问题: ( ...

  8. 04_机器学习概述,什么是机器学习,应用场景,数据来源与类型,网上可用的数据集、常用数据集数据的结构组成、特征工程是什么、意义、特征抽取、sklearn特征抽取API、文本特征抽取(学习笔记)

    机器学习概述 人工智能.机器学习.深度学习之间的关系 机器学习框架 Pytorch Caffe2 theano Chainer Scikit-learn 语言支持 机器学习书籍 <面向机器智能 ...

  9. 《机学三》特征工程3 —— 特征选择:特征选择、数据降维

    一.概述 1.1[降维] [维降]:把三维降成二维,本质就是减少特征数量: 1.2[特征选择] 什么是特征选择: 特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后 ...

最新文章

  1. flashback_transaction_query查询权限
  2. 向导页设计_向导设计模式
  3. 七点人脸姿态估计_Github开源库简单配置即可上线的3D人脸检测工具箱
  4. ARM汇编学习-工具篇
  5. Codeforces Beta Round #7 C. Line 扩展欧几里德
  6. [图灵程序设计丛书].持续交付:发布可靠软件的系统方法.pdf
  7. vim编辑时遇到E325: ATTENTION Found a swap file by the name ./.backu.sh.swp错误代码的解决办法
  8. HBase预分区设计
  9. 测试面试题 用例设计题目回答思路
  10. python方差特征选择_特征选择-Filter过滤法(方差)
  11. TortoiseGit解决冲突
  12. 【UE4 C++】角色拾取、替换武器(上)
  13. Haskell语言学习笔记(75)Conduit
  14. 毕业这么多年,为啥升职加薪这么难?
  15. 福建农林大学校赛(同步赛)
  16. 写代码之前要做什么?
  17. Cannot determine the organization name for this ‘dev.azure.com‘ remote url 解决方法
  18. 74HC595/四位按键 驱动四位数码管
  19. postgres数据库对比工具
  20. cpu功耗排行_2019年cpu功耗排行榜_电脑处理器排行榜2019

热门文章

  1. Spark详解(四):Spark组件以及消息通信原理
  2. 现代操作系统: 第五章 输入/输出
  3. 简单算法的举例c语言,计算机科学与技术系C语言程序设计22简单算法举例.PPT
  4. 内存文件系统-md伪设备
  5. ios UIWebView 播放优酷土豆视频
  6. 电脑新安装JDK版本并运行使用该JDK版本问题
  7. [ CodeForces 865 D ] Buy Low Sell High
  8. Spring Boot 应用系列 5 -- Spring Boot 2 整合logback
  9. BZOJ3832 [Poi2014]Rally 【拓扑序 + 堆】
  10. 2.5 linux C 进程与多线程入门--(5)使用互斥量进行同步