PCA算法简述

深度学习

基础知识和各种网络结构实战 ...

前言

PCA算法(Principal Component Analysis)即主元分析法,是一种线性降维的算法。

一、PCA算法步骤

1.数据集为{x1,x2…xn}的多维向量,设维度为m维的话,考可以将数据集写出m行n列的的矩阵X(mn)
2.如果要将其降维k维则:
3.对数据集的每一个数据,每一位特征(每一行)减去各自特征的平均值,即对数据中的每一个特征维度进行零均值化,得到归一化后的矩阵B
4.求协方差矩阵C=C=1/n
B*B.T
5.分解协方差矩阵C的特征值和特征向量
6.将分解后的特征值从大到小排序,选择其中最大的k个,然后将这些特征值对应的k个特征向量作为行向量组成特征向量矩阵P
7.得到降维后的结果:Y=PX

二、python实现PCA算法

import numpy as np
#对数据中心化(零均值化)处理
def Centralization_function(data):
    '''
    :param data: data为{x1,x2...xn}的多维向量,设维度为m维的话,考可以将数据集写出m行n列的的矩阵A(m*n)
    :return: 矩阵data-data中相应向量的平均数
    '''
    zero_mean_matrix=np.nanmean(data,axis=0)
    #print(data-zero_mean_matrix)
    #axis=0,那么输出矩阵是1行,求每一列的平均(按照每一行去求平均);axis=1,输出矩阵是1列,求每一行的平均(按照每一列去求平均)。
    return data-zero_mean_matrix
def pca_svd(data,k):
    new_data=Centralization_function(data)
    Cov_mat=1/k*np.dot(new_data.T,new_data)
    U,s,V=np.linalg.svd(Cov_mat)
    pc=np.dot(new_data,U)
    return pc[:,0]
def test():
    data=np.array(
        [[2.5,2.4],[0.5,0.7],[2.2,2.9],[1.9,2.2],[3.1,3.0],[2.3,2.7],[2,1.6],[1,1.1],[1.5,1.6],[1.1,0.9]]
    )
    result_eig=pca_svd(data,1)
    print(result_eig)

if __name__=='__main__':
    test()

总结

期待大家和我交流,留言或者私信,一起学习,一起进步!

猜你喜欢

转载自blog.csdn.net/CltCj/article/details/119090126