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

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[机器学习与scikit-learn-46]:特征工程-特征选择(降维)-2-常见的特征降维的方法大全相关的知识,希望对你有一定的参考价值。

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_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

以上是关于[机器学习与scikit-learn-46]:特征工程-特征选择(降维)-2-常见的特征降维的方法大全的主要内容,如果未能解决你的问题,请参考以下文章

机器学习系列:特征提取与处理

Python 与金融数据|生成机器学习的标签和特征

机器学习实战 | 机器学习特征工程最全解读

机器学习 - 特征筛选与降维

如何使用机器学习模型(或其特征系数)来解释该特征是不是与特定类别相关?

[机器学习与scikit-learn-42]:特征提取-1-从字典中提取特征