【Python那些事儿】主成分分析PCA

主成分分析PCA(Principal Component Analysis):

  • 无监督方法
  • 保留数据分布

PCA通过以下步骤来完成目标:

  • 将数据集标准化成为均值为0;
  • 找出数据集的相关矩阵和单位标准偏差值;
  • 将相关矩阵分解为特征向量和特征值;
  • 基于降序的特征值选择Top-N特征向量;
  • 投射输入的特征向量矩阵到一个新的子空间。

对于一维数据,可用方差来衡量数据的分布或散步情况。在多维的场景里,我们很容易将变量之间的相关性表示为矩阵,专业名词是协方差矩阵。用标准差对其数值进行归一化处理后,就得到了相关矩阵

执行特征值分解的时候,先得获得协方差矩阵的特征向量特征值主特征向量,也就是具有最大的特征值的向量,指示了原始数据的最大变化方向。

一个数据集(n*m),有n个实例,m个维度,PCA将它投射成一个小得多的子空间(n*d),其中d<

操作方法

我们使用iris数据集来学习如何高效使用PCA进行降维,从4维降为2维。

import numpy as np
from sklearn.datasets import load_iris
from sklearn.preprocessing import scale
import scipy
import matplotlib.pyplot as plt

data = load_iris()
x = data['data']
y = data['target']

#标准化  缩放成均值为0,标准差为1
x_s = scale(x, with_mean=True, with_std=True, axis=0)#这里用到了scale函数,它可以完成中心化、缩放和标准化等功能。
#中心化:将单个值减去平均值;
#缩放:将每个值除以变量的标准差;
#标准化:先中心化,然后进行放缩。

#计算相关矩阵
x_c = np.corrcoef(x_s.T)

#从相关矩阵中,找到特征值和特征向量
eig_val, eig_vec = scipy.linalg.eig(x_c)

#选择前两个特征向量
w = eig_vec[:,0:2]

#用合适的特征向量将原来4维的数据集降为2维
x_rd = x_s.dot(w)

#画出新的2维的散点图
plt.figure(1)
plt.scatter(x_rd[:,0], x_rd[:,1], c=y)
plt.xlabel('component 1')
plt.ylabel('component 2')


if __name__ == '__main__':
    plt.show()


【Python那些事儿】主成分分析PCA_第1张图片

可看到,在x周和y轴上绘制出主成分,并根据目标变量给它们区分颜色。这样成分1和成分2能够区分出鸢尾花的3个类别。这样,就用PCA有效地将维度从4降为2,并保持了区分鸢尾花不同类别实例的能力。

你可能感兴趣的:(Python)