zoukankan      html  css  js  c++  java
  • 机器学习实战---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()

     

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

  • 相关阅读:
    vue-路由传参
    ES6模板字符串
    es6中Set和Map数据结构
    本周面试题
    var、let和const定义变量的特点
    修改this的指向
    Echarts图表插件
    ES6学习
    swiper插件学习
    每日刷题4
  • 原文地址:https://www.cnblogs.com/ssyfj/p/13412866.html
Copyright © 2011-2022 走看看