创业 从PCA到PAC

PCA (Principle Component Analysis)是一种很古老的用来提取数据中的模式(pattern)的算法。它的主要想法是,正如毛爷爷很早就指出的,抓住主要矛盾,忽略次要矛盾。它可以用来识别图像、压缩数据等。

具体一点说,可以用协方差(covariance)来表示数据中不同变量之间的相关程度(比如图像中任意两个像素点之间的相关性)。所有的协方差放在一起就是协方差矩阵,它是对原始数据的抽象代表。而这个协方差矩阵的特征向量,代表了原始数据中的模式,一个特征向量代表一种模式,特征向量对应的特征值越大,说明该模式越重要。如果我们只抓住主要模式,而忽略次要模式,就可以识别图像(比较图像中的主要特征是否相似)、压缩数据(扔掉了一些不是很重要的信息)。更深入的解释超出了本文的范畴(也超出了本作者的范畴)。

【长轴能近似地代表这些散点的分布,短轴方向的信息可以扔掉。图片来自 PCA 维基百科页面】

PAC(Parent Alike Comparison)是一种同样古老的家庭游戏。这种游戏在孩子爸妈中间非常流行,尤其适合于喜添贵子的年轻配偶之间和节庆聚会的场合。简而言之,关于孩子究竟长得像谁是一件值得商议的事情。

【图片来自 Bizo Mobile】

既然 PAC 可以做图像识别,那就让 PAC 来处理 PCA 吧!

下面是一个简单的 demo。

因为我非常喜欢银河系漫游者指南中的机器人马文,正好又有一张卡尔的靓照,正好角度都差不多,正好可以用来比较一下。

【原始图片】

因为我的笔记本的捉襟见肘的计算能力,实际处理的照片是经过压缩的灰度图像。在计算过程中,所有输入图像的平均图像(就是每个像素点的平均值)会被从每个输入图片去掉。然后剩余的每个图像进行了 PCA 的运算。目标是找出新的最高效的坐标(特征向量,在这里可以称为特征脸),来重新代表输入的图像。比如最后马文的照片可以表示为马文 = 0.4 * 特征脸A + 0.2 * 特征脸B...

特征脸一共有N个,N=输入照片的像素点数目。最后可以只选取特征值最大的几个特征脸来表征。最后通过比较测试图像和原始图像在这些特征脸上的分布的差异来做分类,比如测试图像 = 0.4 * 特征脸A + 0.18 * 特征脸B + ... 那它和马文就比较相似。

【实际输入图像】

【输入图像的平均值】

【除去平均值之后】

【前三个重要的特征脸。由于只有两张输入图像,所以其实第一张特征脸就足够分类了】

完成对原始图片的处理之后,我测试了以下图像,看它们更像卡尔还是更像马文。

【马铃薯 - 更像马文 -56.7%】

【鸡蛋 - 更像马文 -54.2%】

【小孩 - 更像卡尔 -87.4%】

【帅哥 - 更像卡尔 - 95.7%】 :)

【超重人士 - 更像卡尔 - 65.6%】

嗯。。。经过以上测试之后,我觉得这个模型还不错,跟手工分类的结果几乎一致。然后,我又试了一下气球,感觉都是椭圆的,跟马文很像。结果。。。

【气球 - 更像卡尔 - 72.5%】

毕竟,这个模型非常的粗糙,只是我自己学习的时候自娱自乐一下。同时 PCA 这个方法对图像的要求非常高,如果进行人脸识别的话,需要尽可能地排除干扰干扰因素(比如光照、角度、表情、五官对齐等)。而且对于比较大的图像,求协方差矩阵和特征向量的计算代价很高。Anyway,如果有人想解决 PAC 问题的话,请联系我,我收费比较便宜,也不仅限于比特币,人民币美元港币欧元等都可以。如果有人想进行精细的预测的话(同时预算又允许的话),还是请联系专业组织

【图片来自王冠大哥】

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180127G0S9S400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券