各位同学好,今天我和大家分享一下python机器学习中的特征选择和数据降维。内容有:

(1)过滤选择;(2)数据降维PCA;(3)sklearn实现

那我们开始吧。


一个数据集中可能会有以下问题:

(1)冗余部分特征的相关度高,由于A与B之间有某种计算公式使它们相关联,A特征的变化会导致B特征的变化,容易消耗计算性能,只需要存在一个特征就可以了。

(2)噪声部分特征对预测结果有负影响,需要剔除一些与预测对象不相关的特征

理解特征选择: 现在有一个数据集,这个数据集中有100个特征,我们只需要其中的几十项,这时我们需要对这个数据集进行选择。

理解数据降维: 现在有一个数据集,数据集中有100列特征,也叫做有100个维度,通过降维将数据将到几十维。降维时,一般会改变原维度所代表的意义。例如,现在有A、B两个维度,给它降到一维,称之为C,而C维度代表的意义是同时代表A、B维度的新维度。


1. 特征选择

特征选择是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值,也可以不改变值。但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。

特征选择分为三种方式:

(1)Filter(过滤式): 根据方差、阈值选择

(2)Embedded(嵌入式): 正则化、决策树

(3)Wrapper(包裹式): 不常用

2. 过滤选择

过滤式的特征选择是根据方差选择,它会删除所有低方差的特征默认会删除所有方差为0的数据。可以使用sklearn中的 VarianceThreshold(threshold=0) 方差、阈值来实现过滤。若该列的方差小于我指定的阈值,就会删除该特征列

方差的大小可以体现数据的离散程度。方差越小,说明数据越集中,这个数据对整个结果的影响并不大,所以优先删除方差等于0或接近0的特征。

比如,当方差等于0时,表示该特征列上所有的值都是一样的,一列数据都是一样的对预测结果毫无关系,这时就可以把这一列删除。如果方差较大,该特征列的离散程度也比较大,对结果会有比较大的影响。

在sklearn中实现,导入方法: from sklearn.feature_selection import VarianceThreshold

方差、阈值过滤方法:VarianceThreshold()

参数设置: threshold 阈值默认等于0;方差小于该阈值时删除该特征列。

# 特征选择
# 自定义数据,第0列和3列的值都是一样的
data = [[0,2,0,3],[0,1,4,3],[0,1,1,3]]
# 导入标准化方法,查看每一列的方差
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit_transform(data)
# 查看方差
values = scaler.var_# 导入过滤选择方法
from sklearn.feature_selection import VarianceThreshold
# 接收过滤选择方法
var = VarianceThreshold()
# 将数据传入方差、阈值过滤方法,将方差为0的特征删除
result = var.fit_transform(data)

首先使用标准化方法查看每一项特征值的方差 scaler.var_ 便于对数据的每个特征值的方差有了解,再使用过滤选择方法,默认删除方差为0的特征列。


3. PCA(主成分分析)

3.1 方法介绍

主成分分析是一种统计方法,是数据降维中的一种,通过正交变换将一组可能存在相关性的变量转换为一组线形不相关的变量,转换后的这组变量叫主成分

在用主成分分析方法研究多变量问题时,变量个数太多会增加课题的复杂性。人们希望变量的个数减少而得到的信息较多。在很多情形下,变量之间有一定的相关关系。当两个变量之间有一定的相关关系时,可以解释为,这两个变量反映此课题的信息有一定的重叠

主成分分析是对原先提出的所有变量,将重复的变量(关系紧密的变量删去多余),建立尽可能少的新变量,使得这些新变量是两两不相关的,而且这些新变量在反映课题的信息反面尽可能保持原有的信息


3.2 主成分分析求解步骤

(1)获取方差最大的正交变换

上图中蓝色坐标轴是原来数据的坐标轴,坐标上有一个点(2,2);经过变换后得到红色坐标轴,这个点的位置没有发生改变,但是点的坐标变化了;这样就可以将我们的数据变成另外一个值了。

但是这个正交变化该怎么变?我们是通过方差来决定的,也就是正交变换完后,哪个方差最大,那么就选哪个。方差越大,代表数据越不集中,对结果的影响也越大。变换公式如下:

pi 代表正交变换参数ai代表每一条数据的特征,如果求完后的结果的方差是最大的,那么就选择该组正交变化参数p


3.3 生成更多主成分

以上是生成一个主成分(新特征)的步骤。一般我们会生成多个主成分,必须遵循一个条件,也就是多个主成分之间不能存在线形相关,即特征之间不能通过某种公式来互相转换。用数学公式来表示则为协方差

(1)降维后的特征之间的协方差为0,表示各个特征关系是独立的,每个特征都不会随着其他特征变化而有规律的变化。

(2)如果两个特征之间相关联,那么这个两个的协方差较大。新生成一个主成分需要和原来的主成分求一下协方差,如果为0,证明可行。

(3)新生成的主成分的每个特征的方差应该尽可能大


3.4 sklearn 实现 PCA

导入方法:from sklearn.decomposition import PCA

降维方法: PCA()  参数设置

n_components

(1)0-1之间,维度的比例再减1。例:若原数组有4个特征列,指定n_components=0.9,代表原来有4维,现在变成4*0.9=3.6,取整数部分,现在有3维,再减1维。最终降到2维。

