机器学习(七)白化whitening

news/2024/11/7 18:40:01/
白化whitening
原文地址:http://blog.csdn.net/hjimce/article/details/50864602
作者:hjimce
一、相关理论
    白化这个词,可能在深度学习领域比较常遇到,挺起来就是高大上的名词,然而其实白化是一个比PCA稍微高级一点的算法而已,所以如果熟悉PCA,那么其实会发现这是一个非常简单的算法。
    白化的目的是去除输入数据的冗余信息。假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以用于训练时输入是冗余的;白化的目的就是降低输入的冗余性。
    输入数据集X,经过白化处理后,新的数据X'满足两个性质:
(1)特征之间相关性较低;
(2)所有特征具有相同的方差。
    其实我们之前学的PCA算法中,可能PCA给我们的印象是一般用于降维操作。然而其实PCA如果不降维,而是仅仅使用PCA求出特征向量,然后把数据X映射到新的特征空间,这样的一个映射过程,其实就是满足了我们白化的第一个性质:除去特征之间的相关性。因此白化算法的实现过程,第一步操作就是PCA,求出新特征空间中X的新坐标,然后再对新的坐标进行方差归一化操作。
二、算法概述
白化分为PCA白化、ZCA白化,下面主要讲解算法实现。这部分主要是学了UFLDL的深度学习《白化》教程:http://ufldl.stanford.edu/wiki/index.php/%E7%99%BD%E5%8C%96。自己的一点概括总结,算法实现步骤如下:
1、首先是PCA预处理
     
上面图片,左图表示原始数据X,然后我们通过协方差矩阵可以求得特征向量u1、u2,然后把每个数据点,投影到这两个新的特征向量,得到进行坐标如下:

这就是所谓的pca处理。
2、PCA白化
所谓的pca白化是指对上面的pca的新坐标X’,每一维的特征做一个标准差归一化处理。因为从上面我们看到在新的坐标空间中,(x1,x2)两个坐标轴方向的数据明显标准差不同,因此我们接着要对新的每一维坐标做一个标注差归一化处理:

当然你也可以采用下面的公式:

X'为经过PCA处理的新PCA坐标空间,然后λi就是第i维特征对应的特征值(前面pca得到的特征值),ε是为了避免除数为0。

3、ZCA白化
ZCA白虎是在PCA白化的基础上,又进行处理的一个操作。具体的实现是把上面PCA白化的结果,又变换到原来坐标系下的坐标:

给人的感觉就像是在PCA空间做了处理完后,然后又把它变换到原始的数据空间。

具体源码实现如下:
def zca_whitening(inputs):sigma = np.dot(inputs, inputs.T)/inputs.shape[1] #inputs是经过归一化处理的,所以这边就相当于计算协方差矩阵U,S,V = np.linalg.svd(sigma) #奇异分解epsilon = 0.1                #白化的时候,防止除数为0ZCAMatrix = np.dot(np.dot(U, np.diag(1.0/np.sqrt(np.diag(S) + epsilon))), U.T)                     #计算zca白化矩阵return np.dot(ZCAMatrix, inputs)   #白化变换

参考文献:
1、http://ufldl.stanford.edu/wiki/index.php/%E7%99%BD%E5%8C%96




http://www.ppmy.cn/news/665832.html

相关文章

白化(Whitening):PCA vs. ZCA

2019独角兽企业重金招聘Python工程师标准>>> 教程地址:斯坦福深度学习 白化 什么是白化? 维基百科给出的描述是: 即对数据做白化处理必须满足两个条件: 使数据的不同维度去相关;

个人总结:从 白化(whitening) 到 批标准化(Batch Normalization)

白化 Whitening 由于图像中像素之间具有很强的相关性,所以用于训练时输入是冗余的。白化的目的是降低输入的冗余性,我们希望通过白化过程使得算法的输入有如下性质:1、特征间相关性较低。2、所有特征具有相同的方差。 z-score白化 将图片调…

使用 Jetpack Compose 实现 ViewPager2

在此博客中,我们将介绍如何在Jetpack Compose中实现ViewPager2的功能。我们将使用Accompanist库中的Pager库,这是由Google开发的一个用于Jetpack Compose的库。 首先,需要将Pager库添加到你的项目中: implementation androidx.co…

动态二维码生成器PHP Dynamic QRcode

什么是 PHP Dynamic QRcode ? PHP Dynamic QRcode 是一个允许生成和保存动态和静态二维码(QR码)的应用。它具有简洁、响应灵敏且用户友好的设计。其中包含您网站中可能需要的一般功能,如:记录管理(CRUD&…

K4汽车保养

2017.12 换防冻液 2018.05 换变速箱油、刹车油、动力转向油 2.5W公里换的火花塞 2020.06 换菲罗多刹车油、采埃孚动力转向油、百适通防冻液 2020.06 换蓄电池 2020年 下半年保养考虑换前刹车片(未保养) 2022.6 采埃孚动力转向油、百适通防冻液&#x…

代替紧急通知_紧急通知!事关你的爱车!这件事12月21日前必须办!

叮叮叮~ 马上就要冬至啦! 你爱车的防冻液还没换吗? 说到冬季汽车养护,防冻液是必不可少的项目。 尤其是北方地区,气候寒冷。 防冻液可以防止停车时冷却液结冰而胀裂散热器 和冻坏发动机气缸体。 更换防冻液时就会发现,…

PHP 的 Logo 为什么是大象?

因为大象是世界上最好的动物。 当然,这只是开玩笑,那么为什么PHP的LOGO是大象呢?还有哪些关于PHP的LOGO的有趣的事情呢? 吉祥物-大象 ElePHPant 是一款可爱的 PHP 吉祥物,其设计中有一头大象。 最初的LOGO 1998 年…

Debian 12 “bookworm” 正式发布

经过 1 年 9 个月零 28 天的开发,Debian 项目推出了其新的稳定版本 12(代号 bookworm)。 Debian 12 包含超过 11,089 个新软件包,总计 64,419 个软件包, 6,296 个软件包已作为过时包删除。此版本更新了 43,254 个软件…