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

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

主成分分析原理

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

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

基本步骤
针对待分析数据X(n个特征),PCA的具体步骤如下:
(1)对向量X进行去中心化;
(2)计算X的协方差矩阵,自由度选择0或1;
(3)计算协方差矩阵的特征值和特征向量;
(4)选取最大的k个特征值及其特征向量(k (5)用X与选取的特征向量相乘,得到k个主成分,即降维结果。
通过以上步骤,将原数据的n个特征减少到k个。

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

2.5 0.5 2.2 1.9 3.1 2.3 2.0 1.0 1.5 1.1
2.4 0.7 2.9 2.2 3.0 2.7 1.6 1.1 1.6 0.9

(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个特征向量

# 选取前K个特征向量
    klarge_index = eigenvalues.argsort()[-K:][::-1]
    k_eigenvectors = eigenvectors[klarge_index]

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

# 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)

    # 选取前K个特征向量
    klarge_index = eigenvalues.argsort()[-K:][::-1]
    k_eigenvectors = eigenvectors[klarge_index]

    # X和k个特征向量进行点乘
    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]]

你可能感兴趣的:(化工数值计算,python,机器学习,开发语言,数据挖掘)