最近在做一道题,题目的要求如下图,其中如2-digits这张图,图中每两个数字构成一个子图(横着看,比如第一行为41,43,42,14,12,14,23,41),对应的右图为左图的一个主成分元素,即2-digits这张图中的每个单一的数字都是一个主成分,要求利用主成分分析等方法将图中的数字一一分离出来,如左图所示。可以看出左图是由右图的一个组合构成的,在实际操作中,我是采用非负矩阵分解的方式来尝试解这道题。
什么是非负矩阵分解(Non-negative Matrix Factorization)
NMF的基本思想可以简单描述为:对于任意给定的一个非负矩阵V,NMF算法能够寻找到一个非负矩阵W和一个非负矩阵H,使得满足 ,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。如下图所示,其中要求分解后的矩阵H和W都必须是非负矩阵。
矩阵V分解为左矩阵W和右矩阵H,可理解为原始矩阵V的列向量是H中的所有列向量的加权和,对应的权重系数则是W的列向量的元素,所有H称为基矩阵,W称为系数矩阵。
NMF在人脸识别的应用中和PCA还有VQ分解不同。VQ分解是用一张完整的图像直接代表源脸部图像;PCA是将几个完整人脸加减压成一张脸;而NMF是取甲的眼睛,乙的鼻子,丙的嘴巴直接拼成一张脸,也就是说NMF分解后的基矩阵H是每张人脸的一个特征部分,例如眼睛,鼻子,嘴巴等,然后权重矩阵对这些特征进行加权处理从而得到一张完整的人脸。如下图所示3种矩阵分解方式的区别。