[机器学习与scikit-learn-46]:特征工程-特征选择(降维)-2-常见的特征降维的方法大全

2023-11-05

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/123953894


目录

前言:

第1章 特征降维概述

1.1 机器学习在实际工作中遇到的难题--维度爆炸

1.2 降维的原因

1.3 特征降维的目的

1.4 什么是特征降维

1.5 降维的好处和优点

1.6 降维的缺点

1.7 降维的主要手段与对应的原则

1.8 特征降维的优化

第2章 常见的降维方法简介

2.1 按缺失比率删除特征(Missing Value Ratio)

2.3 高相关性滤波(High Correlation filter)

2.4 随机森林(Random Forest)

2.5 反向特征消除(Backward Feature Elimination)

2. 8 主成分分析(PCA)


前言:

降维是机器学习中一个高阶的技能,它属于特征工程范畴。

第1章 特征降维概述

1.1 机器学习在实际工作中遇到的难题--维度爆炸

在算法学习中,特征的数量都比较少,大多数都在是个特征以内,做多也就几十个。

但如果样本的特征得到成千上万个特征怎么办,甚至几十万、上百万?机器学习的算法的还那么高效吗?

比如文本处理中,每个单词就是一个维度的特征,但文本单词的种类高达几十万怎么办?

我们总是期望能够收到更多维度的数据,然后随着数据维度的增加,我们会进入一种悖论:维度越多,我们越不知道如何选择!!!

理论上,如果把描述宇宙的所有维度数据都能够获得,就可以描述整个宇宙的未来的状态。然后,实际上是,如果真能获取到整个宇宙维度的数据,你反而不知道如何处理了!数据的维度多到你无从选择。

怎么办???

降维!!!

1.2 降维的原因

样本所包含的特征过多,过于庞大,导致计算量暴增。

而部分特征的特征性和区分性很小,这些特征对最终的结果其实影响很小。

1.3 特征降维的目的

去除掉矛盾中的次要方面和次要因素(特征),保留主要方面和主要特征。

提升计算和决策的速度和效率。

1.4 什么是特征降维

所谓特征降维,就是较少、降低特征的维度。

简单的说,对所有的特征,该合并的合并,该去掉的去掉,

1.5 降维的好处和优点

(1)降低存储空间

随着数据维度不断降低,数据存储所需的空间也会随之减少。

(2)降低训练时间

低维数据有助于减少计算/训练用时。

(3)提升算法的可用性

一些算法在高维度数据上容易表现不佳,降维可提高算法可用性。

(4)解决共线性问题:

所谓共线性:就是两个特征,有强相关性,并且具备相同的线性趋势。

降维可以用删除冗余特征解决多重共线性问题。

比如我们有两个变量:“一段时间内在跑步机上的耗时”和“卡路里消耗量”。这两个变量高度相关,在跑步机上花的时间越长,燃烧的卡路里自然就越多。

因此,同时存储这两个数据意义不大,只需一个就够了。

(5)利于数据可视化

降维有助于数据可视化。如果数据维度很高,可视化会变得相当困难,而绘制二维三维数据的图表非常简单。

1.6 降维的缺点

(1)部分特征信息可能会丢失

(2)可能会导致线性可分变成线性不可分

1.7 降维的主要手段与对应的原则

(1)特征选择:从众多特征中选择部分特征

  • 不能损失主要矛盾和矛盾的主要方面(主要特征)=》
  • 根据业务需要选择不同的特征,不同的业务场景关注的特征是不一样的。

特征选择就是滤波,滤除掉一些特征。

(2)特征合并:把多个特征合并成同一个特征

  • 正相关的特征进行合并
  • 负相关的特征进行分离
  • 无关性的特征进行归类

1.8 特征降维的优化

(1)分层训练和分层决策:L1 主要特征 =》L2 中等特征 =》 L3 次要特征

第2章 常见的降维方法简介

2.1 按缺失比率删除特征(Missing Value Ratio)

(1)概述

假设你有一个数据集,你第一步会做什么?

在构建模型前,对数据进行探索性分析必不可少。

但在浏览数据的过程中,有时候我们会发现其中包含不少缺失值。如果缺失值少,我们可以填补缺失值或直接删除这个变量;如果缺失值过多,你会怎么办呢?

