K-L变换( Karhunen-Loeve Transform)是建立在统计特性基础上的一种变换,有的文献也称为霍特林(Hotelling)变换,因他在1933年最先给出将离散信号变换成一串不相关系数的方法。K-L变换的突出优点是去相关性好,是均方误差(MSE,Mean Square Error)意义下的最佳变换,它在数据压缩技术中占有重要地位。

K-L(Karhunen-Loeve)变换形式

设X=(X1,X2,…,XN)T为N维随机矢量,mX=E(X)和CX=E{(X-mX)(X-mX)T}分别为其平均值向量和协方差矩阵,ei和λi分别为CX的特征向量和对应的特征值,其中i=1,…,N,并设特征值已按降序排列,即λ1≥λ2≥…≥λN,则K-L变换式为:[1] 
Y=A(X-mx) (1.1)
其中变换矩阵A的行为CX的特征值,即:
式中:eij表示第i个特征向量的第j个分量。

K-L变换的性质

①Y的均值向量为零向量0。即:
mY=E{Y} =E{A(X-mX)}=0 (1.2)
②K-L变换使矢量信号各分量不相关,即变换域信号的协方差为对角矩阵。
③K-L反变换式为:
X=A-1Y+mX=ATY+mx (1.3)
④K-L变换是在均方误差准则下失真最小的一种变换,故又称作最佳变换。
这条性质与压缩编码有关。其意义是,如果在数据传输中只传送变换后的前n个系数组成的矢量,则根据这n个系数得到的恢复值可以得到最小的均方误差,其值为:
上式表明,在K-L变换下,最小均方误差值等于变换域中矢量信号的最小的N-n个方差的和。特别有意义的是,如果这些分量的均值为零,则在恢复时只要把这些分量置零,便可以使均方误差最小。

图像信号的K-L变换

K-L变换是一维变换,在对图像信号进行变换时,矢量可以是一幅图像或一幅图像中的子图像。矢量各分量之间的相关性反映了像素之间的相关性。为了得到矢量X,可以将图像或子图像的像素按行行相接或列列相接的次序排列,如图1所示。

(a)行行相接
(b)列列相接
图1由二维图像信号建立矢量信号
在建立了矢量信号之后,就要计算协方差矩阵CX,然后计算的特征矢量才能得到K-L变换矩阵A。
由此可见,尽管K-L变换具有性质(2)和(4)的最佳去相关和误差性能,但是由于求解特征值和特征根并非易事,特别是在维数高时甚至可能求不出来,而且变换矩阵与图像的内容有关,因而难以满足实时处理的要求。但是,K-L变换在变换编码中具有理论指导意义,人们通过比较,寻找出一些性能与K-L变换接近,但实现却容易得多的“准最佳”编码方法。
 

聚类变换认为:重要的分量就是能让变换后类内距离小的分量。类内距离小,意味着抱团抱得紧。但是,抱团抱得紧,真的就一定容易分类么?

如图1所示,根据聚类变换的原则,我们要留下方差小的分量,把方差大(波动大)的分量丢掉,所以两个椭圆都要向y轴投影,这样悲剧了,两个重叠在一起,根本分不开了。而另一种情况却可以这么做,把方差大的分量丢掉,于是向x轴投影,很顺利就能分开了。因此,聚类变换并不是每次都能成功的。

图1

摧枯拉朽的K-L变换

K-L变换是理论上“最好”的变换:是均方误差(MSE,MeanSquare Error)意义下的最佳变换,它在数据压缩技术中占有重要地位。

聚类变换还有一个问题是,必须一类一类地处理,把每类分别变换,让它们各自抱团。

K-L变换要把所有的类别放在一起变换,希望通过这个一次性的变换,让它们分的足够开。

K-L变换认为:各类抱团紧不一定好区分。目标应该是怎么样让类间距离大,或者让不同类好区分。因此对应于2种K-L变换。

其一:最优描述的K-L变换(沿类间距离大的方向降维)

首先来看个二维二类的例子,如图2所示。

图2

如果使用聚类变换,方向是方差最小的方向,因此降维向方向投影,得到2类之间的距离即为2条红线之间的距离,但是这并不是相隔最远的投影方向。将椭圆投影到方向,得到2类之间的距离为2条绿线之间的距离。这个方向就是用自相关矩阵的统计平均得到的特征向量

设共有M个类别,各类出现的先验概率为

表示来自第i类的向量。则第i类集群的自相关矩阵为:

混合分布的自相关矩阵R是:

然后求出R的特征向量和特征值:

将特征值降序排列(注意与聚类变换区别)

为了降到m维,取前m个特征向量,构成变换矩阵A

以上便完成了最优描述的K-L变换。

为什么K-L变换是均方误差(MSE,MeanSquare Error)意义下的最佳变换?

其中表示n维向量y的第j个分量,表示第个特征分量。

引入的误差

均方误差为

m+1开始的特征值都是最小的几个,所以均方误差得到最小。

以上方法称为最优描述的K-L变换,是沿类间距离大的方向降维,从而均方误差最佳。

本质上说,最优描述的K-L变换扔掉了最不显著的特征,然而,显著的特征其实并不一定对分类有帮助。我们的目标还是要找出对分类作用大的特征,而不应该管这些特征本身的强弱。这就诞生了第2种的K-L变换方法。

其二:最优区分的K-L变换(混合白化后抽取特征)

针对上述问题,最优区分的K-L变换先把混合分布白化,再来根据特征值的分离程度进行排序。

最优区分的K-L变换步骤

首先还是混合分布的自相关矩阵R


然后求出R的特征向量和特征值:

