主成分分析(PCA)原理详解 
Matlab-PCA 
Sort eigenvalues and associated eigenvectors after using numpy.linalg.eig in python 
What does n[::-1] means in Python? 
PCA in numpy and sklearn produces different results 
How to draw a line with matplotlib? 
Matplotlib.axes.Axes.plot


# -*- coding: utf-8 -*-
"""
Created on Tue Jan 23 15:56:06 2018@author: brucelau
"""import numpy as np
import matplotlib.pyplot as pltfig, ax = plt.subplots()def data_vis(d,s=0.5):ax.scatter(d[:,0],d[:,1],s=s)ax.grid()def drawArrow1(B,m,c="pc1",):# fc: filling color# ec: edge colorif c=='pc1':fc='r'ec='r's=0.1else:fc='g'ec='g's=0.1ax.arrow(m[0][0],m[1][0], B[0], B[1],length_includes_head=True,# 增加的长度包含箭头部分head_width=s, head_length=s, fc=fc, ec=ec,label='abc')# 注意: 默认显示范围[0,1][0,1],需要单独设置图形范围,以便显示箭头ax.set_xticks(np.linspace(0,4,9))ax.set_yticks(np.linspace(0,4,9))ax.set_xlim(0,4)ax.set_ylim(0,4)ax.set_aspect('equal') #x轴y轴等比例# make data
data = np.array([[2.5,2.4],[0.5,0.7],[2.2,2.9],[1.9,2.2],[3.1,3.0],[2.3,2.7],[2.0,1.6],[1.0,1.1],[1.5,1.6],[1.1,0.9]]).T
m = np.mean(data,axis=1,keepdims=1)
data_adjust = data-m
data_adjust2 = data_adjust.T
# visualize data
data_vis(data.T,s=10)# calcalate conv
c = np.cov(data_adjust)
print('协方差矩阵:\n',c)# calculate eigenvalues and eigenvectors
D,V = np.linalg.eig(c)
idx = D.argsort()[::-1]
D = D[idx]
V = V[:,idx]
print('特征值\n',D)
print('特征向量\n',V)#%% get the pc1 and pc2
v1 = -V[:,0] # 确保特征向量方向和后文计算投影方向一致,故加负号
v2 = V[:,1]
print('主成分pcv-1 ',v1)
#%%
# visual eigenvector
drawArrow1(v2,m,c='pc2')
drawArrow1(v1,m,c='pc1')#%%
# calculate the final result
final = np.dot(data_adjust.T, v1)#%% calculate the final coordinate
theta = np.arctan(v1[1]/v1[0])
print('主成分pcv-1与x轴的夹角θ %f degree'%(theta/np.pi*180))
final_x = (final)*np.cos(theta)+m[0]
final_y = (final)*np.sin(theta)+m[1]
final_xy = np.vstack((final_x,final_y))
data_vis(final_xy.T,s=10)
ax.grid()
#%% y = k*(x-m[0])+m[1]
k = np.tan(theta)
m = m.reshape(2)
x1, y1 = [0, 4], [-k*m[0]+m[1],k*(4-m[0])+m[1]]
plt.plot(x1, y1, 'y--',linewidth=0.5)
plt.show()
plt.savefig('arrow.png', transparent = True, bbox_inches = 'tight', pad_inches = 0.25) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87

MatlabCode

mu = [2,3];
sigma = [1,1.5;1.5,3];
rng default  % For reproducibility
r = mvnrnd(mu,sigma,1000);
figure
plot(r(:,1),r(:,2),'+')C = cov(r)
c = (r-mean(r))'*(r-mean(r))/999
[coeff,score,pcvar,mu,v,S] = ppca(r,2);
[coeff1,score1,latent1,tsquared1,explained1,mu1] = pca(r)hold on;
xx = linspace(-2,6,100);
yy = 0.8809/0.4733*(xx-mu(1))+mu(2);
plot(xx,yy)

