转自:https://yoyoyohamapi.gitbooks.io/mit-ml/content/%E7%89%B9%E5%BE%81%E9%99%8D%E7%BB%B4/articles/PCA.html

https://www.jianshu.com/p/162bb4ea1b7f

1.有什么功能?

进行数据降维,从n个特征里选出k个最具有代表性的,使数据损失降到最小,尽可能保有原来的数据特征。

假设需要从n维降到k维,那么需要找出k个n维向量,将原有的数据投影到k个n维向量构成的k维空间,并保证投影误差足够小。

比如下图,就找到了2个3维向量,构成了一个二维平面,可将3维特征进行投影。

2.算法的步骤

1.先进行标准化,使数据的差值不那么大:

//标准差你应该记得怎么算的吧,就是根号下的方差。

2.计算协方差矩阵Σ:

3.通过奇异值分解(SVD),求取 ΣΣ 的特征向量(eigenvectors):

4.从 U中取出前 k个左奇异向量,构成一个约减矩阵 UreduceUreduce:

5.计算新的特征向量:z(i):

 

//↑以上过程我都不明白,跟我看的另外一个教程不一样啊。

3.算法的步骤

转自:https://blog.csdn.net/huangfei711/article/details/78663474

PCA 操作流程

  1. 去平均值,即每一位特征减去各自的平均值(当然,为避免量纲以及数据数量级差异带来的影响,先标准化是必要的)
  2. 计算协方差矩阵
  3. 计算协方差矩阵的特征值与特征向量
  4. 对特征值从大到小排序
  5. 保留最大的个特征向量
  6. 将数据转换到个特征向量构建的新空间中

假设二维数据为 data:

取均值:

  • 去均值矩阵:

  • 计算其协方差矩阵:

  • 计算协方差矩阵的特征值和特征向量:

特征值为:

特征向量为:

  • 对特征值进行排序(只有两个特征)
  • 选择最大的特征值对应的特征向量:

转换到新的空间

这就完成了PCA的降维操作。

更深入的理解:2019-3-18更——

http://blog.codinglabs.org/articles/pca-tutorial.html

4.对以上的说明

2018-12-21更——

1.如何计算协方差矩阵?

有推导过程:

那么其实用第一个和最后一个得到的结果是一样的,实验如下:

> i<-c(,,,)
> j<-c(,,,)
> mean(i*j)-mean(i)*mean(j)
[] 94.875
> mean((i-mean(i))*(j-mean(j)))
[] 94.875

转自:https://wenku.baidu.com/view/e41e9f4cbed5b9f3f90f1c55.html

2.如何计算特征值?

2020-2-25更新——————————

https://www.jianshu.com/p/162bb4ea1b7f 这个讲的不错

#为什么我还要更新呢,因为我发现我对PCA的原理还并不了解,不怎么清楚,每次提到PCA我还是很模糊的。(我的理解就是在坐标系中,主成分代表的线和其他的都很近且平行之类的。)

它的原理就是将很多互相之间有相关的特征降维,使新的特征之间尽可能地不相关,用更少的特征来表示原来的信息。

比如每一个主成分如下:

是观测变量的线性组合。

选出的主成分就是和其他特征高度相关的新特征,这样才具有代表性。

https://towardsdatascience.com/pca-using-python-scikit-learn-e653f8989e60

这个是一个PCApython教程,我今天应该没有时间看,但是会学习的。

https://www.cnblogs.com/pinard/p/6239403.html 这个要看,因为有提到了一句,PCA是基于投影方差最大,我不理解。操,白看。但我目前还在看CCA,所以这个方面先不花太多时间了。

最新文章

  1. [LeetCode] Arranging Coins 排列硬币
  2. &#39;-[__NSCFString stringFromMD5]: unrecognized selector sent to instance 0x14d89a50&#39;
  3. 《UNIX网络编程(第3版)》unp.h等源码文件的编译安装
  4. 《CODE》读后笔记——第1~13章
  5. ibatis批量操作补充
  6. redhat vim编辑器永久添加行号
  7. Inno_setup制作升级包必须面临的几个问题
  8. gulp 实践
  9. Windows 下OpenSSL 安装
  10. DNA Sorting(排序)
  11. HttpWebRequest使用注意(发生阻塞的解决办法)
  12. RPD添加网址、变量
  13. 通过pyenv和virtualenv创建多版本Python虚拟环境
  14. RDD认知
  15. spring boot mybatis 整合教程
  16. Int32 最大的数值是多少???(附十进制十六进制相互转换且包含正负数的java代码)
  17. App开发准备
  18. 伪元素 :Before 和 :After的学习
  19. test20181019 B君的第一题
  20. android整理的一些基础知识

热门文章

  1. jQuery分页小插件
  2. php json包 Services_JSON-1.0.2 1 ---one
  3. MyBatis-Spring-Boot 使用总结
  4. 子级用css float浮动 而父级div没高度不能自适应高度
  5. amqp server closed the connection. check login credentials socket closed
  6. hdu 3905(dp)
  7. JNI 各类数据类型处理
  8. JavaScript设计模式——观察者模式
  9. Max_connect_errors – MySQL性能参数详解
  10. Vue.js_getter and setter