特征提取

1. 概述

图像中常见的特征有边缘、角、区域等。通过各属性间的关系,改变原有的特征空间,例如组合不同的属性得到新的属性,这样的处理叫做特征提取。

注意特征选择是从原始的特征数据集中选择出子集,是一种包含关系,并没有造成原始特征空间的变动,而特征提取不同,这是一个重要的区别点。

2. 主要方法

特征提取的主要方法: 主成分分析(PCA)

特征提取的主要目的: 降维,排除信息量小的特征进而减少计算量等。

3. PCA

1. PCA算法的实现

根据向量的空间变换理论,我们可以把一个三维向量(x1,y1,z1)变换到(x2,y2,z2),因为我们特征提取后,特征空间发生了变化,假定原本特征空间中的基底为(x,y,z),新空间的基底为(a,b,c),若在新的特征空间中,某一维在新基底下的投影都接近于0,可以忽略,那么,我们可以直接用(a,b,c)的降维基底来表示数据(如(x2,y2,z2)在c分量上的投影均接近0,那么(a,b)就可以表示这个特征空间),这样数据就从三维空间降维到了二维空间。

重点是如何求解新的基底(a,b,c)

求解步骤:

  • 对原始数据零均值化(中心化)
  • 求协方差矩阵
  • 对协方差矩阵求特征向量和特征值,使用这些特征向量组成新的特征空间。

2. 零均值化(中心化)

过程: 中心化就是将样本集的中心平移到坐标系的原点O上,使得所有数据的中心为(0,0),即将变量减去它的均值,使均值为0.

目的: 使得样本集的数据中心变为(0,0),中心化数据之后,计算得到的方向才能比较好的反映原来的数据。

降维的几何意义:

对于一组数据,如果其在某一基底方向上的方差越大,则说明点的分布越分散,表明这个方向上所代表的属性(特征)可以越好地反映源空间数据集。所以在降维地时候,主要目的是找到一个超平面能够使得数据点地分布方差呈最大,这样数据表现在新的坐标轴上的时候已经足够分散了。

方差的定义:

PCA算法的优化目标就是:

  • 降维后同一维度的方差最大
  • 不同维度之间的相关性为0

3. 协方差矩阵的定义

定义:

意义: 衡量两个属性之间的关系

当Cov(X, Y) >(<)(=) 0时,X与Y正(负)(不)相关

特点:

  • 协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。
  • 样本矩阵的每一行是一个样本,每列为一个维度,所以样本集要按列计算均值。
  • 协方差矩阵的对角线就是各个维度的方差,也即(Cov(X,X) = D(X))

特别地,数据中心化后的协方差矩阵,也即中心化矩阵的协方差矩阵公式:

4.对协方差矩阵求特征值与特征矩阵

其实对于特征值与特征向量的求法,在大学数学中已经是一个很熟练通用的方法了,那么它在图像中到底有何种意义呢?

特征向量: 即为对于图像矩阵做特征值分解后在图像中提取的特征。

特征值: 其对应的特征(特征向量)在图像中的重要程度。

对数字图像矩阵做特征值分解,其实是在提取这个图像的特征,提取出来的向量即为特征向量,而对应的特征值就是这个特征在图像中的重要程度。在线性代数中,一个矩阵就是一个线性变换,向量在通常情况下做一个随机的线性变换后会变得与变换前的向量失去通常意义上可见关系,特征向量在使用原始矩阵做线性变换后,与变换前的特征向量仅仅是有了倍乘关系,也就是说,特征向量在原始矩阵的变换下仍然“保持原样”,那么这些向量(特征向量)就可以作为矩阵的核心代表了。所以,一个矩阵(线性变换)可以由其特征值和特征向量完全表述,这是因为从数学上看,这个矩阵的所有特征向量组成了这个向量空间的一组基底,而矩阵作为变换的本质其实就是把一个基底下的东西变换到另一个基底表示的空间中。

举例:

比如一个100x100的图像矩阵A分解之后,会得到一个100x100的特征向量组成的矩阵Q,以及一个100x100的只有对角线上的元素不为0的矩阵E,这个矩阵E对角线上的元素就是特征值,而且还是按照从大到小排列的(取模,对于单个数来说,其实就是取绝对值),也就是说这个图像A提取出来了100个特征,这100个特征的重要性由100个数字来表示,这100个数字存放在对角矩阵E中。

5. 对特征值进行排序

方法:

评价模型的好坏,K值的确定:

通过特征值的计算我们可以得到主成分所占的百分比,用来衡量模型的好坏。

对于前K个特征值所保留的信息量计算方法如下:

6. PCA算法优缺点

