凌云时刻 · 技术
导读:PCA有一个典型的实际应用,就是人脸识别。我们这一节就来简单看看PCA在人脸识别中的应用。
作者 | 计缘
来源 | 凌云时刻(微信号:linuxpk)
高维数据向低维数据映射
首先我们还是先从PCA的原理来说,PCA就将高维数据降至相对的低维数据,但是这些低维的数据却能反应了原始高维数据的绝大多数主要特征。那么由PCA训练出的这些主成分其实就代表了原始数据的主要特征。那么如果原始高维数据是一张张不同的人脸数据时,那么由PCA训练出的主成分其实就是这一张张人脸的主要特征,称为特征脸。好比,爷爷,爸爸,儿子三个人长的很像,其实是这三张人脸有共同的特征脸。下面我们就使用Scikit Learn中提供的人脸数据来看看特征脸的应用。
|
如果网络不好的朋友,可以去这里手动下载All images aligned with funneling数据集,然后在使用fetch_lfw_people()
时需要增加data_home
这个参数,指定你存放数据集的目录,比如fetch_lfw_people(data_home='/XXX/XXX')
然后执行,Scikit Learn就会去你指定的目录下解压lfw_funneled
压缩包,抓取数据。从上面代码结果可以看到,这个人脸的数据集一共有13233张人脸图片,每张人脸图片有2914个特征,其实也就是由2914个不同值的像素组成,通过faces.images.shape
我们知道这13233张图片的大小是62乘以47像素,相乘的值正好就是2914。
因为这个数据集里人脸的分布并不均匀,所以我们在用之前先将其进行随机处理:
|
然后我们通过PCA求出这个13233条样本数据,2914维特征数据集的所有主成分。所有主成分要等于小于样本数据的特征数量。下面来求这个样本数据集的最大维度:
|
从代码结果可以看出,主成分的方差比率由大到小排序,第一个主成分能表示23.33%的人脸特征,从图上也能看到,第一个图显示了一个人脸的整个脸庞,第二个图显示了人脸的五官位置等。图中的这些脸就是特征脸,可以清晰的看到特征脸依次显示人脸特征的变化过程。
END
往期精彩文章回顾
机器学习笔记(十一):优化梯度公式
机器学习笔记(八):线性回归算法的评测标准
机器学习笔记(六):数据归一化
长按扫描二维码关注凌云时刻
每日收获前沿技术与科技洞见