当缺失值在数据集中的占比过高时,一般我会选择直接删除这个变量,因为它包含的信息太少了。但具体删不删、怎么删需要视情况而定,我们可以设置一个阈值,如果缺失值占比高于阈值,删除它所在的列。阈值越低,该维度由于数据缺失被删除掉的可能性越大。

(2)代码演示

df.isnull()

df.isnull().any()

df.isnull().sum()

2.2 低方差滤波(Low Variance Filter)

(1)概述

如果某一特征,对所有样本,其取值都差不多,这说明,所有的样本,并不是通过该特征来标识差别的,这样的特征,其实对于区分不同样本,意义不大,就可以去除掉这些特征。

如何用数学表达上述特性呢?低方差!!!

放到实践中,就是先计算所有特征的方差大小,然后删去其中最小的几个。

需要注意的一点是:

方差与数据范围相关的,因此在采用该方法前需要对数据做归一化处理,这样不同特征的方差之间才具备可比性!!!!

(2)方差函数

numeric.var()

2.3 高相关性滤波(High Correlation filter)

(1)概述

如果两个特征之间是高度相关的,这意味着它们具有相似的趋势并且可能携带类似的信息。

同理,这类变量的存在会降低某些模型的性能(例如线性和逻辑回归模型)。

为了解决这个问题,我们可以计算独立数值变量之间的相关性。

如果相关系数超过某个阈值,就删除其中一个变量。

通常情况下,如果一对变量之间的相关性大于0.5,那就应该考虑是否要删除一列属性了。

(2)相关性系数计算

首先,删除因变量(Item_Outlet_Sales),并将剩余的变量保存在新的数据列(df)中。

然后通过corr()函数求特征(变量)之间的相关性

df=train.drop('Item_Outlet_Sales', 1)
df.corr()

2.4 随机森林(Random Forest)

(1)概述

随机森林是一种广泛使用的分类算法,它会自动计算各个特征的重要性,具备天然的特征选择的能力,从功能上看,无需单独编程,但从效率上看,还是在运行算法之间,先去除掉不重要的特征。

随机深林算法,自动优选选择差异性较大的特征,合并差异性较小的特征。

另一种有意思的应用就是:

  • 确定随机深林的深度
  • 利用随机深林进行分类
  • 对影响随机深林决策的特征进行排序
  • 选择出对随机深林决策算法影响Top N的几个特征。
  • 去除掉对决策深林做决策无影响或影响较小的特征。

这就是随机森林算法对特征选择的奇特作用!

features = df.columns
importances = model.feature_importances_
indices = np.argsort(importances[0:9])  # top 10 features
plt.title('Feature Importances')
plt.barh(range(len(indices)), importances[indices], color='b', align='center')
plt.yticks(range(len(indices)), [features[i] for i in indices])
plt.xlabel('Relative Importance')
plt.show()

2.5 反向特征消除(Backward Feature Elimination)

(1)概述

反向特征消除的基本思想是:尝试性删除某些特征,然后对模型进行训练,再看删除后该特征后,对模型性能的影响,选择删除对模型影响小的特性!!!

反向特征消除的主要步骤:

  • 先获取数据集中的全部n个变量,然后用它们训练一个模型。
  • 计算模型的性能。
  • 删除每个变量(n次)后计算模型的性能,即我们每次都去掉一个变量,用剩余的n-1个变量训练模型。
  • 确定对模型性能影响最小的变量,把它删除。
  • 重复此过程,直到不再能删除任何变量。

这种方法,其实是比较原始的,采用的是暴力穷举。

2.6 前向特征选择(Forward Feature Selection)

前向特征选择其实就是反向特征消除的相反过程,即找到能改善模型性能最佳特征,而不是删除弱影响特征。

它背后的思路如下所述:

  • 选择一个特征,用每个特征训练模型n次,得到n个模型。
  • 选择模型性能最佳的变量作为初始变量。
  • 每次添加一个变量继续训练,重复上一过程,最后保留性能提升最大的变量。
  • 一直添加,一直筛选,直到模型性能不再有明显提高。

2.7 因子分析FA(Factor Analysis)

因子分析是一种常见的统计方法,它能从多个变量(特征)中提取共性因子,并得到最优解。

假设我们有两个变量:收入和教育。它们可能是高度相关的,因为总体来看,学历高的人一般收入也更高,反之亦然。所以它们可能存在一个潜在的共性因子,比如“能力”。

