特征工程之特征选择----降维算法PCA初探

Posted iostreamzl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特征工程之特征选择----降维算法PCA初探相关的知识,希望对你有一定的参考价值。

维度的概念

对于ndarray对象和series对象,shape返回的数据中有几个数据就是几维
对于dataframe对象,列数就是维度数,即维度=shape[1]
降维算法的降维指的是,降低特征矩阵中的特征的数量

降维的目的:

  1. 让算法运算更快,效果更好
  2. 高维数据可视化

PCA 的信息衡量指标----可解释性方差

在讲降维算法之前我们需要知道降维算法根据什么指标来选择特征的
方差过滤中我们了解到,一个特征的方差越小,表明特征的变化越小,相对的,对标签的反映度就不够。也就是说该特征带有的有效信息很少
PCA 使用的信息衡量指标就是方差,也叫做可解释性方差,方差越大,带有的有效信息越多

降维过程简述

降维算法涉及一大堆高深的数学原理,博主能力有限,不能将的明白那些繁杂的数学公式,下面的解释只是我个人的理解,不正确的地方,欢迎再评论指出。

首先来看将二维数据降到一维的例子,如下图所示
在这里插入图片描述
二维降维过程描述:
将原始坐标系旋转 45°(这个角度随机决定的),再新的坐标系中找出原坐标对应的新坐标计算 出新的特征矩阵各个特征的 方差 ,选择方差最大(含有的有效信息越多)的一个特征作为新的特征。删除没有被选中的特征,降维成功。
将上述过程放到高纬度空间:
通过某种变化(数学的魔力),找出新的n维坐标系,将原始值映射到新的坐标系,计算出新的值。计算每个新的特征矩阵的方差,选出K个方差最大的特征,作为新的特征矩阵,删除其他特征,降维算法实现。

降维算法与前面的特征选择算法的区别

特征选择是从已存在的特征中选取携带信息最多的,选完之后的特征依然是原始特征,依然具有可解释性,我们依然知道这个特征在原数据的哪个位置,代表着原数据上的什么含义。
而降维算法,是将已存在的特征进行压缩,降维完毕后的特征不是原本的特征矩阵中的任何一个特征,而是通过某些方式组合起来的新特征。通常来说,在新的特征矩阵生成之前,我们无法知晓降维算法们都建立了怎样的新特征向量,新特征矩阵生成之后也不具有可读性,我们无法判断新特征矩阵的特征是从原数据中的什么特征组合而来,新特征虽然带有原始数据的信息,却已经不是原数据上代表着的含义了。降维算法因此是特征创造(feature creation,或feature construction)的一种。
可以想见,PCA一般不适用于探索特征和标签之间的关系的模型(如线性回归),因为无法解释的新特征和标签之间的关系不具有意义。所以在线性回归模型中,我们使用特征选择。

sklearn中的降维算法

sklearn中的降维算法都在decomposition中

作用
decomposition.PCA主成分分析
decomposition.IncrementalPCA增量主成分分析
decomposition.KernelPCA核主成分分析
decomposition.MiniBatchSparsePCA小批量主成分分析
decomposition.SparsePCA稀疏主成分分析
decomposition.TruncatedSVD截断的SVD
decomposition.FactorAnalysis因子分析
decomposition.FastICA独立成分分析的快速算法
decomposition.DictionaryLearning字典学习
decomposition.MiniBachDictionaryLearning小批量字典学习
decomposition.dict_learning字典学习用于矩阵分解
decomposition.dict_learning_online在线字典学习用于矩阵分解
decomposition.NMF非负矩阵分解
decomposition.SparseCoder稀疏编码

示例

对sklearn中鸢尾花数据集的降维

导入相关库

from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline

提取特征和标签

# 提取特征和标签
iris = load_iris()
X = iris['data']
y = iris['target']
X

在这里插入图片描述

降维

# 实例化PCA,并实现数据降维
pca_2 = PCA(n_components=2)
X_dim2 = pca_2.fit_transform(X)
X_dim2.shape # (150, 2)
X_dim2

在这里插入图片描述
可以看出数据已经降到了二维,新的特征,和原始数据完全不一样了。这也冲侧面说明了,降维后的特征只是具有了原始数据的信息,但是含义已经变了。

探索降维后的数据

# 通过explained_variance_s属性查看降维后的每个特征的可解释性方差的大小
# 方差越大带有的有效信息越大
pca_2.explained_variance_
# array([4.22824171, 0.24267075])

# 通过explained_variance_ratio_属性查看降维后的每个特征所占信息量占原始信息量的比例
pca_2.explained_variance_ratio_
# array([0.92461872, 0.05306648])

# 查看降维后的所有特征信息量占原始数据的比例
pca_2.explained_variance_ratio_.sum()
# 0.9776852063187949 降维后的数据可以反映原始数据97.77的性质

总结

降维后的特征不再是原始特征,对于PCA的参数将在下面的章节中深入研究

以上是关于特征工程之特征选择----降维算法PCA初探的主要内容,如果未能解决你的问题,请参考以下文章

PCA降维算法

常用降维方法之PCA 和 LDA

数据分析之特征创造——降维算法

机器学习特征工程-特征降维

机器学习实战之PCA

机器学习系列文章——特征的处理与选择(归一化标准化降维PCA)