PCA

Posted Aaron12

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PCA相关的知识,希望对你有一定的参考价值。

注意协方差的理解:协方差是用来衡量数据相互联系程度的量,协方差矩阵是用来衡量多维数据中每一维的相互联系

通过协方差计算数据中的主要成分 从而主成分分析。

机器学习实战 PCA程序

# -*- coding: utf-8 -*-
from numpy import *
import numpy as np
#加载数据集 与之前有点不同
def loadDataSet(fileName, delim=\t):
    #打开文本文件
    fr = open(fileName)
    #对文本中的每一行分开
    stringArr = [line.strip().split(delim) for line in fr.readlines()]
    #利用map函数将每一行的数据值映射为float中
    datArr = [map(float,line) for line in stringArr]
    return mat(datArr)
#主成分分析(参数为数据集和默认维度)
def pca(dataMat, topNfeat=9999999):
    #求平均值
    meanVals = mean(dataMat, axis=0)
    #移除平均值
    meanRemoved = dataMat - meanVals 
    #计算协方差矩阵
    covMat = cov(meanRemoved, rowvar=0)
    #求解特征向量和特征值
    eigVals,eigVects = linalg.eig(mat(covMat))
    #从小到大排序的索引值
    eigValInd = argsort(eigVals) 
    #从大到小排序的索引值 并剔除多余维度          
    eigValInd = eigValInd[:-(topNfeat+1):-1] 
    #从大到小的特征向量
    redEigVects = eigVects[:,eigValInd]       
    #将数据转换到新的维度(数据乘以N个特征向量)
    lowDDataMat = meanRemoved * redEigVects
    #原矩阵被重构
    reconMat = (lowDDataMat * redEigVects.T) + meanVals
    #返回压缩后的矩阵和由该矩阵重构出来的原矩阵
    return lowDDataMat, reconMat
#画出降维后的数据和原始数据
def plotPca():
    filename = testSet.txt
    dataMat=loadDataSet(filename)
    lowDMat,reconMat=pca(dataMat,1)
    import matplotlib
    import matplotlib.pyplot as plt
    fig=plt.figure()
    ax=fig.add_subplot(lll)
    #三角形表示原始数据点
    ax.scatter(dataMat[:,0].flatten().A[0],dataMat[:,1].flatten().A[0],marker=^,s=90)
    #圆形点表示第一主成分点,点颜色为红色
    ax.scatter(reconMat[:,0].flatten().A[0],reconMat[:,1].flatten().A[0], marker=o,s=90,c=red)  
#后面的 利用pca降维半导体数据
def replaceNanWithMean(): 
    #加载数据集
    datMat = loadDataSet(secom.data,  )
    #得到特征数目
    numFeat = shape(datMat)[1]
    #将datMat转换为float
    map(map, [float, float], datMat)
    #在所有的特征上循环 对每个特征向量的每个特征
    for i in range(numFeat):
        #计算非NaN值的平均值
        meanVal = mean(datMat[nonzero(~isnan(datMat[:,i].A))[0],i]) 
        #将所有的NaN设置为平均值
        datMat[nonzero(isnan(datMat[:,i].A))[0],i] = meanVal  
    return datMat
‘‘‘
if __name__ == ‘__main__‘:
    filename = ‘testSet.txt‘
    dataMat=loadDataSet(filename)
    lowDMat,reconMat=pca(dataMat,1)
    #画图
    plotPca()
‘‘‘   

 

以上是关于PCA的主要内容,如果未能解决你的问题,请参考以下文章

matlab中pca

PCA实现

JSP的siom运作环境下sklearn进行辨别(PCA)代码实现的全过程

PCA 降维算法详解 以及代码示例

我的 Matlab 代码是不是适合将 PCA 应用于数据?

PCA主成分分析 原理讲解 python代码实现