pca基础知识不了解的可以先看下一这篇博客:https://www.cnblogs.com/lliuye/p/9156763.html

具体算法实现如下:

 import numpy as np
import matplotlib.pyplot as plt
# 载入数据
data = np.genfromtxt("data.csv", delimiter=",")
x_data = data[:,]
y_data = data[:,]
plt.scatter(x_data,y_data)
plt.show()
print(x_data.shape)
# 数据中心化
def zeroMean(dataMat):
# 按列求平均,即各个特征的平均
meanVal = np.mean(dataMat, axis=)
newData = dataMat - meanVal
return newData, meanVal
newData,meanVal=zeroMean(data)
print(newData.shape)
# np.cov用于求协方差矩阵,参数rowvar=0说明数据一行代表一个样本,若非0,说明传入的数据一列代表一个样本。
covMat = np.cov(newData, rowvar=)#因为是行作为样本,所以列作为特征,得到的协方差是2*
# 协方差矩阵
print(covMat)
# np.linalg.eig求矩阵的特征值和特征向量
eigVals, eigVects = np.linalg.eig(np.mat(covMat))
# 特征值
print(eigVals)
# 特征向量
print(eigVects.shape)
# 对特征值从小到大排序
eigValIndice = np.argsort(eigVals)
eigValIndice
top =
# 最大的n个特征值的下标
n_eigValIndice = eigValIndice[-:-(top+):-]
print(n_eigValIndice)
# 最大的n个特征值对应的特征向量
n_eigVect = eigVects[:,n_eigValIndice]
print(n_eigVect.shape)
# 低维特征空间的数据
lowDDataMat = newData*n_eigVect#原始数据投射到选取的特征向量上
print(lowDDataMat.shape)#低纬数据
# 利用低纬度数据来重构数据
reconMat = (lowDDataMat*n_eigVect.T) + meanVal#降维的逆操作
reconMat
# 载入数据
data = np.genfromtxt("data.csv", delimiter=",")
x_data = data[:,]
y_data = data[:,]
plt.scatter(x_data,y_data) # 重构的数据
x_data = np.array(reconMat)[:,]
y_data = np.array(reconMat)[:,]
plt.scatter(x_data,y_data,c='r')
plt.show() plt.show()

关于np.cov的用法详细如下:

1. np.cov(x)
 
x=[1,2,3,4]
np.cov(x)12
输出为 array(1.6666666666666665),一开始我以为当x为一个行向量时,cov(x)计算的就是x的方差。但是通过观察发现
 
np.var(x)*4     #output:5
np.cov(x)*3     #output:512
np.cov(x)这种情况计算的是x方差的无偏估计,即s2=∑ni=1(x−x^)n−1s2=∑i=1n(x−x^)n−1,而np.var(x)计算的则是s2=∑ni=1(x−x^)ns2=∑i=1n(x−x^)n
接着我们再假设x为一个4*3的矩阵
 
X=np.array([[1 ,5 ,6] ,[4 ,3 ,9 ],[ 4 ,2 ,9],[ 4 ,7 ,2]])
np.cov(x)12
首先不同于matlab。在numpy中,将x的每一列视作一个独立的变量,因此这里一共有4个3维的变量,因此将会输出一个4*4的协方差矩阵
 
其中对角线元素是每个维度的方差,非对角线上的元素则是不同维度间的协方差。
2. np.cov(x,y)
在学习的过程中还有一点比较困惑的是np.cov(x)和np.cov(x,y)的区别,以下用代码来进行说明:
 
X=np.array([[1 ,5 ,6] ,[4 ,3 ,9 ],[ 4 ,2 ,9],[ 4 ,7 ,2]])
x=X[0:2]
y=X[2:4]
print(np.cov(X))
print(np.cov(x,y))12345
输出为
 
可以看出两者的输出是相同的。因此所谓的np.cov(X)其实就是把np.cov(x,y)中两个变量所有的维度纵向拼接在一起作为X参与运算。

