降维 可以 作为预处理步骤,在数据应用到其他算法之前清洗数据。有应用于无标签数据的常见降维方法:
主成分分析、因子分析(假设隐变量 且 数据是这些隐变量和某些噪声的线性组合)、独立成分分析(假设数据为多个数据源的混合观测结果)。
主成分分析(PCA) 是一种非常基础的降维算法,也是应用最广的无监督算法之一,尤其适用于数据可视化、噪音过滤、特征抽取(不是特征选择)和特征工程等领域。
通过PCA进行降维处理,我们就可以同时获得决策树和SVM的优点:一方面,得到了和决策一样简单的分类器,同时分类间隔和SVM一样好。
简介
以两变量为例,在主成分分析中,一种量化两变量间关系的方法是在数据中找到一组主轴,并用这些主轴来描述数据集。
这些向量表示数据主轴,上图的箭头长度表示输入数据中各个轴的“重要程度”——更准确地说,它衡量了数据投影到主轴上的方差的大小。每个数据点在主轴上的投影就是数据的“主成分”。
PCA 移动坐标轴,第一个新轴选择的是原始数据中方差最大的方向,第2个新轴 选择和第一个 轴正交且具有次大方差的方向。该过程重复,重复次数为原始数据中特征的数目,后续选出有代表性的成分。
在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。
降维必定舍去部分信息,但一般有两个好处:1.使样本采样密度增大;2.当数据受到噪声影响时,最小特征值所对应的特征向量往往与噪声有关,将它们舍弃在一定程度上能起到去噪的效果。
缺陷:
1.经常受数据集的异常点影响是 PCA 的主要弱点。
2.PCA便于通用实现,但是很难实现个性化的优化。
3.PCA假设数据各主特征是分布在正交方向上,如果在非正交方向上存在几个方差较大的方向,PCA的效果就大打折扣了。
部分数学理解
(对PCA降维问题)理解:
最近重构性:因为要用低维尽可能地表达高维,投影也要考虑到代表性。
最大可分性:即使是低维,也要尽可能区分样本。
基于这两点,也能得到PCA的代价函数(目标函数),且是等价推导。
(标记:下图的低维表示还未理解)
(基向量长度为1)
梳理:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。
使用
1.用PCA降维
用 PCA 降维意味着去除一个或多个最小主成分,从而得到一个更低维度且保留最大数据方差的数据投影,数据的总体关系仍然被大致保留了下来。
示例:
降维的有用之处在数据仅有两个维度时可能不是很明显,但是当数据维度很高时,它的价值就有所体现了,如对(8*8像素,即64维的)手写数字分类。
2.成分的含义
3. 选择成分的数量
在实际使用 PCA 的过程中,正确估计用于描述数据的成分的数量是非常重要的环节。我们可以将累计方差贡献率看作是关于成分数量的函数,从而确定所需成分的数量。
PCA 对数学知识的要求:
1.理解向量内积的几何意义与矩阵相乘知识
2.理解方差、协方差
3.线性代数相关知识
python 中的PCA
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
pca = PCA(n_components=1)
pca.fit(data_mat)
lowDmat = pca.transform(data_mat) # 降维后的数据
print('降维后的数据维度:', lowDmat.shape)
reconMat = pca.inverse_transform(lowDmat) # s重构数据
print("重构后的数据维度:", reconMat.shape) # 重构数据维度
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(data_mat[:, 0].flatten().A[0], data_mat[:, 1].flatten().A[0], marker='^', s=90)
ax.scatter(reconMat[:, 0], reconMat[:, 1], marker='o', s=90, c='red')
plt.show()