zoukankan      html  css  js  c++  java
  • 使用python利用pca对数据降维处理

    下面写下用pca对数据进行降维处理的过程:

    Python源代码如下:

     1 from numpy import *;
     2 def loadDataSet(fileName,delim='	'):
     3     # 打开文件
     4     fr=open(fileName);
     5     """
     6 >>> line0=fr.readlines();
     7 >>> type(line0)
     8 <class 'list'>
     9 >>> line0[0]
    10 '10.235186	11.321997
    '
    11     """
    12     stringArr=[line.strip().split(delim) for line in fr.readlines()];
    13     # map函数作用于给定序列的每一个元素,并用一个列表来提供返回值
    14     datArr=[list(map(lambda x:float(x),line)) for line in stringArr];
    15     dataMat=mat(datArr);
    16     return dataMat;
    17 
    18 def pcaFun(dataMat,topNfeat=9999999):
    19     # 计算每列的平均值axis=0,计算每行的平均值axis=1
    20     meanVals=mean(dataMat,axis=0);
    21     # 去平均值,shape(dataMat)=(1000, 2),shape(meanVals)=(1, 2)
    22     meanRemoved=dataMat-meanVals;# 可以直接对两个维度不同的矩阵进行运算
    23     # 计算协方差矩阵shape(covMat)=(2, 2)
    24     covMat=cov(meanRemoved,rowvar=0);
    25     # 计算协方差矩阵的特征值和特征向量
    26     eigVals,eigVects=linalg.eig(mat(covMat));
    27     # 对特征值按升序排序
    28     eigValInd=argsort(eigVals);
    29     # 对特征值进行逆序排序
    30     eigValInd=eigValInd[:-(topNfeat+1):-1];
    31     # 计算最大特征值对应的特征向量
    32     redEigVects=eigVects[:,eigValInd];
    33     # 计算降维之后的数据集
    34     lowDDataMat=meanRemoved*redEigVects;
    35     # 重构原始数据
    36     reconMat=(lowDDataMat*redEigVects.T)+meanVals;
    37     return lowDDataMat,reconMat;
    38 
    39 import matplotlib.pyplot as plt;
    40 # 绘图,绘出原始数据和降维后的数据
    41 def plotData(dataMat,reconMat):
    42     # import matplotlib;
    43     # import matplotlib.pyplot as plt;
    44     fig=plt.figure();
    45     ax=fig.add_subplot(111);
    46     ax.scatter(dataMat[:,0].flatten().A[0],dataMat[:,1].flatten().A[0],marker='^',s=90);
    47     ax.scatter(reconMat[:,0].flatten().A[0],reconMat[:,1].flatten().A[0],marker='o',s=50,c='red');
    48     plt.show();

    上面代码中lowDDataMat为降维后的数据集,reconMat为重构的数据集;绘出原始数据和降维后的数据图如下:

     

  • 相关阅读:
    JavaScript学习(五)
    浏览器输入地址到返回页面
    session cookie
    springboot 运行jar包
    mysql:The user specified as a definer ('root'@'%') does not exist
    easyUI
    json
    json fastjson
    springboot:because it is a JDK dynamic proxy that implements:
    git 提示错误:(non-fast-forward)
  • 原文地址:https://www.cnblogs.com/yuzhuwei/p/4142518.html
Copyright © 2011-2022 走看看