在因子分析中,我们将变量按其相关性分组,即特定组内所有变量的相关性较高,组间变量的相关性较低。我们把每个组称为一个因子,它是多个变量的组合

和原始数据集的变量相比,这些因子在数量上更少,但携带的信息基本一致

这种分析方法,就是人类的分类方法。进一步可以采用分层判决的方法。

把所有的特征,按照树形的方式进行组织。具备相同类型的特征归属于同一个分类。

这样,把偏平的特征,构建成了一个分层的、结构化的特征。

在进行分类时,可以为不同层次的特征,指定不同的权重,优先在第层次的特征之间进行区分和比较,然后再高一层次的特征上进行进一步的比较。

2. 8 主成分分析(PCA)

该方法的基本思想是辩证唯物主义的思想:找到主要矛盾和主要矛盾的主要方面。

这是一个非常常用的特征提取的方法。

如果说因子分析是假设存在一系列潜在因子,能反映变量携带的信息,那PCA就是通过正交变换将原始的n维数据集变换到一个新的被称做主成分的数据集中,即从现有的大量变量中提取一组新的变量。

下面是关于PCA的一些要点:

  • 主成分原始变量的线性组合
  • 第一个主成分具有最大方差值
  • 第二主成分试图解释数据集中的剩余方差,并且与第一主成分不相关(正交)。
  • 第三主成分试图解释前两个主成分等没有解释的方差。

即一次找出方差最大的特征,且他们对结果影响最大。

主成分分析实际上是一种浓缩数据信息的方法,可将很多个指标浓缩成综合指标(主成分),并保证这些综合指标彼此之间互不相关。可用于简化数据信息浓缩、计算权重、竞争力评价等。

2.9 独立分量分析(ICA)

独立分量分析(ICA)基于信息理论,是最广泛使用的降维技术之一。

PCA和ICA之间的主要区别在于,PCA寻找不相关的因素,而ICA寻找独立因素

独立分量分析(independent component analysis,ICA)原本是20世纪90年代发展起来的一种新的信号处理技术。基本的ICA是指从多个源信号的线性混合信号中分离出源信号的技术。

应用在特征的降维上,就是要分离多个不相干的特征信号(数据),并把相干数据合并在一起。


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/123953894

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[机器学习与scikit-learn-46]:特征工程-特征选择(降维)-2-常见的特征降维的方法大全 的相关文章

