热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

PCA读书笔记

PCA是一种对高维度数据进行降维的一种方法,为了能够了解PCA的具体过程,一些数学知识,比如:期望,标准差&#

PCA是一种对高维度数据进行降维的一种方法,为了能够了解PCA的具体过程,一些数学知识,比如:期望,标准差,方差,协方差,特征值,特征向量等都是必须了解的。不过不要怕,我这里先一个一个来介绍下这些概念。

PCA是一种常用的统计方法,什么是统计分析的过程?就是用样本数据的特征去代表整体数据特征,而统计就是来分析这个样本数据的特征(为什么要这样来做?而不是把全部数据拿来分析呢?因为全部数据量太大)

1:概念介绍

Ø  期望

在我们的一组离散数据中,期望就是平均值。

,n代表样本点的个数,xn 代表样本中的第n个样本点

比如以下两组数据分别是某灯泡厂随即挑选出来的3个灯泡的寿命

A厂的如下:0,10,20。B厂的如下:9,10,11

那么我们衡量A和B就用期望来做即可。得到A的期望是10,B的期望也是10。

Ø  标准差

在期望中我们用期望对两组数据进行了分析,发现他们的平均寿命都是一样的,但是但看这些数据来看,只需要期望还是不够的,因为上面两组数据虽然期望值一样,但是数据特征还是有异同的,比如在上面两组数据中我们更希望需要的是第二组数据,因为第二组数据更“稳定”,也就是这些数据距离期望值差别都不大。为了描绘这个特征我们用标准差来衡量,标准差的定义是:样本点和期望距离和。我们用下面的等价公式来计算这个值:

(至于为什么分母是n-1,请阅读我的另外一篇日志:http://blog.csdn.net/silence1214/article/details/8012684)

Ø  方差

方差就是标准差的平方

Ø  协方差

在我们上面的分析中我们知道,期望,标准差,方差都是来衡量一维数据的特征的,二维的数据特征我们如何衡量呢?这里就要出现协方差了,协方差定义如下:

,协方差的值和X,Y的关系表达如下:

如果cov(X,Y)大于0,说明当X增大的时候Y也增加,反之一样

如果cov(X,Y)小于0,说明当X增大的时候Y是减小的,反之一样

如果cov(X,Y)等于0,则说明X和Y无关

Ø  特征值和特征向量

这个概念由于我们大学学习的课本的问题,其实很多人都知道怎么算的,甚至有的同学计算的时候可以寻找很多方法快速来计算,但是死活不知道实际的意义。这里根据我的个人理解以及别人的沟通用一句话来描述下特征值和特征向量的现实意义。根据寻求特征值和特征向量的公式:PX=λX,知道就是求可以在矩阵p下做变换后的向量x,和一个变量乘以它的值相等,这说明什么?一句话:就是寻找可以再P下进行变换的向量,变换后该向量的长度发生变化,方向不变。其实特征值和特征向量就是这个意思。

2:利用PCA进行数据降维步骤

Ø  我们这个地方用一个关于图像压缩的例子来阐述下PCA降维的过程。

给一副图片,宽窄都是n,则按照图片从第一行像素值,第二行像素值…直到第n行像素值连接成一行,保存称为行向量如下:

P=(x1,x2,…..xn2),它的维度是n2

我们给予20副这样的图片,则20副图片经过处理行程一个20*n2的矩阵。

Ø  求协方差矩阵

协方差上面我们已经说过了,那么什么是协方差矩阵?给予一个矩阵A

我们定义,矩阵B如下

则A的协方差矩阵就等于B*BT

文字表示上述过程就是,先对A的每行元素求平均值,然后每个元素减去改行的平均值行程中间矩阵,然后中间矩阵与它转置的乘积就是协方差矩阵,我们记做M

Ø  求协方差矩阵M的特征值和特征向量

因为20副图片的协方差矩阵M是20*20的,所以它的特征值有20个,对应20个特征向量,把这20个特征值从大到小排序,选择前n个特征值(n小于20)对应的特征向量组合成矩阵P=(p1,p2,…pn)。每一个pi是20维的列向量。这个时候我们把20个特征向量就叫做原始数据的主成分。每个向量是20维的。

Ø  得到经过PCA之后的原始数据

我们把经过PCA之后的原始数据叫做FinalData。则(FinalData)T=PT*MT.也就是说FinalData=M*P,由于M是20*20的,P是20*n的,所以FinalData是20*n的,因为n小于20。所以和之前对比节约了n/20的空间。

3:总结

         个人觉得PCA主要是利用一些数据知识,对原始数据进行相应的坐标转换,最初的数据在一个坐标系上,你觉得相互之间点都有关系,但是当寻找另外的坐标系的时候会发现一些点可能距离很近也有可能重合,此时就可以把这些点省掉一些。。个人理解,不一定正确。

4:建议

         我们之前做可视化总是直接对原始数据进行可视化,如果数据维度大可视难度是非常大的,其实可以做一些这样简单的变换,降低下数据维度,并且利用数学关系和模型来分析下到底和我们需要分析的哪些指标有关系,然后找到有关系的维度,去掉无关系的维度,既利于分析,也能得到真正有用的结果。


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 帝国CMS多图上传插件详解及使用指南
    本文介绍了一款用于帝国CMS的多图上传插件,该插件通过Flash技术实现批量图片上传功能,显著提升了多图上传效率。文章详细说明了插件的安装、配置和使用方法。 ... [详细]
  • 提升Tumblr爬虫效率与功能
    本文介绍了对之前开发的Tumblr爬虫脚本进行升级,整合了两个脚本的功能,实现了自动分页爬取博客内容,并支持配置文件以下载多个博客的不同格式文件。此外,还优化了图片下载逻辑。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 本文介绍如何使用 Python 提取和替换 .docx 文件中的图片。.docx 文件本质上是压缩文件,通过解压可以访问其中的图片资源。此外,我们还将探讨使用第三方库 docx 的方法来简化这一过程。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 脑机接口(BCI)技术正逐步将科幻变为现实,从帮助听障人士恢复听力到使瘫痪者重新站立,甚至可能将多年的学习过程压缩至瞬间。本文探讨了这一前沿技术的现状、挑战及其未来前景。 ... [详细]
  • 网易严选Java开发面试:MySQL索引深度解析
    本文详细记录了网易严选Java开发岗位的面试经验,特别针对MySQL索引相关的技术问题进行了深入探讨。通过本文,读者可以了解面试官常问的索引问题及其背后的原理。 ... [详细]
  • 卷积神经网络(CNN)基础理论与架构解析
    本文介绍了卷积神经网络(CNN)的基本概念、常见结构及其各层的功能。重点讨论了LeNet-5、AlexNet、ZFNet、VGGNet和ResNet等经典模型,并详细解释了输入层、卷积层、激活层、池化层和全连接层的工作原理及优化方法。 ... [详细]
author-avatar
345877103_b54cd7
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有