主成分分析法_探索主成分分析法

6029b48db3608f01e7120e0688e6b594.png

主成分分析法 (Principal Component Analysis, PCA) 是一种数据压缩法,可以从数据中提取重要的部分并排除不重要的部分,是奇异值分解 (Singular Value Decomposition, SVD) 的重要应用。

SVD 是线性代数的一个亮点。

是一个
的列阵,矩阵秩
, SVD 会提供四个子空间的正交基,按重要性排序。我们有两组奇异向量,
里,
里,把
排列在
矩阵
,把
排列在
矩阵

c12ce22af7ea960712bbc5ad51320748.png

SVD 不但找出正交基,还把

对角化成
的大小一样
,所以不一定是个方阵,可能右边和下边有零。但是我们可以丢掉零空间和左零空间的基向量,在
里,
是个
的方阵,
从大排到小。

SVD 是

是正交矩阵,有旋转作用。
是对角矩阵,有伸展作用。SVD 把
的变换分解成旋转、伸展、旋转。

的特征向量,叫左奇异向量。
的特征向量,叫右奇异向量。
有共同的特征值
,都是
的奇异值平方。用手的话可以用这个方法,但如果是很大的矩阵,要用计算机分解的话,我们不想乘
,太浪费计算力,最好直接用 svd() 。

现在我们要把数据带到实数空间,所以只能有数字,不能有分类数据。(其实我觉得不应该叫“数据”,因为“分类数据”根本就没有数字。)表格中,一行代表一条记录,一列代表一个特征。

表格里行比列多,每一列都减掉平均值,转换成矩阵,

是又高又细的、中心化好的矩阵,样本协方差矩阵是
的理由是求无偏估计。总方差是
的跡(对角线的和),等于
的特征值的和,也等于
的奇异值平方的和,

重要的是右奇异向量,

指向第
重要的方向,解释总方差的
部分。我们选
个最重要的
是主成分,我们只保留
的信息,降低了维数。

用 python 来实践一下吧,用 iris 数据,中心化,做 svd() ,奇异值除以

会把数据旋转到最好的方向,如果我们要用二维图表来看的话,
会变成
轴,
会变成
轴,丢掉
。我们用行向量,所以旋转做
就可以了,如果有一个行向量
,就做
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from itertools import combinations

# 准备数据
iris = datasets.load_iris()

# 四维数据分六个二维图表显示
fig, axes = plt.subplots(2, 3)
axes = axes.ravel()
for i, (x, y) in enumerate(combinations(range(4), 2)):
    axes[i].scatter(iris.data[:50, x], iris.data[:50, y],
        label=iris.target_names[0])
    axes[i].scatter(iris.data[50:100, x], iris.data[50:100, y],
        label=iris.target_names[1])
    axes[i].scatter(iris.data[100:, x], iris.data[100:, y],
        label=iris.target_names[2])
    axes[i].legend()
    axes[i].set_xlabel(iris.feature_names[x])
    axes[i].set_ylabel(iris.feature_names[y])
plt.show()

# 做 SVD
A = iris.data - iris.data.mean(axis=0)
U, S, VT = np.linalg.svd(A, full_matrices=False)
S /= np.sqrt(A.shape[1] - 1)
print('如果从四维降到二维,会保留总方差的 {:.2%}。'
    .format((S**2)[:2].sum() / (S**2).sum()))

# 从四维降到二维后图表显示
A_t = (A @ VT.T)[:, :2]
plt.scatter(A_t[:50, 0], A_t[:50, 1], label=iris.target_names[0])
plt.scatter(A_t[50:100, 0], A_t[50:100, 1], label=iris.target_names[1])
plt.scatter(A_t[100:, 0], A_t[100:, 1], label=iris.target_names[2])
plt.legend()
plt.xlabel(r'$vec v_1$')
plt.ylabel(r'$vec v_2$')
plt.show()

四维数据,需要用六个二维图表来看,但这些都是截面,仍然不能想象四维空间里的样子。

f13db4400180fd52152a6ea664517a14.png

从四维降到二维后,保留 97.77% 的信息。

f2a0a482a557e12dfb3ad47ce6d161f0.png

PCA 的功能就是压缩数据,同时保留最重要的信息。在数据分析的领域里,我们可以用它来降维。高维不仅对我们的想象力造成劳损,对建模也是一种诅咒,在这里主成分分析法是一个很有用的降维技巧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值