随机推荐

  • [Python人工智能] 二十三.基于机器学习和TFIDF的情感分类(含详细的NLP数据清洗)

    从本专栏开始 作者正式研究Python深度学习 神经网络及人工智能相关知识 前一篇文章分享了自定义情感词典 大连理工词典 实现情感分析和情绪分类的过程 这篇文章将详细讲解自然语言处理过程 基于机器学习和TFIDF的情感分类算法 并进行了各种
  • (转载)ArcGIS Engine中各种点的创建方法

    点 Point 代表了一个0纬的具有X Y坐标的几何对象 点是没有任何形状的 可用于描述点类型的要素 而且Geometry中的任何类型都是用点来产生的 构成几何形状的顶点存在3种可以选择的属性 即Z M和ID Z值在大多数情况下都可用于表示
  • 【LaTeX学习3】LaTeX中的中文处理方法

    1 在设置中检查 gt 构建命令中的默认编译器为XeLaTeX 2 在编辑器命令中默认字体编码为UTF 8 3 在导言区用 usepackage ctex 引用ctex宏包 4 在命令行在打开宏包和文档的使用方法 代码中详细介绍 5 代码
  • vs2017新建空文件夹报错0x80041FE2解决办法

    原因分析 你无意间删除了安装时的缓冲路径文件夹 请将该文件夹恢复 否则 重新安装软件 缓冲文件夹一般名称为 DownloadBrowser
  • 清华大学:紧耦合的雷达视觉惯性里程计方案(FT-LVIO)

    来自清华大学的Zhou Zhang科研团队在误差状态迭代卡尔曼滤波器的框架内提出了一种新型VIO方案 FT LVIO 一种完全紧耦合的多传感器融合框架 该框架由激光雷达 单目相机和IMU 惯性测量单元 三部分组成 同时融合了三个互补传感器的
  • QT connect使用简单介绍

    如图 首先 connect是线程安全的 其次它有很多重载 当然最重要的还是QT4连接和QT5连接的区别 这个函数重载表示connect函数也是支持lambda函数的 connect const QObject sender PointerT
  • php利用循环链表找猴王

    php利用循环链表找猴王 1 前述 2 php源码 3 html源码 1 前述 1 1实现说明 与array数组的实现思路大同小异 不过链表的实现方式略显繁琐 1 2实现思路 建立一个单向循环链表不断循环查找 查找到指定删除位置 踢出猴子即
  • Java连接mysql,sql语句中含有中文就查询不到结果

    最近写一个小项目 javaee项目连接了mysql数据库 根据用户名 密码却怎么也查不到用户结果 后改用英文的用户名就可以查到了 可见是编码问题 解决方法 连接语句加入如下代码 useUnicode true characterEncodi
  • 华为eNSP--4多个路由器连接配置(静态路由)

    R1路由器的配置 Huawei int e0 0 0 Huawei Ethernet0 0 0 ip add 192 168 1 10 24 Huawei Ethernet0 0 0 int e0 0 1 Huawei Ethernet0
  • cookie和session有什么区别,请你谈谈cookie的缺点

    1 区别 cookie机制采用的是在客户端保持状态的方案 session机制采用的是在服务端保持状态的方案 2 cookie 优点 1 gt 极高的扩展性和可用性 2 gt 通过编程方式 控制保存在cookie中的session对象的大小
  • 进程间的通信方式

    文章目录 一 进程通信概念 二 进程间通信方式 2 1 管道 匿名管道 管道的实质 局限 2 2 有名管道 FIFO 2 3 信号 来源 2 4 消息队列 特点 2 5 共享内存 2 6 信号量 互斥 同步 信号量的实现 2 7 Socke
  • 基本运算电路之---反向比例运算电路(1)

    基本运算电路之 反向比例运算电路 1 我们是从大二上学期开始学习模电 丫丫的 当时一直知道这门学科很重要 励志学好它 嘿嘿 可惜后来发现然并卵 除了知道有二极管 三极管 MOS管 运放 就基本别无其他的事了 电路图的原理 数据计算更是一窍不
  • Linux屏中信息量大,一屏或几屏显示不全怎么办

    Linux屏中信息量大 一屏或几屏显示不全 两种方法 1 加个参数 more 例如 ls l more 这样敲完命令后 屏幕信息会停留在第一页上 再敲回车后 又多显示一行 但如果 信息太多敲回车太麻烦 可以采用第二种方法 2 写入一个文件中
  • linux下eclipse C++ 多线程调试

    初学linux编程 想要用linux下eclipse C 多线程调试 发现相关资料很少 所以想写一篇这样的文章 在这个页面看到 这里 If you use eclipse CDT you probably understand that e
  • 小信号先滤波还是先放大?

    1 是先滤波再放大 还是先放大再滤波 ADI 技术 电子技术论坛 广受欢迎的专业电子论坛 ADI亚洲技术支持中心的同事们给出的建议是 一般是先放大再滤波 这样经过放大器带来的噪声也可以被滤除 您怎么看 我觉得应该看是什么信号以及用什么样的运
  • Quartz 建表语句SQL文件

    Quartz 通过配置初始化数据库 https blog csdn net weixin 44371237 article details 133278217 官网找SQL SQL文件在jar里面 github下载 https github
  • SecureCRT MAC版本的单词跳转

    20210201 引言 最近更换了笔记本 第一次用mac 使用起来还是跟windows有很多不同 之前也已经安装了很多我在windows下的软件 例如securecrt 这个是我一直使用的终端软件 可能很多人在mac下都是使用iterm2
  • Linux系统意外断电无法启动解决方案

    首先看提示哪个盘有问题 如 sda2 fsck y dev sda2 修复完成后键入 reboot 重启电脑后修复OK
  • Gradle SNAPSHOT 版本更新

    转自 https www cnblogs com scoftlin p 9809623 html 在引用Maven 库上的aar 时经常会出现我们更新依赖的库时 Studio 并不能及时将最新的依赖库拉下来 这个因为gradle为了加快构建
  • [机器学习与scikit-learn-46]:特征工程-特征选择(降维)-2-常见的特征降维的方法大全

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 123953894 目录 前言 第1章