PCA降维--两种实现 : SVD或EVD. 强力总结. 在鸢尾花数据集(iris)实做

今天自己实现PCA,从网上看文章的时候,发现有的文章没有搞清楚把SVD(奇异值分解)实现和EVD(特征值分解)实现,查阅多个文章很容易更糊涂,所以搞懂之后写下这个总结. 先说最关键的点:

a. PCA两个主要的实现方式: SVD(奇异值分解), EVD(特征值分解).

b. 特征值分解方式需要计算协方差矩阵,分解的是协方差矩阵.

SVD方式不需要计算协方差矩阵,分解的是经过中心化的原数据矩阵

1.特征值分解实现PCA (也有人称为PCA原始算法)

然后把中心化过的矩阵 XW, 就得到了低维数据.

2.SCD分解实现PCA

(1)样本中心化得到矩阵X
(2)对X进行SVD分解 u s v = svd(X)
(3)取v的前dd个分量
(4)X*v[0:dd]就是低维空间的数据.
(这是对应X每一行为一个样本的情况.u用于行数的压缩,v用于列数的压缩)

3.Show Me the Code

import numpy as np
from numpy.linalg import svd
from numpy.linalg import eig
from sklearn import datasets # 从sklearn中调出数据集
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt iris = datasets.load_iris()
data_src = iris.data #(150,4)
labels = iris.target #(150,) d = 2 #设置低维空间维数 data_cen = data_src - np.mean(data_src,axis=0) # 样本中心化处理 # 用 SVD(奇异值分解) 做PCA
def pca_svd():
u, s, v = svd(data_cen)
pc_svd = np.dot(data_cen, v[:,0:2])
plt.scatter(pc_svd[:,0], pc_svd[:,1], c = labels)
plt.show()
return pc_svd # 用 EVD(特征值分解) 做PCA
def pca_eig():
cov_mat = np.cov(data_cen,rowvar=0) #计算协方差矩阵,每行为一个样本
eigVals, eigVects = eig(cov_mat)
print(eigVects.shape)
eigValInd = np.argsort(eigVals)
eigValInd = eigValInd[: -(d + 1) : -1]
redEigVects = eigVects[:, eigValInd]
pc_eig = np.dot(data_cen, redEigVects)
plt.scatter(pc_eig[:,0], pc_eig[:,1], c = labels)
plt.show() # 调用sk-learn库做PCA(内部也是用的SVD))
def pac_sk():
pca = PCA(n_components=2) #降到2维
pca.fit(data_cen) #训练
pc_sk=pca.fit_transform(data_cen) #降维后的数据
plt.scatter(pc_sk[:,0], pc_sk[:,1], c = labels)
plt.show() pca_svd()
pca_eig()
pac_sk()

效果图:

4.详细理论知识传送门

以下是我学习过程中看的几篇高质量文章

PCA SVD基础理论讲解

SVD ( 捎带在PCA中的应用也讲了一点 )

推导SVD和EVD做PCA的等价性