pca算法实现的更多相关文章

  1. PCA算法是怎么跟协方差矩阵/特征值/特征向量勾搭起来的?

    PCA, Principle Component Analysis, 主成份分析, 是使用最广泛的降维算法. ...... (关于PCA的算法步骤和应用场景随便一搜就能找到了, 所以这里就不说了. ) ...

  2. 模式识别(1)——PCA算法

    作者:桂. 时间:2017-02-26  19:54:26 链接:http://www.cnblogs.com/xingshansi/articles/6445625.html 声明:转载请注明出处, ...

  3. 三种方法实现PCA算法(Python)

    主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域.它的主要作用是对高维数据进行降维.PCA把原先的n个特征用数目 ...

  4. 降维之pca算法

    pca算法: 算法原理: pca利用的两个维度之间的关系和协方差成正比,协方差为0时,表示这两个维度无关,如果协方差越大这表明两个维度之间相关性越大,因而降维的时候, 都是找协方差最大的. 将XX中的 ...

  5. PCA算法学习(Matlab实现)

    PCA(主成分分析)算法,主要用于数据降维,保留了数据集中对方差贡献最大的若干个特征来达到简化数据集的目的. 实现数据降维的步骤: 1.将原始数据中的每一个样本用向量表示,把所有样本组合起来构成一个矩 ...

  6. OpenCV学习(35) OpenCV中的PCA算法

    PCA算法的基本原理可以参考:http://www.cnblogs.com/mikewolf2002/p/3429711.html     对一副宽p.高q的二维灰度图,要完整表示该图像,需要m = ...

  7. 我所认识的PCA算法的princomp函数与经历 (基于matlab)

    我接触princomp函数,主要是因为实验室的项目需要,所以我一接触的时候就希望快点学会怎么用. 项目中需要利用PCA算法对大量数据进行降维. 简介:主成分分析 ( Principal Compone ...

  8. PCA算法的最小平方误差解释

    PCA算法另外一种理解角度是:最小化点到投影后点的距离平方和. 假设我们有m个样本点,且都位于n维空间 中,而我们要把原n维空间中的样本点投影到k维子空间W中去(k<n),并使得这m个点到投影点 ...

  9. PCA算法理解及代码实现

    github:PCA代码实现.PCA应用 本文算法均使用python3实现 1. 数据降维   在实际生产生活中,我们所获得的数据集在特征上往往具有很高的维度,对高维度的数据进行处理时消耗的时间很大, ...

  10. Python使用三种方法实现PCA算法[转]

    主成分分析(PCA) vs 多元判别式分析(MDA) PCA和MDA都是线性变换的方法,二者关系密切.在PCA中,我们寻找数据集中最大化方差的成分,在MDA中,我们对类间最大散布的方向更感兴趣. 一句 ...

随机推荐

  1. docker Dockerfile学习---nginx负载均衡tomcat服务

    1.此过程在nginx的基础上,也就是上篇博客写的内容. 2.创建项目目录并上传包,解压 $ mkdir centos_tomcat $ cd centos_tomcat $ tar zxvf jdk ...

  2. systemctl命令的使用及服务状态的查看

    二.systemctl命令 systemctl list-units            ##列出当前系统服务的状态 systemctl list-unit-files       ##列出服务的开 ...

  3. Linux CentOS-7.0上安装Tomcat7

    Linux CentOS-7.0上安装Tomcat7   安装说明 安装环境:CentOS-7.0.1406安装方式:源码安装 软件:apache-tomcat-7.0.29.tar.gz 下载地址: ...

  4. Delphi获取句柄

    Delphi获取句柄发布时间:2011-06-16转载文章请标明出处: http://code.01yun.com/asp0dm/asp0net0dm/20110616/55395.html查找另外一 ...

  5. Delphi全面控制Windows任务栏

    使用Windows95/NT/98操作系统的用户知道:Windows正常启动后,在电脑屏幕下方出现一块 任务栏.从系统功能角度而言,整个任务栏包括几个不同的子区域,从左至右依次是:开始 按钮.应用程序 ...

  6. java之短路与&&和短路或||

    短路的意思就是惰性计算,符号右边的就不进行计算了. ||和&&就是这样,

  7. 在WinDBG中查看函数的反汇编代码的命令

    命令 ========== u . u $ip 上面的两个命令是效果是一样的, 反汇编当前$ip地址上的8条命令. uf . uf $ip 上面两个命令的效果是一样的, 反汇编当前$ip地址上的整个函 ...

  8. Java-Class-C:org.springframework.http.MediaType

    ylbtech-Java-Class-C:org.springframework.http.MediaType 1.返回顶部 1.1. /* * Copyright 2002-2018 the ori ...

  9. kettle 中 java.lang.ClassCastException: [B cannot be cast to java.lang.String报错的解决方法

    问题描述:从数据库中查询出的某字段是json类型数据,然后在json输入步骤报错java.lang.ClassCastException: [B cannot be cast to java.lang ...

  10. rtsp+rtmp多路流媒体播放

    一.前言 之前博主有写过 一篇博文,讲的是使用videojs在谷歌浏览器网页上播放rtmp流媒体,具体可参考我之前的博客:https://www.cnblogs.com/FHC1994/p/99814 ...