目录
一、概念
主成分分析(Principal Component Analysis, PCA)是一种线性降维算法,也是一种常用的数据预处理(Pre-Processing)方法。它的目标是是用方差(Variance)来衡量数据的差异性,并将差异性较大的高维数据投影到低维空间中进行表示。
1.特征维度约减
在机器学习领域中,一个样本往往存在着多种特征,而认为的很难去理解其中各项特征之间的关系, 因此人们提出了特征的维度约减这一技术,就是为了降低特征之间的复杂关系,将特征间的随机噪声等尽量降低,找出最本质或者说最重要的特征。
特征约减的目的是将高维特征向量映射到低维子空间中,特征维度约取可以起到可视化以及降低模型过拟合的优点。典型高维数据比如:基因数据;人脸图像;手写体图像等。
2.维度约减应用
常用领域:文本挖掘 人脸识别 手写体识别 图像检索 基因分类
3.常规维度约减法
二、主成分分析(PCA)
1.主成分分析 (PCA)基本思路
(1)通过协方差分析,建立高维空间到低维空间的线性映射/矩阵
(2)保留尽可能多的样本信息
(3)压缩后的数据对分类、聚类尽量不产生影响,甚至有所提升
为找到a1 , 使z1的方差最大,根据z1的方差定义,推导得出:
三、PCA算法流程
(1)数据中心化:对X中的每一行(即一个特征属性)进行零均值化,即减去这一行的均值
(2)求出数据中心化后矩阵X的协方差矩阵(即特征与特征之间的协方差构成的矩阵)
(3)求解协方差矩阵的特征值和特征向量
(4)将特征向量按照特征值从大到小按列进行排列称为矩阵,获取最前面的k列数据形成矩阵W。
(5)利用矩阵W和样本集X进行矩阵的乘法得到降低到k维的最终数据矩阵。
四、简单实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets.samples_generator import make_blobs
X, y = make_blobs(n_samples=10000, n_features=3, centers=[[3, 3, 3], [0, 0, 0], [1, 1, 1], [2, 2, 2]],
cluster_std=[0.2, 0.1, 0.2, 0.2], random_state=9)
# 降维到二维
pca = PCA(n_components=2)
pca.fit(X)
# 输出特征值
print(pca.explained_variance_)
输出特征向量
print(pca.components_)
# 降维后的数据
X_new = pca.transform(X)
print(X_new)
fig = plt.figure()
plt.scatter(X_new[:, 0], X_new[:, 1], marker='o')
plt.show()
五、实验总结
PCA是一种使用最广泛的数据降维算法,主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。特征约减的目的是将高维特征向量映射到低维子空间中;无监督学习的降维方法,它只需要特征值分解,就可以对数据进行压缩去噪,因此应用很广泛。
优点:简单易实现;仅需要以方差衡量信息量,不受数据集以外的因素影响;各主成分之间正交,可消除原始数据成分间的相互影响的因素。
缺点:主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。