优点:

  • 完全无参数限制。在PCA的计算过程中完全不需要认为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。
  • 用PCA技术可以对数据进行降维,同时对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度地保持了原有数据地信息。
  • 各主成分之间正交,可消除原始数据成分之间的相互影响。
  • 计算方法简单,易于在计算机上实现。

缺点:

  • 如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。
  • 贡献率小的主成分往往可能含有对样本差异的重要信息。

个人学习笔记,仅交流学习,转载请注明出处!

CV学习笔记-特征提取相关推荐

  1. y空间兑换代码_【CV学习笔记】色彩空间

    关注"深度学习冲鸭",一起学习一起冲鸭! 设为星标,第一时间获取更多干货 作者:云时之间来源:知乎链接:https://zhuanlan.zhihu.com/p/103387082 ...

  2. CV学习笔记-BP神经网络训练实例(含详细计算过程与公式推导)

    BP神经网络训练实例 1. BP神经网络 关于BP神经网络在我的上一篇博客<CV学习笔记-推理和训练>中已有介绍,在此不做赘述.本篇中涉及的一些关于BP神经网络的概念与基础知识均在< ...

  3. cv学习笔记(3)神经网络数学原理

    cv学习笔记(3)神经网络数学原理 根据一个神经网络例子来介绍 输入是年龄.收入.性别,输出是买车和不买车的概率.该神经网络包含一个输入层.一个隐含层.一个输出层,每个节点和下一层的所有节点都有连接, ...

  4. CV学习笔记-浅述CV方向

    浅述CV方向 一.浅述人工智能的一些术语 1. 人工智能初探 人工智能是通过机器来模拟人类认知能力的技术 人工智能最核心的能力就是根据给定的输入做出判断或预测 关键时间节点:1956年,达特茅斯会议, ...

  5. CV学习笔记 | CV综述 [2020.10.01]

    文章目录 0. 概述(整理完后随时修改) 1. 人工神经网络 1.1. 人工神经网络发展历程 1.2. 一些神经元节点的工作原理 1.2.1. 基本神经元 1.2.2. 卷积神经元(Convoluti ...

  6. 【CV学习笔记】图像预处理warpaffine-cuda加速

    1.前言 在上个学习笔记中学习warpaffine,并且在opencv下面实现了图像的预处理,而warpaffine可以很好的利用cuda加速来实现,于是基于手写AI的项目,又学习了warpaffie ...

  7. 肝货满满!CV学习笔记:入坑必备

    知乎:云时之间 链接:https://zhuanlan.zhihu.com/p/102044405 编辑:王萌 作者的话 最近因为一些原因被安排去做关于目标跟踪的一些工作,对我来说可谓是一个很大的挑战 ...

  8. CV学习笔记-Alexnet

    Alexnet 1. 背景 AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的.也是在那年之后,更多的更深的神经网络被提出. 2. 网络 ...

  9. CV学习笔记-推理和训练

    推理和训练 1. 概述 训练(Training): 一个初始神经网络通过不断的优化自身参数,来让自己变得准确.这整个过程就称之为训练(Training) 推理(Inference): 你训练好了一个模 ...

最新文章

  1. CSAPP(4):存储器层次结构
  2. python练习---模拟sql
  3. MapStruct在Eclipse中的使用
  4. Best Practices for Web Apps
  5. python **运算符及多参数传参
  6. java 自定义http头_HttpClient自定义HTTP头
  7. 通过Erlang构建TCP服务器
  8. 执行SQL-获取缓存
  9. 转:Centos防火墙设置与端口开放的方法
  10. 用python编写脚本计算linux_利用Python3实现Linux的脚本功能 !
  11. Excel构建决策分析模型
  12. 用SPSS求均值 方差 标准差小例题
  13. 推特自动发帖,快速提升人气
  14. IOS App的生命周期
  15. 计算机老师新年贺卡祝福语,老师新年贺卡祝福语
  16. pip加速源之python,快如火箭
  17. Tensor多维slice切片操作
  18. 调用批处理bat文件
  19. 计算机教师资格证难不难考,教师资格证 信息技术难考吗
  20. net-java-php-python-医药库存管理系统计算机毕业设计程序

热门文章

  1. [PyTorch] reverse the normalization
  2. protobuf序列化协议python教程
  3. -分类数组-创建//修改(添加/改变原有/合并/删除)分类数组(categorical)
  4. 学习笔记(13):组合不同类型的数据
  5. 【python基础语法】range() 序列类型range
  6. matlab简单分析信号调制解调
  7. 三.rocketmq-console
  8. [LeetCode][JavaScript]Palindrome Linked List
  9. [转] Java内部类详解
  10. 整合TextBox与Label 创建新控件--EFLabelText