Python日记(7)——主成分分析

Python日记(7)——主成分分析
每天做一个Python小练习,顺便记录一些小技巧。
主成分分析(PCA)是一个比较常见的特征降维,在许多领域都被广泛运用。

主成分分析原理

主成分分析法(PCA)是一种高效处理多维数据的多元统计分析方法,将主成分分析用于多指标(变量)的综合评价较为普遍。笔者自从本科学习数学建模就开始接触该方法,但是一直没有系统地整理过,借这个机会总结一下,以备不时之需。

该方法的基本思想是运用较少的变量去解释原始数据中的大部分变异,通过对原始数据相关矩阵内部结构关系的分析和计算,产生一系列互不相关的新变量。根据需要从中选取比原始变量个数少的几个新变量,这些新的变量就是所谓的主成分,它们能够充分解释原始数据的变化。因此,主成分分析法本质上是一种降维方法,也多被用于高维数据的降维处理。

基本步骤
针对待分析数据X(n个特征),PCA的具体步骤如下:
(1)对向量X进行去中心化;
(2)计算X的协方差矩阵,自由度选择0或1;
(3)计算协方差矩阵的特征值和特征向量;
(4)选取最大的k个特征值及其特征向量(k

逐步用python实现PCA
(1)在某一目录下创建你好需要分析的数据文件(.txt)
data.txt

(2) 创建PCA.py
导入需要用到的Numpy库和数据

import numpy as np

X = np.loadtxt(f'./{data_name}', dtype=np.float32)

(3)转置之后去中心化


    X = X.T
    X = np.round(X-X.mean(axis=0), decimals=2)

(4)计算协方差矩阵


    X_cov = np.cov(X.T)

(5)计算协方差矩阵的特征值和特征向量


    eigenvalues, eigenvectors = np.linalg.eig(X_cov)

(6)选取前K个特征向量


    klarge_index = eigenvalues.argsort()[-K:][::-1]
    k_eigenvectors = eigenvectors[klarge_index]

(7)X和k个特征向量进行点乘


    X_pca = np.dot(X, k_eigenvectors.T)

可执行的函数文件

import numpy as np

def main(data_name, K):

    X = np.loadtxt(f'./{data_name}', dtype=np.float32)

    X = X.T
    X = np.round(X-X.mean(axis=0), decimals=2)

    X_cov = np.cov(X.T)

    eigenvalues, eigenvectors = np.linalg.eig(X_cov)

    klarge_index = eigenvalues.argsort()[-K:][::-1]
    k_eigenvectors = eigenvectors[klarge_index]

    X_pca = np.dot(X, k_eigenvectors.T)

    return X_pca

if __name__ == "__main__":
    data_name = 'data.txt'
    print(main(data_name='data.txt', K=1))

结果输出为

[[ 0.10749508  0.00155213 -0.46345628 -0.1521932   0.07311186 -0.2486332
   0.35670133  0.04641728  0.01776464  0.26124036]]

Original: https://blog.csdn.net/weixin_56960596/article/details/123583625
Author: June_Pyt
Title: Python日记(7)——主成分分析

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/760927/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球