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. 【Nginx】如何按日期分割Nginx日志?看这一篇就够了!!

    写在前面 Nginx是没有以日期格式作为文件名来存储的,也就是说,Nginx不像Tomcat,每天自动生成一个日志文件,所有的日志都是以一个名字来存储,时间久了日志文件会变得很大.这样非常不利于分析. ...

  2. day7 python字符串的操作及方法

    1.字符串 1.1 字符串的操作 # 1.字符串的拼接 strvar = "我爱" + "中国" # 2.字符串的重复 strvar = "今天下午2 ...

  3. ant-design-vue中实现modal模态框的复用(添加,编辑展示同一个模态框)

    用两个button(添加,编辑)按钮展示同一个模态框,并不是什么大问题,问题在于解决这两个模态框得有自己的确定和取消方法 父页面完全接管子页面(利于子页面复用) 父页面代码: <template ...

  4. Python Ethical Hacking - MAC Address & How to Change(3)

    SIMPLE ALGORITHM Goal  -> Check if MAC address was changed. Steps: 1. Execute and read ifconfig. ...

  5. Python Ethical Hacking - BACKDOORS(7)

    Handling Errors: If the client or server crashes, the connection will be lost. Backdoor crashes if: ...

  6. Python Ethical Hacking - BACKDOORS(6)

    File Upload: A file is a series of characters. Uploading a file is the opposite of downloading a fil ...

  7. Flarum 的安装与配置

    Flarum 是一款非常棒的开源论坛程序,本鸽子的论坛 就是用 Flarum 搭建的.之前有人问过我 Flarum 如何搭建,所以下面讲一下 Flarum 的搭建过程. 前提 域名需要提前解析. 有一 ...

  8. java-把生成的随机数,指定范围(如:100-200),指定打印次数(如:50次),并进行去重。

    package main.demo; public class Demo4 { /** * 随机指定范围内N个不重复的数 * 最简单最基本的方法 * @param min 指定范围最小值 * @par ...

  9. Python基础知识点:多进程的应用讲解

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:东哥IT笔记 现在很多CPU都支持多核,甚至是手机都已经开始支持多核 ...

  10. 阿里云OSS服务器的使用

    关于文件上传,我们一般使用OSS服务器.大致为两种上传方式: 详情官网参考:https://help.aliyun.com/document_detail/31927.html?spm=a2c4g.1 ...