机器学习实战---PCA降维

一:参考资料

(一)机器学习基础---无监督学习之降维

(二)机器学习作业---主成分分析PCA

(三)PCA的数学原理(墙)

(四)numpy.linalg,eig(a)函数

(五)numpy.linalg.svd函数

二:代码实现

import numpy as np
import matplotlib.pyplot as plt

def loadDataSet(filename):
    data = np.loadtxt(filename)
    return data

def pca(dataArr,topNfeat=9999999):  #以前使用svd分解,这里直接去求特征值和特征向量
    """
    :param dataArr: 传入的数据集
    :param topNfeat: 可选参数,表示应用的特征
    """
    meanV = np.mean(dataArr,0)
    meanRem = dataArr - meanV

    covArr = np.cov(meanRem,rowvar=0)   #获取协方差矩阵
    eigVals,eigVects = np.linalg.eig(covArr)    #求解特征值和特征向量矩阵
    eigValsInd = np.argsort(eigVals)[::-1]  #默认获取小到大值,::-1求其逆向
    eigValsInd = eigValsInd[:topNfeat]  #获取最大N个值

    #上面获取了特征值索引,下面获取特征向量
    redEigVects = eigVects[:,eigValsInd]    #新的特征向量矩阵
    #降维
    lowDDataArr = meanRem@redEigVects   #pca降维
    reconArr = lowDDataArr@redEigVects.T+meanV    #pca还原,因为redEigVects.T即为redEigVects的逆矩阵,所以这里说进行还原操作
    return lowDDataArr,reconArr

data = loadDataSet("testSet.txt")
lowD,reconArr = pca(data,1)
print(lowD.shape)

plt.figure()
plt.scatter(data[:,0],data[:,1],marker="^",s=90)
plt.scatter(reconArr[:,0],reconArr[:,1],marker="o",c="r",s=50)
plt.show()

 

本文不多介绍,详细见前面推荐的博客!!!

 

posted @ 2020-07-31 23:35  山上有风景  阅读(281)  评论(0编辑  收藏  举报