PCA降维工作原理

PCA利用了协方差矩阵的特征值分解。过程分为四个步骤:
(1)创建数据集的协方差矩阵
协方差:用来度量两个随机变量关系的统计量
(2)保留协方差矩阵的特征值
(3)保留前K个特征值(特征值按照降序排列)
(4)用保留的特征向量转换为新的数据点
用鸢尾花数据集为例
鸢尾花数据集有150行4列,每行(观察值)代表一朵花
每列代表花的4种定量特点
1.先看一下要预测花的名称和用于预测的特征名称,为了更好了解数据,先查看一下其中两个特征。

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as nplda=LinearDiscriminantAnalysis(n_components=2)
iris=load_iris()
iris_X,iris_y=iris.data,iris.target
iris.target_names#查看要预测花的名称
iris.feature_names#查看特征名称
label_dict={i:k for i,k in enumerate(iris.target_names)} #enumerate 用于将一个可以遍历的数据对象
def plot(X,y,title,x_label,y_label):ax=plt.subplot(111)for label,marker, color in zip(range(3),('^','s','o'),('blue','red','green')):plt.scatter(x=X[:,0].real[y==label],y=X[:,1].real[y==label],color=color,alpha=0.5,label=label_dict[label])# plt.xlabel(x_label)#plt.ylabel(y_label)#leg=plt.legend(loc='upper right',fancybox=True)#  leg.get_frame().set_alpha(0.5)#plt.title('title')
#plot(iris_X,iris_y,"Original Iris Data","Sepal length(cm)","Sepal width(cm)")
#plt.show()
#计算均值向量
mean_vector=iris_X.mean(axis=0)
print(mean_vector)
#计算协方差矩阵  cov()求协方差矩阵
cov_mat=np.cov((iris_X).T)
print(cov_mat.shape)
#计算鸢尾花数据集的特征向量和特征值
eig_val_cov,eig_vec_cov=np.linalg.eig(cov_mat)#降序打印特征向量和相应的特征值
for i in range(len(eig_val_cov)):eigvec_cov=eig_vec_cov[:,i]print('Eigenvector {}:\n{}'.format(i+1,eigvec_cov))print('Eigenvalue {} from convariance matrix:{}'.format(i+1,eig_val_cov[i]))print(30*'*')#每个主成分解释的百分比是特征值除以特征值之和print('特征值之和为',eig_val_cov.sum())
explained_variance_ratio=eig_val_cov/eig_val_cov.sum()
print('各个主成分所占百分比',explained_variance_ratio)
#碎石图
plt.plot(np.cumsum(explained_variance_ratio))
plt.title('Scree Plot')
plt.xlabel('Principal Cpmponent(k)')
plt.ylabel('% of Variance Explained <=k')
plt.show()

花的名称和用于预测的名称如下:

查看其中两个特征:

使用Numpy计算协方差矩阵,计算协方差矩阵特征值,降序打印特征向量和相应特征值。这里有四个特征值,我们可以选择保留完整的4个特征,但是希望一般选择的逼原始特征数更少。这里借用工具库中的一个新工具——碎石图
碎石图是一种简单的折线图,显示每个主成分解释数据总方差的百分比。要绘制碎石图,需要对特征进行降序排列,绘制每个主成分和之前每个主成分方差之和。在鸢尾花数据集上,碎石图有四个点,每个点代表一种主成分,每个主成分解释了总方差的每个百分比,相加后,所有主成分解释了数据集中总方差的100%。
取每个特征向量(主成分)的特征值,将其除以所有特征值得和,计算每个特征向量解释方差得百分比。
对于鸢尾花数据集得碎石图如下所示,x轴上有四个主成分,y是累积方差,每个数据点代表到这个主成分为止可以解释得方差比。

上图可以看出,前两个主成分占了原始方差近98%,意味着几乎可以用前两个特征向量作为新的主成分。可以将数据集缩小一半,(从4列缩到2列),而且保持了特征得完整性,加速了性能。
后续将最后保留的特征向量转换为新的数据点,将四维的鸢尾花数据集转换成只有两列得新矩阵,而且新矩阵可以在机器学习流水线中代替原始数据集。