以上是主轴变换,实际上是坐标旋转,之前已经介绍过。

令变换矩阵

则有

这个作用是白化R矩阵,这一步是坐标尺度变换,相当于把椭圆整形成圆,如图3所示。

图3

以二类混合分布问题为例。

分别求出二类的特征向量和特征值,有

则二者的特征向量完全相同,唯一的据别在于其特征根,而且还负相关,即如果取降序排列时,则以升序排列。

为了获得最优区分,要使得两者的特征值足够不同。因此,需要舍弃特征值接近0.5的那些特征,而保留使大的那些特征,按这个原则选出了m个特征向量记作

则总的最优区分的K-L变换就是:

K-L变换的更多相关文章

  1. ACM ICPC 2018 青岛赛区 部分金牌题题解(K,L,I,G)

     目录: K Airdrop I Soldier Game L Sub-cycle Graph G Repair the Artwork ———————————————————— ps:楼主脑残有点严 ...

  2. Gym 101606 - A/B/C/D/E/F/G/H/I/J/K/L - (Undone)

    链接:https://codeforces.com/gym/101606 A - Alien Sunset 暴力枚举小时即可. #include<bits/stdc++.h> using ...

  3. UVa10025-The ? 1 ? 2 ? ... ? n = k problem

    分析:因为数字之间只有加减变换,所以-k和k是一样的,都可以当成整数来考虑,只要找到最小的n满足sum=n*(n+1)/2>=k:且sum和k同奇同偶即可,做法是用二分查找,然后在就近查找 因为 ...

  4. 离散傅立叶变换与快速傅立叶变换(DFT与FFT)

    自从去年下半年接触三维重构以来,听得最多的词就是傅立叶变换,后来了解到这个变换在图像处理里面也是重点中的重点. 本身自己基于高数知识的理解是傅立叶变换是将一个函数变为一堆正余弦函数的和的变换.而图像处 ...

  5. 基于visual Studio2013解决C语言竞赛题之1087数字变换

        题目 解决代码及点评 /************************************************************************/ /* ...

  6. 1692: [Usaco2007 Dec]队列变换(BZOJ1640强化版)

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 682  Solved: 280[Submit][Sta ...

  7. 1640: [Usaco2007 Nov]Best Cow Line 队列变换

    1640: [Usaco2007 Nov]Best Cow Line 队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 543  Solved: 2 ...

  8. CZT变换(chirp z-transform)

    作者:桂. 时间:2018-05-20  12:04:24 链接:http://www.cnblogs.com/xingshansi/p/9063131.html 前言 相比DFT,CZT是完成频谱细 ...

  9. $\mathcal{FFT}$·$\mathcal{Fast \ \ Fourier \ \ Transformation}$快速傅立叶变换

    \(2019.2.18upd:\) \(LINK\) 之前写的比较适合未接触FFT的人阅读--但是有几个地方出了错,大家可以找一下233 啊-本来觉得这是个比较良心的算法没想到这么抽搐这个算法真是将一 ...

  10. TOT 傅立叶变换 FFT 入门

    HDU 1402,计算很大的两个数相乘. FFT 只要78ms,这里: 一些FFT 入门资料:http://wenku.baidu.com/view/8bfb0bd476a20029bd642d85. ...

随机推荐

  1. activity-alias

    activity-alias标签,它有一个属性叫android:targetActivity,这个属性就是用来为该标签设置目标Activity的,或者说它就是这个目标Activity的别名.至此我们已 ...

  2. Java中String类通过new创建和直接赋值字符串的区别

    方式一:String a = “aaa” ; 方式二:String b = new String(“aaa”); 两种方式都能创建字符串对象,但方式一要比方式二更优. 因为字符串是保存在常量池中的,而 ...

  3. 和为n连续正数序列 【微软面试100题 第五十一题】

    题目要求: 输入一个正数n,输出所有和为n连续正数序列(至少两个). 例如输入15,由于1+2+3+4+5 = 4+5+6 = 7+8 = 15.所以输出3个连续序列1~5,4~6,7~8. 参考资料 ...

  4. [python学习篇][廖雪峰][1]高级特性--创建生成器 方法2 yield

    def fib(max): n, a, b = 0, 0, 1 while n < max: print b a, b = b, a + b n = n + 1 将print b 改成yield ...

  5. [uiautomator篇][exist 存在,但click错误]

    uiautomator定位页面元素是,定位存在的;但是click的时候,发现点的位置不对,(不知道是android系统的问题还是uiautomator的问题,初步怀疑是系统的问题)

  6. Java生产者消费者模式

    为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程.在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能 ...

  7. Linux Shell系列教程之(一)Shell简介

    本文是Linux Shell系列教程的第(一)篇,更多shell教程请看:Linux Shell系列教程 想要学习linux,shell知识必不可少,今天就给大家来简单介绍下shell的基本知识. S ...

  8. hdu6085[压位+暴力] 2017多校5

    /*hdu6085[压位+暴力] 2017多校5*/ /*强行优化..*/ #include <bits/stdc++.h> using namespace std; struct bit ...

  9. iOS学习笔记02-UIScrollView

    父类UIView方法 // autoresizingMask - 现在基本弃用,改用autoLayout typedef NS_OPTIONS(NSUInteger, UIViewAutoresizi ...

  10. Python之自动单元测试之一(unittest使用实例)

    软件的测试是一件非常乏味的事情,在测试别人编写的软件时尤其如此,程序员通常都只对编写代码感兴趣,而不喜欢文档编写和软件测试这类"没有创新"的工作.既然如此,为什么不让程序员在编写软 ...