[机器学习 ]PCA降维--两种实现 : SVD或EVD. 强力总结. 在鸢尾花数据集(iris)实做的更多相关文章

  1. 机器学习(十六)— LDA和PCA降维

    一.LDA算法 基本思想:LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的.这点和PCA不同.PCA是不考虑样本类别输出的无监督降维技术. 我们要将数据在低维度上进行投影,投 ...

  2. 移动Web开发图片自适应两种常见情况解决方案

    本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集, ...

  3. NB-iot 和 emtc两种技术区别

    此前有报道称,工信部正在拟定推动窄频物联网(NB-IoT)标准化,并对NB-IoT模块外形.封装以及针脚定义等提出新规范.业内人士认为,标准出台后将促进物联网规模化商用全面提速,迎来行业成长爆发期. ...

  4. 移动站Web开发图片自适应两种常见情况解决方案

    本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集, ...

  5. Python机器学习笔记 使用scikit-learn工具进行PCA降维

    之前总结过关于PCA的知识:深入学习主成分分析(PCA)算法原理.这里打算再写一篇笔记,总结一下如何使用scikit-learn工具来进行PCA降维. 在数据处理中,经常会遇到特征维度比样本数量多得多 ...

  6. [机器学习]-PCA数据降维:从代码到原理的深入解析

    &*&:2017/6/16update,最近几天发现阅读这篇文章的朋友比较多,自己阅读发现,部分内容出现了问题,进行了更新. 一.什么是PCA:摘用一下百度百科的解释 PCA(Prin ...

  7. pcA降维 SVD

    前言: PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的.在上篇文章中便是基于特征值分解的一种解释.特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中.而且线 ...

  8. 机器学习笔记簿 降维篇 PCA 01

    降维是机器学习中十分重要的部分,降维就是通过一个特定的映射(可以是线性的或非线性的)将高维数据转换为低维数据,从而达到一些特定的效果,所以降维算法最重要的就是找到这一个映射.主成分分析(Princip ...

  9. 机器学习算法-PCA降维技术

    机器学习算法-PCA降维 一.引言 在实际的数据分析问题中我们遇到的问题通常有较高维数的特征,在进行实际的数据分析的时候,我们并不会将所有的特征都用于算法的训练,而是挑选出我们认为可能对目标有影响的特 ...

随机推荐

  1. 重学c#系列——c# 托管和非托管资源(三)

    前言 c# 托管和非托管比较重要,因为这涉及到资源的释放. 现在只要在计算机上运行的,无论玩出什么花来,整个什么概念,逃不过输入数据修改数据输出数据(计算机本质),这里面有个数据的输入,那么我们的内存 ...

  2. (五)学习了解OrchardCore笔记——灵魂中间件ModularTenantContainerMiddleware的第一行②模块的功能部分

    在(三)的时候已经说到模块集合用ForEachAsync的扩展方法分配多个任务,把每个modules的ManifestInfo分析出来的功能加入ConcurrentDictionary.我们先看看这个 ...

  3. 重磅分享:美团点评架构师私藏的内部Linux运维笔记

    最近不少小伙伴后台联系,希望能弄一些大厂的学习资料,我这边费了很大劲,联系到老朋友,原美团点评架构师张sir,问他要了些美团点评架构的内部资料. 这份资料含金量非常高,包含整个美团点评架构架构图,Li ...

  4. 在 Docker 搭建 Maven 私有库

    在 Docker 搭建 Maven 私有库 小引 If you are developing software without a repository manager you are likely ...

  5. 从css属性和布局来说明一下,行类元素和行类块元素和块元素的区别

    //布局 inline: 如果水平宽度足够大,那么将在一行显示 inline-block: 如果水平宽度足够大,那么将在一行显示 block: 独占一行 //css属性 inline: 无法设置高度, ...

  6. centos7+jexus5.8.3部署ASP.NET的MVC项目

    1.在centos7终端以root权限安装jexus5.8.3的独立版 命令:curl https://jexus.org/release/x64/install.sh|sh 2.跳转到目录/usr/ ...

  7. 关联吸纳的remote首次push报错rejected

    F:\abb-iot\DmsAPI\DmsAPI (master -> origin) λ git push --set-upstream github master To github.com ...

  8. ~~网络编程(八):UDP~~

    进击のpython ***** 网络编程--UDP 那现在看到这里的 这就是网络编程的最后一讲了 上面讲的都是关于TCP的编程方法 还记得TCP和UDP传输的区别吗? UDP简单就简单到它可以不借助管 ...

  9. python关于字符编码的基本操作

    字符编码 (注意:关于字符编码,如果没有特殊业务要求,请牢记仅使用UTF-8编码) 由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节.如果要在网络上传输,或者 ...

  10. 02_HTML03

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"软件测试"获取视频和教程资料! b站在线视频 HTML ...