(2)整型数据。具体维度,不能指定超过当前 min{行数,列数} 的维度。

# PCA
# 自定义数据
data = [[4,2,76,9],[1,192,1,56],[34,5,20,90]]
# 导入方法
from sklearn.decomposition import PCA
# 构建PCA对象,默认降低一个维度
pca = PCA(n_components=0.9)
# 数据传入PCA方法
result = pca.fit_transform(data)

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

  1. 机器学习笔记六——特征工程之数据预处理

    特征工程之数据预处理 1. 处理缺失值 2. 处理异常值 2.1 异常值检测 2.2异常值处理 3.离散特征的连续化处理 4.连续特征的离散化处理 5. 处理类别不平衡问题 6. 图片数据扩充 数据预 ...

  2. 百面机器学习 -- No.2 特征工程 -- 训练数据不足的情况下会带来什么问题,如何缓解?

    训练数据不足的情况下会带来什么问题,如何缓解? 数据不足会带来什么问题 如何解决 ? 数据不足会带来什么问题 机器学习任务的问题,可以简单的理解成寻找最佳的拟合函数和最佳的泛化函数,拟合函数是用来学习 ...

  3. 机器学习实战——特征工程之数据预处理

    机器学习实战的特征工程主要包含数据预处理.特征构建.特征选择三步,首先来介绍数据预处理. 我选择python作为工具,并将主要用到pandas.numpy等数据工具库.加载库: import pand ...

  4. 机器学习概述和特征工程

    机器学习笔记一 机器学习 概述 数据集的结构 特征工程 特征抽取 特征的预处理 数据降维 机器学习基础 机器学习开发流程 机器学习 概述 影响人工智能发展的因素 硬件的计算能力 数据的限制 算法的发展 ...

  5. 机器学习实战之特征工程

    机器学习实战与特征工程 1.机器学习概述 1.1 什么是机器学习 1.2 为什么要机器学习 1.3 机器学习应用场景 1.4 学习框架和资料的介绍 2.特征工程 2.1 特征工程介绍 2.1.1 数据 ...

  6. 机器学习中的特征工程

    机器学习中的特征工程 什么是特征工程 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已.特征工程指的是把原始数据转变为模型的训练数据的过程,它的目的就是获取更好的训练数据特征,使得机器 ...

  7. 《百面机器学习》笔记-特征工程相关面试题

    https://www.toutiao.com/a6690498502436323854/ 2019-05-13 21:15:03 1. 什么是特征工程 对数据进行一系列处理构成特征输入给模型 例如, ...

  8. 特征工程之数据预处理(下)

    机器学习入门系列(2)–如何构建一个完整的机器学习项目,第四篇! 该系列的前三篇文章: 机器学习入门系列(2)–如何构建一个完整的机器学习项目(一) 机器学习数据集的获取和测试集的构建方法 特征工程之 ...

  9. 特征工程 特征选择 reliefF算法

    特征工程 特征选择 reliefF算法 背景 运行效果 背景 由于最近在整理一些特征工程的内容,当整理到特征选择算法的时候有reliefF算法,感觉算法挺常见的,应该在sklearn上能找到,但是找了 ...

最新文章

  1. python 累积正态分布函数_为什么机器学习都围绕正态分布进行讨论?
  2. 笔记-项目立项管理-项目论证的程序
  3. SQL Server 2005 Integration Services (SSIS) (2) - 导入/导出向导
  4. php识别名片,用户信息名片怎么利用PHP实现自动生成
  5. java collections_扫盲java.util.Collections工具包,学习排序、二分、洗牌、旋转算法
  6. 求锤得锤,你要的一致性 hash 来了! | 附代码
  7. 因为简单!我的第一本算法书,就被女友抢走了……
  8. System Verilog 线程间的通信——事件,信箱与旗语
  9. 基于SSM的医学健康网站
  10. linux系统root用户忘记密码的重置方法
  11. spss软件测试题题库,spss期末考试试题及答案
  12. Raffle for Weibo Followers
  13. 2022年湖北省光电子信息和生命健康领域科技计划成果路演征集条件以及申报时间流程汇总!
  14. 交互式设计--如何让你的界面简约
  15. 什么pdf转换成excel转换器好
  16. 什么是python 包_什么是python包
  17. Java byte[]与short[]之间转换
  18. 【clickhouse】clickhouse创建表
  19. gif动图制作软件下载(ScreenToGif)
  20. 【Golang】Golang语言编程规范

热门文章

  1. 前端之css引入方式/长度及颜色单位/常用样式
  2. 【ArcGIS for Android】基于位置查询Graphic和Feature
  3. 十一月第三周学习进度条
  4. javaweb学习总结(二十三)——jsp自定义标签开发入门
  5. 【性格心理学】为什么我在关键时刻总是紧张?
  6. 【leetcode】Roman to Integer
  7. 从.NET1.1升级到.NET2.0时出现的PInvokeStackImbalance错误
  8. 智能手环功能模块设计_智能手环的设计的方案.doc
  9. 平方变换载波同步 matlab,matlab源码-costas载波同步环.docx
  10. 常量元素记忆口诀_化学口诀表:帮助学生加深记忆提高解题正确率