PCA降维工作原理及代码案例实现相关推荐

  1. PCA降维算法原理及代码实现(python和matlab)

    常见的数据降维算法有:奇异值分解(SVD).主成分分析(PCA).因子分析(FA).独立成分分析(ICA). PCA降维的基本思想:通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值.特征向量. ...

  2. 【主成分分析】PCA降维算法及Matlab代码实现

    前言   机器学习中经常会遇到高维变量的大数据集,并且大数据集的很多高维变量之间并不是独立的,它们之间往往存在相关关系.这些变量一方面为机器学习提供了大量的信息,另一方面由于信息冗余也增加了数据处理的 ...

  3. Java三大器之过滤器(Filter)的工作原理和代码演示

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, ...

  4. canal工作原理及简单案例演示

    如果有一个这样的需求,数据修改后,需要及时将mysql中修改的记录同步到elasticsearch中,我们怎么来实现呢? 思考30s-,带着这个疑问我们来看一下canal如何为我们解决的 文章目录 1 ...

  5. RC振荡器工作原理分析,案例+公式,几分钟,带你搞定RC振荡器

    在前面我已经给大家介绍了三种振荡器,Colpitts 振荡器.皮尔斯振荡器.哈特利振荡器.如果错过的话,可以点击下方标题直接跳转. colpitts振荡器电路图分析,几分钟,立马搞定colpitts振 ...

  6. spring web.xml中 过滤器(Filter)的工作原理和代码演示

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, ...

  7. PCA算法的原理以及代码实现

    目录 PCA算法是如何实现的? 1.对原始数据零均值化(中心化) 2.求协方差矩阵 3.对协方差矩阵求特征向量和特征值 评价模型的好坏,K值的确定 PCA算法的优缺点: 优点: 缺点: PCA算法的实 ...

  8. PCA(主成分分析)的工作原理

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

  9. 【常用传感器】LCD1602液晶工作原理详解及例程代码

    本文带你详细的了解下LCD1602液晶的工作原理以及代码编写 LCD1602液晶显示屏 LCD1602主要参数 LCD发光原理 LCD屏幕的组成: LCD和OLED区别: LCD1602引脚接线: L ...

最新文章

  1. 端午安康 | 经久熬煮,方能出“粽”
  2. 图灵奖得主Hopcroft对话智源理事长张宏江:人工智能战略、研究和教育
  3. 编程中经常碰到且觉得难的事是什么?
  4. LinksysWrt1900acs刷官方镜像并开启FTP
  5. 返聘前任员工:效率高出新人40%!
  6. git常见错误failed to push some refs to
  7. DHCP服务器-配置
  8. 数据科学 IPython 笔记本 9.10 数组排序
  9. 超分辨率技术如何发展?这6篇ECCV 18论文带你一次尽览
  10. Thinkphp 实现上一篇与下一篇的方法
  11. cad缩小了怎么还原_CAD的窗口突然不能缩小了怎么回事,应该怎么恢复
  12. 如何使用微小区一键生成可打印的物业缴费通知单
  13. H5如何获取内网IP和公网IP
  14. 小象学院python数据分析课程怎么样_小象学院的机器学习集训营课程怎么样?
  15. C++矩阵之岛屿的最大面积
  16. 用 Neo4j 快速构建明星关系图谱,你一定感兴趣
  17. 程序设计——第七周作业(Floyd:胜负未知场数;dijkstra:猫猫快线最快线路;SPFA:城市收税)
  18. 仿新浪微博的ListView下拉更新功能
  19. 最新哔哩哔哩视频弹幕播放器源码+带后台/亲测无错误
  20. 大二学科不挂科 速冲方法推荐(数据结构+计组+操作系统+算法+数据库+计网)

热门文章

  1. CSDN成就一亿技术人 | 惠惠软件码龄4年
  2. c语言程序运行内存图解,从执行速度和内存使用等方面来优化C语言代码
  3. shell输出每一行的最后几个字符
  4. ncnn/net.h: No such file or directory的解决方法
  5. C# SqlServer 数据库连接字符串
  6. Linux内核编译过程
  7. 博图只能通过地址相同设备找到plc_博图v13找不到设备
  8. 我国利用大数据反恐有待加强
  9. 七夕特辑|ShardingSphere 官方『真爱指南』大公开!
  10. FCRA考试答案100分