PCA主成分分析的原理解释及python代码实现相关推荐

  1. 180123 PCA主成分分析的原理解释及python代码实现

    主成分分析(PCA)原理详解 Matlab-PCA Sort eigenvalues and associated eigenvectors after using numpy.linalg.eig ...

  2. 基于PCA主成分分析的BP神经网络回归预测MATLAB代码

    基于PCA主成分分析的BP神经网络回归预测MATLAB代码 代码注释清楚. 先对数据集进行主成分分析,自主根据贡献率选择主成分:同时计算KMO验证值:用PCA以后数据进行BP神经网络回归预测. 可以读 ...

  3. 【算法思想】Reed-Solomon 纠错编码基础概念,编码、解码算法原理、数学公式 Python代码实现

    [算法思想]Reed-Solomon 纠错编码基础概念,编码.解码算法原理.数学公式 & Python代码实现 文章目录 [算法思想]Reed-Solomon 纠错编码基础概念,编码.解码算法 ...

  4. 主成分分析法(PCA)的理解(附python代码案例)

    目录 一.PCA简介 二.举个例子 三.计算过程(公式) 3.0 题干假设 3.1 标准化 3.2 计算协方差矩阵 3.3 计算特征值和特征值向量 3.3 多重共线性检验(可跳过) 3.4 适合性检验 ...

  5. PCA主成分分析实战和可视化 | 附R代码和测试数据

    一文看懂PCA主成分分析中介绍了PCA分析的原理和分析的意义(基本简介如下,更多见博客),今天就用数据来实际操练一下.(注意:用了这么多年的PCA可视化竟然是错的!!!) 在公众号后台回复**&quo ...

  6. Tensorflow反卷积(DeConv)实现原理+手写python代码实现反卷积(DeConv)

    最近看到一个巨牛的人工智能教程,分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.平时碎片时间可以当小说看,[点这里可以去膜拜一下大神的" ...

  7. 决策树原理实例(python代码实现)_决策树原理实例(python代码实现)

    决策数(Decision Tree)在机器学习中也是比较常见的一种算法,属于监督学习中的一种.看字面意思应该也比较容易理解,相比其他算法比如支持向量机(SVM)或神经网络,似乎决策树感觉"亲 ...

  8. tfidf算法 python_tf–idf算法解释及其python代码实现(下)

    tf–idf算法python代码实现 这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四 ...

  9. 机器学习入门 --- LDA与PCA算法(公式推导、纯python代码实现、scikit-learn api调用对比结果)

    为什么要做降维: 提高计算效率 留存有用的特征,为后续建模使用 在项目中实际拿到的数据,可能会有几百个维度(特征)的数据集,这样的数据集在建模使用时,非常消耗计算资源,所以需要通过使用降维方法来优化数 ...

最新文章

  1. 分布式系统事务一致性解决方案
  2. 可能大家都能跑通的ignite的HelloWorld
  3. MySQL基本操作(表,字段)
  4. epub java虚拟机精讲_高级 Java 必须掌握:JVM 分析工具和查看命令,超详细!
  5. Delphi 7.0常用函数速查手册
  6. 【Java】最基本的命令行登录程序Demo
  7. Linux下profile environment bashrc的区别
  8. 哈工大与北大提出注意力引导的图像去噪
  9. windows光标_掌握这十个小技巧,帮你从Windows轻松过渡到MacOS
  10. sap 中migo收货自动打印smartform_EWM MES/ERP集成 生产收货的几种方式
  11. Android:权限处理
  12. windows10 快捷代码
  13. 3个传教士与3个野人,哥带你们过河去
  14. 里奥·梅西(Lionel Messi)-----球场上舞动的红蓝精灵
  15. python中将奇数和偶数分列
  16. node.js、React和VUE的纯理论
  17. RGB颜色值转换为十进制
  18. 量子计算机、康威扭结、奥数AI,这是2020年计算机、数学的重大突破
  19. G-Q检验异方差存在及在Eviews的实现
  20. China-Final2016K Justice Rains From Above

热门文章

  1. 杰理之生成烧写文件,烧写器无法识别处理方法【篇】
  2. 什么是分布式_什么是分布式存储?分布式存储有什么优势?
  3. 日常记录(关于sessionStorage.setItem)
  4. 名鞋库五周年推最强大促全网庆生
  5. Java编程开发好学吗 怎样才能学好Java编程
  6. 【leetcode 66题 之 13 机器人的运动范围】
  7. zynq中mgtx应用_fpga,zynq
  8. echo音箱配对及操作方法
  9. Aliplayer中自定义添加字幕的实现
  10. 微信对话生成源码前端-html+css+javascript