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

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

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

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

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

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

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

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. 如何用HMS Nearby Service给自己的App添加近距离数据传输功能

      当你给朋友发送手机资料时,过了很久进度条却动也不动:当你想发送大文件给同事时,仅一个文件就用光了你所有流量:当你跟朋友乘坐飞机时想一起玩游戏时,却因没有网络无奈放弃.   们生活中似乎经常能遇到这 ...

  2. 基于python的自动化测试框架搭建

    滴~ 今日打卡!   好多天没来打卡了.博主最近一直在把碎片化知识转化为知识体系的过程中挣扎.Python语言.selenium.unittest框架.HTMLTestRunner框架都有所了解,也写 ...

  3. OSCP Learning Notes - Information Gathering

    Common Tools Google Exploit-DB/Google Hacking DB WHOIS Netcraft theharvester Example: Google search: ...

  4. T133316 57级返校测试重测-T4-字符串的修改

    大致题意: 有一个A字符串和一个B字符串, 操作将A或A的一个后缀修改为B, 求最少的操作数. 有三个操作为: 删除: 删除掉 A 中的某一个字符. 添加: 将某一个字符添加到 A 中任意位置. 替换 ...

  5. 带你上手阿里开源的 Java 诊断利器:Arthas

    本文适合有 Java 基础知识的人群. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列,今天给大家带来一款阿里开源的 Java 诊断利器 Art ...

  6. accpet和connect设置超时

    三次握手 TCP连接建立的开始是三次握手,通过三次交互确认连接成功,在客户端调用connect时,客户端发送sync消息给服务端,服务端收到sync消息后,返回一个ack+sync,并等待ack,客户 ...

  7. create-react-app中的babel配置探索

    版本 babel-loader version:"8.1.0" create-react-app:"3.4.1" 三个配置 第一部分: { test: /\.( ...

  8. vue组件库用markdown生成文档

    前言: 开发vue组件库需要提供组件的使用文档,最好是有渲染到浏览器的demo实例,既能操作又能查看源代码.markdown作为常用的文档编写载体,如果能在里面直接写vue组件,同时编写使用说明就再好 ...

  9. element ui表格实现单选 但是单选取消会报错

    1.在el-table中添加两个事件  @selection-change="handleSelectionChange"  @current-change="choos ...

  10. ubuntu 12.04无盘工作站

    注释:该篇博文是借鉴下列文章加上自己实践总结得来: a. http://forum.ubuntu.org.cn/viewtopic.php?f=77&t=117754 b. http://bl ...