一个关于PCA的疑问
我们知道PCA干的事情是把n维的样本投影到k维,同时丢失的信息能够达到最少。
为什么说principal component是covariance matrix的特征值中最大的前k个对应的特征向量上的分量?
解释:
对于一组样本数据,如果它们的方差越大,说明它们蕴含的信息越多,可以参考熵的概念理解。那么PCA需要做的事情就是当投影到k维的时候,每个维度上的方差都能够越大越好。这要怎么实现呢?
需要注意的是,在样本进行投影的时候,需要对数据进行feature scaling,即,j表示第j个feature,这样可以使的样本的均值为0.
左边是样本投影到u上的方差,因为原样本的均值为0,所以投影后的均值也为0,求方差那一项的括号里面就没有减去均值那一部分,该项用λ表示。最右边的括号内的部分为原样本的协方差,大小为n*n,用∑表示。(x^(i)是第i个样本,是n*1的向量)
注意到u是单位向量,因此u乘以u的Transpose等于1.因此对上式进一步推导得到uλ=λu=uu.T * ∑u = ∑u。
根据特征值和特征向量的定义,一个向量u与矩阵∑相乘,∑u,存在一个值λ,有λu=∑u,则λ是∑的特征值,u是∑的特征向量。
又因为根据λ是上式左边的部分,代表着投影到u上的方差,而我们又希望方差越大越好,因此选择λ里面值前k大对应的特征向量代表principal component的方向,是正确的。
因此,只需要对协方差矩阵进行特征值分解,得到的前k大特征值对应的特征向量,就是最佳的k维新特征,而且k维新特征是正交的。
Python的代码:
import numpy as np
np.cov(X)#covariance, X:ndarray-like
from scipy import eig
eig(np.cov(X))#return eigenvalue and eigenvectors
一个关于PCA的疑问的更多相关文章
- 关于《Windows程序设计(第五版)》中一个实例程序的疑问
最近一直在看Charlse Petzold的<Windows程序设计>,作为一个新得不能再新的新手,只能先照着书的抄抄源码了,之前的例子一直都很正常,但昨天遇到一个很诡异的BUG. 先看实 ...
- 从一个LocalDateTime引发的疑问
一 公司有同事部署出错,然后查日志,找时间,从k8s得到的时间是 2017-06-16T09:38:48.580 +0000,然后他就纳闷了,因为他根本不会在9点部署好吧,而且9点大多数程序员都没开 ...
- c++复习——一个小疑问
C++中,子类为什么不能访问基类的private数据? emmm 来自一个vegetable dog的疑问: 首先基类可以通过调用自身public成员函数来访问private 而子类又可 ...
- Linux就这个范儿 第12章 一个网络一个世界
Linux就这个范儿 第12章 一个网络一个世界 与Linux有缘相识还得从一项开发任务说起.十八年前,我在Nucleus OS上开发无线网桥AP,需要加入STP生成树协议(SpanningTree ...
- STL中map的一个知识点
问题背景 在做USACO Section 1.1 Greedy Gift Givers的时候,我最初的想法是直接用一个map来进行数据处理.但是后来产生一个让我感到疑问的地方,后来我经过测试,发现了这 ...
- A tutorial on Principal Components Analysis | 主成分分析(PCA)教程
A tutorial on Principal Components Analysis 原著:Lindsay I Smith, A tutorial on Principal Components A ...
- Java类的加载的一个小问题
前言 之前写了一篇文章专门介绍了一下类的加载和对象的创建流程,然后收到了一个博友的疑问,觉得蛮好的,在这里和大家分享下. 博文地址:[Java基础]Java类的加载和对象创建流程的分析 疑问 类在加载 ...
- OpenCV学习(35) OpenCV中的PCA算法
PCA算法的基本原理可以参考:http://www.cnblogs.com/mikewolf2002/p/3429711.html 对一副宽p.高q的二维灰度图,要完整表示该图像,需要m = ...
- 在Linux系统下搭建和配置一个minio文件服务器(二)
上一篇主要讲述了在linux系统中搭建一个minio文件服务器,那么这一篇则用来整合java代码中使用,我之前自己已经搭建好了一个springboot项目,那么这一篇将详细讲述如何把minio整合进s ...
随机推荐
- 关于Google play无法下载应用
查看网络连接是否正常 查看账号信息 以上两种都没有问题,那可能是缓存的问题,去应用里面清楚缓存以后,重启手机. 如果还是不行,就在应用程序中 清除全部数据,重启手机,这样就可以了. ps:不管你行不行 ...
- HttpServlet实现serializable
Java Servlet Technology Overview Servlets are the Java platform technology of choice for extending a ...
- 上传网站后建议执行:chown www:www -R /path/to/dir 对网站目录进行权限设置,/path/to/dir替换为你网站目录。
上传网站后建议执行:chown www:www -R /path/to/dir 对网站目录进行权限设置,/path/to/dir替换为你网站目录.
- 代码题 — 剑指offer题目、总结
剑指offer题目总结: https://www.cnblogs.com/dingxiaoqiang/category/1117681.html 版权归作者所有,任何形式转载请联系作者.作者:马孔多 ...
- MYSQL题讲答案
2丶查询‘生物’课程比‘物理’课程成绩高的所有学生的学号 思路: 获取所有有生物课成的人(学号,成绩) -- 临时表 获取所有有物理课程的人(学号,成绩) -- 临时表 根据[学号]连接两个临时表: ...
- 【Demo】CSS3 过渡
CSS3 过渡transition 应用于宽度属性的过渡效果,时长为 2 秒: div { transition: width 2s; -webkit-transition: width 2s; /* ...
- hdu4009最小树形图
多建一个根,连到每一个点,然后花费是建水井的钱 然后跑一边最小树形图即可,这题必定有解,因为可以从根开始到每一点,可以不用判无解的情况 #include<map> #include< ...
- 利用ftrace跟踪内核static tracepoint
摘要:和很多linux内核子系统一样,static tracepoint有很多层次,其中某个层次都展示给不同层次的开发者来满足他们的不同需求.关于linux tracepoint的详细信息,我们可以在 ...
- 安装Linux环境
虚拟机:虚拟机(Virtual Machine),在计算机科学中的体系结构里,是指一种特殊的软件,他可以在计算机平台和终端用户之间建立一种环境,而终端用户则是基于这个软件所建立的环境来操作软件.在计算 ...
- JavaScript中Function Declaration与Function Expression 或者说 function fn(){}和var fn=function(){} 的区别
JavaScript是一种解释型语言,函数声明会在JavaScript代码加载后.执行前被解释,而函数表达式只有在执行到这一行代码时才会被解释. 在JS中有两种定义函数的方式, 1是:var aaa= ...