主成分分析

实验目的

继续学习无监督学习中的降维算法,最经典的降维算法为主成分分析

实验原理

PCA的几何解释平移(去中心化)、旋转坐标轴,找到主成分pc1和pc2。
PCA的思想很简单——减少数据集的特征数量,同时尽可能地保留信息。

如何得到这些包含最大差异性的主成分方向呢?
通过计算数据矩阵的协方差矩阵
然后得到协方差矩阵的特征值特征向量
选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。
这样就可以将数据矩阵转换到新的空间当中,实现数据特征的降维。

PCA的算法两种实现方法

(1) 基于SVD分解协方差矩阵实现PCA算法

第一步是均值归一化。
第二步是计算协方差矩阵。
第三步是计算协方差矩阵𝛴的特征向量(eigenvectors),可以利用奇异值分解(SVD)来求解。

(2) 基于特征值分解协方差矩阵实现PCA算法

(1)均值归一化。我们需要计算出所有特征的均值,然后令 𝑦 𝑘 = 𝑦 𝑘 − 𝜈 𝑘 。(𝜈 𝑘 为均值)。如果特征是在不同的数量级上,我们还需要将其除以标准差 𝜎 2 。
(2)计算协方差矩阵𝛴。
(3)用特征值分解方法计算协方差矩阵𝛴的特征值和特征向量。
(4)对特征值从大到小排序,选择其中最大的𝑙个。然后将其对应的𝑙个特征向量分别作为行向量组成特征向量矩阵𝑄。
(5)将数据转换到𝑙个特征向量构建的新空间中,即 𝑍 = 𝑄𝑌 。

实验过程

求协方差的特征值和特征向量,然后做数据转换。

import numpy as np


def pca(data):
    row = np.size(data, 0)  # 行
    col = np.size(data, 1)  # 列
    avg = np.zeros([1, col])
    for i in range(col):
        avg[0, i] = np.mean(data[:, i])
    for i in range(col):
        data[:, i] = data[:, i] - avg[0, i]
    mat = np.cov(data, rowvar=False)
    print("mat:", mat)
    eigenvalue, featurevector = np.linalg.eig(mat)
    print("协方差矩阵:", mat)
    print("特征值:", eigenvalue)
    print("特征向量:", featurevector)
    featurevector = np.transpose(featurevector)
    finaldata = np.dot(data, featurevector[np.argmax(eigenvalue)])
    print("最终结果", finaldata)


data = np.array([[2.5, 2.4],
                 [0.5, 0.7],
                 [2.2, 2.9],
                 [1.9, 2.2],
                 [3.1, 3],
                 [2.3, 2.7],
                 [2, 1.6],
                 [1, 1.1],
                 [1.5, 1.6],
                 [1.1, 0.9]])
pca(data)

实验结果

二维数据空间转到一维数据空间的结果如下:

最终结果 [-0.82797019  1.77758033 -0.99219749 -0.27421042 -1.67580142 -0.9129491
  0.09910944  1.14457216  0.43804614  1.22382056]
批阅人
分数
时间2021年12月31日
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值