PCA降维 python实现
2016-11-11 23:45
253 查看
主成分分析,Principal Component Analysis
计算协方差矩阵,由于是hermitian的,所以100%可正交对角化而且特征值一定非负
求出特征值特征向量以后,取特征值比较大的那几个方向构成线性空间,把数据投影上去就OK了
补详细公式推导:
http://blog.csdn.net/u013648367/article/details/73824049
计算协方差矩阵,由于是hermitian的,所以100%可正交对角化而且特征值一定非负
求出特征值特征向量以后,取特征值比较大的那几个方向构成线性空间,把数据投影上去就OK了
补详细公式推导:
http://blog.csdn.net/u013648367/article/details/73824049
import os import numpy as np import matplotlib.pylab as plt def dataLoader(file): return np.array([ i.split() for i in open(file)],dtype="float") def pca(dataSet,rank=0): means = np.mean(dataSet,axis=0) dataSet = dataSet - means #去中心化 ,使得E(X),E(Y),... =0, 方便求方差 #plt.scatter(*dataSet.T) lenth = dataSet.shape[0] if rank == 0: rank = dataSet.shape[1]+1 dataSet = np.matrix(dataSet) covMat = dataSet.T*dataSet/(lenth-1) eigenVals, eigenVec = np.linalg.eigh(covMat) pick_id = eigenVals.argsort()[::-1][:rank] #从小到大排序,返回数组序号,然后倒着取,取前r个 eigenVec_picked = eigenVec[:,pick_id]#取出排序后的特征向量 #print(eigenVec_picked) #print(eigenVals, eigenVec) Y= dataSet*eigenVec_picked; #相当于求了个新坐标系下的数据分布 return Y, eigenVec_picked, means datas = dataLoader('testSet.txt') Y,P,means = pca(datas,1) plt.scatter(*datas.T) #原数据 plt.scatter(*( Y*P.T+np.tile(means,(len(Y),1)) ).T,color='r')#降维以后的数据变换到原来的坐标下...
相关文章推荐
- PCA降维的python实现
- (Python实现)数据PCA降维白化和L2归一化-深度学习实践常用数据预处理
- 【机器学习算法-python实现】PCA 主成分分析、降维
- Python 之 sklearn 实现 PCA 降维
- 【机器学习算法-python实现】PCA 主成分分析、降维
- python实现Kmeans文本聚类,通过PCA降维和Matplotlib显示聚类3d三维图像
- python实现PCA(主成分分析)降维
- Python 之 sklearn 实现 PCA 降维
- python 实现数据降维推荐系统(附Python源码)
- 菜鸟入门_Python_机器学习(4)_PCA和MDA降维和聚类
- 利用python的KMeans和PCA包实现聚类算法
- PCA算法和python实现
- 机器学习(七):主成分分析PCA降维_Python
- 三种方法实现PCA算法(Python)
- PCA的Python实现
- [置顶] PCA降维及其实现
- 数据预处理系列:(十一)用核PCA实现非线性降维
- Python处理脑电数据:PCA数据降维
- 比PCA降维更高级——(R/Python)t-SNE聚类算法实践指南
- PCA降维 C++实现