• 技术文章 >Python技术 >Python基础教程

    python中PCA的处理过程

    小妮浅浅小妮浅浅2021-10-14 10:21:41原创4231

    1、输入矩阵归一化处理。

    2、计算样本协方差矩阵。

    3、求解协方差矩阵指定的特征值对应特征向量。

    4、确定转换矩阵,求解降维数据。

    实例

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    #/usr/nom/env python

    # _*_coding:utf-8_*_

    # @Time      :2021/9/3 10:04

    # @Author    :A bigfish

    # @FileName  :maindemo13.py

    # @Software  :PyCharm

      

    import matplotlib.pyplot as plt

    import numpy as np

    from pylab import *

      

    # 首先导入数据,此部分为从存储列表或单元中读取分析数据

    def loadDataSet(filename, delim='\t'):    #此处的'\t'表示不同变量间的分隔符,t表示tab键键入的空格

        fr = open(filename)

        stringArr = [line.strip().split(delim) for line in fr.readlines()]

        dataArr = [list(map(float, line)) for line in stringArr]

        return np.mat(dataArr)

      

      

    # 定义pca分析函数

    def pca(dataset, topNfeat = 99999):        #topNfeat特征值数目,通常不用设置,因为后续要进行可视化分析               

        meanVals = np.mean(dataset, axis=0)    #求均值

        meanRemoved = dataset - meanVals       #预处理

        covMat = np.cov(meanRemoved, rowvar=0) #求解输入数据协方差矩阵

        eigVals, eigVects = np.linalg.eig(np.mat(covMat))    #求解特征值,特征向量

        eigVaInd = np.argsort(eigVals)         #对特征值进行排序处理,默认为升序

        eigVaInd = eigVaInd[-1:-(topNfeat):-1] #根据指定数目进行逆序处理

        redEigVects = eigVects[:,eigVaInd]     #选取对应特征向量

        lowDataMat = meanRemoved * redEigVects #数据降维X*P

        recontMat = (lowDataMat * redEigVects.T) + meanVals #c处理进行了数据重构,非必须选项

        return lowDataMat, recontMat, eigVals  #返回数据

      

    # 定义特值值绘制函数

    def plotEig(dataset, numFeat=20):           

        mpl.rcParams['font.sans-serif'] = ['Times NewRoman']

        sumData = np.zeros((1, numFeat))

        dataset = dataset / sum(dataset)

        for i in range(numFeat):

            sumData[0, i] = sum(dataset[0:i])

      

        X = np.linspace(1, numFeat, numFeat)

        fig = plt.figure()

        ax = fig.add_subplot(211)

        ax.plot(X, (sumData*100).T, 'r-+')

        mpl.rcParams['font.sans-serif'] = ['SimHei']

        plt.ylabel('累计方差百分比')

      

        ax2 = fig.add_subplot(212)

        ax2.plot(X.T, (dataset[0:numFeat].T)*100, 'b-*')

        plt.xlabel('主成分数')

        plt.ylabel('方差百分比')

        plt.show()

      

    # 定义原始数据及第一主成分绘制函数

    def plotData(OrigData, recData):

        import matplotlib.pyplot as plt

        fig = plt.figure()

        ax = fig.add_subplot(111)

        ax.scatter(OrigData[:,0].flatten().A[0], OrigData[:, 1].flatten().A[0], c='blue',marker='^', s=90)

        ax.scatter(recData[:, 0].flatten().A[0], recData[:, 1].flatten().A[0], c='red', marker='o',s=90)

    plt.show()

    以上就是python中PCA的处理过程,希望对大家有所帮助。更多Python学习指路:python基础教程

    本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。

    专题推荐:python pca
    上一篇:python快速排序算法的使用 下一篇:如何用python画月饼

    相关文章推荐

    • python中pdb的中断控制• python中pdb有哪些调试命令• python标识符的使用注意• python字符串的基础操作• python列表的基本用法• Python集合有什么特点• Python字典的特点• python uiautomator2的点击操作• python socket的连接步骤• python使用VS接收数据• python中echo服务器的介绍• python中requests如何优化接口调用• python快速排序算法的使用

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网