00:01
继续上一次的内容,看到书上113页二特征提取的特征脸前面提到过PCA的另一个应用是特征提取,特征提取背后的思想是可以找到一种数据表示。比给定的原始表示更适合于分析。特征提取很有用,它的一个很好的应用实例就是图像。图像由像素组成。通常存储为。红、绿、蓝、RGB强度图像中的对象通常有上千个像素组成,它们只有放在一起才有意义。我们将给出这种PCA对图像做特征提取的一个简单应用及处理外的数据及labeled faces标记人脸中的人脸图像。这一数据即包含从互联网下载的名人脸部图像,它包含从21世纪初开始的政治家、歌手、演员和运动员的人脸图像。我们使用这些图像的灰度版本。
01:03
并将它们按照比例缩小,以加快处理速度。
04:20
我们可以在这里看到。其中的一部分图像。它一共有3023张图像,每张大小为87像素乘以65像素,分别属于62个不同的人。
05:36
但是这个数据集有些偏斜,其中包含作者W故事。小布什和lywell克林鲍威尔的大量图像。
07:53
我们可以发现小布什的图像。非常的多,530张图像。
08:02
所以为了降低数据偏斜,我们对每个人最多只取50张图像。否则,特征提取。将会被小布什的可能性大大影响。
10:38
大家可能发现了,这里有两个新的函数。None ting zeros和long ting well。首先来看到longing zero。这是其对应的圆形。它表示什么意思?根据给定的形状和数据类型,返回一个新数组。用零来填充所有的元素。
11:04
参数shape,整数或者整数元组返回的数组形状。Type数据类型可选参数默认是64位浮点数。O。CF二选一,可选参数默认是C。当返回一个多维数组的时候,选择行优先取值为CC语言风格,还是列优先取值为f fo语言风格?接下来是。派点will。这是其对应的原型参数。肯定是一个类似布尔数组的对象。XY2个类似数组的项可选参数肯定是X和Y,必须可以广播到。相同的形状。返回值。稍微有一点点复杂。如果只提供了肯定性参数。当肯定性是一个一为布尔数组,返回一个单元组,单元组中的元素是一个整数的数组,其只表示肯定性为初的位置,也就是,所以。
12:07
否则,假设condition是一个N为N大于等于二的布尔数组,返回一个N元组,其中元素是N个等长一位数组。既返回值为A,那么。List zip,星号A。这么一个列表中的元素。是肯定性为处的位置,也就是,所以,否则返回一个数组A,当肯定性I等于true AI等于Xi,否则AI等于Yi。实力。Condition对应的是A小于五。
13:01
把它写在下面这张表里面,X对应的就是AY对应就是十倍的A。当condition I等于true的时候。返回值。的索引I处的值就是X。当肯定性为false时。对应的返回值就是Y的对应位置的值。我们可以将其推广到多维数组。过程和上面差不多,就是索引。换成了元组的形式,上面是一个整数嘛。接下来看看广播的情况。在这里,负一被广播。
14:02
接下来我们来看看仅提供condition参数,Condition是一个一维数组的情况。看一下运算的过程。首先写condition。这个数组写在表表格里。然后。剔除condition为force的列就是把这一列删掉。但是需要注意。千万不要去改索引。这里一还是一没有,因为T掉了,它就变成了零。接下来考虑到返回值是一个单元组,其中的元素是一个数组。这样就可以得出这么一个返回值。接下来看看最后一种情况。仅提供condition参数,Condition是一个N为数组,N大于等于二。过程和上面差不多,先写condition。
15:03
然后。剔除肯定性为false的列,千万不要去改索引和上面一样,返回直径为A。那么list zip星号A。就是把索引往下一搬就行了。考虑到返回值A是一个N元组,其中元素是N的数组,可以得返回值A等于。这么一个二元组。我们回到书上。人脸识别的一个常见任务就是看某个前所未知的人脸。是否属于数据库中的某个已知人物,这在照片收集、社交媒体和安全应用中都有应用,解决这个问题的方法之一就是构建一个分类器,每个人都是一个单独的类别,但人脸数据库中通常有许多不同的人,而同一个人的图像很少,也就是说每个类别的训练压力很少,这使得大多数分类器的训练都很困难。另外。
16:12
通常你还想要能够轻松的添加新的人物,不需要重新训练一个大型模型。一种简单的解决方法是使用单一最近灵分类器。寻找与你要分类的人脸作为相似的人脸,这个分类器原则上可以处理每个类别只有一个训练样例的情况。下面看一下k nes class k k精灵分类器的表现究竟是如何?
19:23
我们得到的精度。是23%。对于包含62个类别的分类问题来说,这实际上不算太差,随机猜测的精度约为一除以62等于1.5%。但也不算好。我们没识别。四五次。才只是正确的识别了一个人。这里就可以用到PCA。想要度量人脸的相似度,计算原始像素空间中的距离是一种相当糟糕的方法。
20:05
用像素表示。来比较人两张图像时,我们比较的是每个像素的灰度值与另一张图像对应位置的像素的灰度值。这种表示与我们与人们对人脸图像的解释方式有很大的不同,使用这种原始表示很难获得到面部特征,例如,如果使用像素距离,那么将人脸向右移动,一个像素将会发生巨大的变化,得到一个完全不同的表示。我们希望。使用沿着主成分方向的距离可以提高精度。这里我们启用PC的白话white。Whitening选项。它将主成分缩放到相同的尺度。变换后的结果与使用standard scale相同。
21:10
我们再次使用书上108页图三杠三的数据。白话不仅对应于旋转数据。还对应于缩放数据,实际形状是圆而不是椭圆。接下来我们对训练数据拟合PCA对象,并提取前100个主成分。然后对训练数据和测试数据进行变换。
23:33
新数据有100个特征及前100个主成分,现在可以对新数据使用单一。最近能分类器。来将我们的图像进行分类。
24:51
我们精度。有所提高。从23%变到31%。
25:04
这证实了我们的直觉及主成分可能提供了一种更好的数据表示。对于图像数据,我们还可以很容易的找到,将找到主成分做一下可视化,请注意成分对应与输入空间里的方向。这里的输入空间是87像素乘以65像素的灰度图像,所以在这个空间中的方向也是87像素乘以65像素的灰度图像。我们来看一下前面几个主成分。
29:04
虽然我们肯定无法理解这些成分的所有内容。但可以猜测一些主成分捕捉到了人脸图像的哪些方面。第一个主成分似乎主要编码的是人脸与背景的对比,第二个主成分编码的是人脸左半部分和右半部分明暗程度的差异,如此等等。虽然这种表示比原始像素值的语义稍微强一点,但它人与人们感知人脸的方式相差的太远了。由于PCA模型是基于像素的,因此人脸的相对位置、眼睛、下巴和鼻子的位置和明暗程度都对两张图像在像素表示中的相似程度有很大的影响。但人脸的相对位置和明暗程度可能并不是人们首先感知的内容。在要求人们评价人脸的相似度时,他们更可能会使用年龄、性别、面部表情和发型等属性,而这些属性很难从像素强度中推断出来。重要的是要记住。
30:13
算法对数据,特别是视觉了上面的数据,比如我们非常熟悉的图像的解释,通常与人类的解释方式大不相同。不过让我们回到PCA的具体事例。我们对BCA变换的介绍是,先旋转数据,然后删除方差较小的成分。另一种有用的解释是尝试找到一些数字PC旋转后的新的特征值。使我们可以将测试点表示为主成分的加权求和。具体是个什么情况,可以看一下书上118页图三杠103杠十。这里的X0 X一等是这个数据点的主成分的系数。
31:02
换句话说,它们是图像在旋转后的空间中的表示。我们还可以用另一种方法来理解PCA模型,就是仅使用一些成分对原始数据进行重建。在图三个三中。再去掉第二个成分。并来到。第三张图之后我们反向旋转,并重新加上平均值。这样就在原始空间中获得去掉第二个成分的新数据点,正如最后一张图所示。我们可以对人脸做类似的变换。将数据降维到。只包含一些主成分。然后反转回到原始空间。回到原始空间可以通过transform方法来实现。这里我们分别利用十个、50个、100个和500个成分对一些人脸进行重建,并将其进行可视化。
32:31
可以看到。在只使用前十个主成分的时候。也就是这一列。仅捕捉到了图像的基本特点,比如人脸的方向和明暗程度。随着使用的主成分越来越多,图像中也保留了越来越多的细节。这对应于图三,杠十的求和中包含越来越多的像。如果使用的成分个数与像素个数相等,意味着我们在旋转后不会丢弃任何信息,可以完美重建图像。
33:06
我们还可以尝试使用PCA的前两个主成分,将数据集中的所有人脸在散点图中可视化,其类别在图中给出。这与我们对看数据集所做的是类似的。
34:24
如你所见,如果我们只使用前两个主成分,整个数据只是。一盘散沙看不到类别之间的分界,这并不意外。因为即使有十个成分。就像这一列。PC也已经捕捉到人脸非常粗略的特征。
我来说两句