这个问题其实是上学期某门课的大作业的三个题目之一。公布题目后我就对这个内容很感兴趣,然而由于种种原因,和队友商量之后仍然选择了看起来最简单的句子分类,对此我不无遗憾。
这个寒假里计划要干的事情其实有很多,完成这个项目是其中之一;对CS的热门方向——如机器学习等听起来神乎其神的领域——有所了解也在ToDo-List上。据说最好的学习方式是learning in projects,不如趁此机会巩固一下python。
问题描述
给定一组内容是两个人在不同光线条件、不同表情下拍摄的面部照片,将照片按照人物分成两类。
输入:
10个2016维的向量。每张照片有2016个“像素点”,输入数据对应着10张照片的灰度图。
输出:
属于人物1的照片编号,和属于人物2的照片编号。
过程
处理输入
由于PCA有现成的库,K-Means聚类的过程也相对清晰,因此处理输入数据相关事宜的耗时可能要占去1/3。
最为智障的是,一开始我以为input.txt中第i * 2016 ~ ((i + 1) * 2016 - 1)个数是第一幅图的灰度值,聚类聚了半天却发现怎么都不对,场面一度十分尴尬;直到发现灰度图也无法还原,我才意识到可能文件中每一列是一幅图片的灰度向量……
PCA降维
因为没有学过高等代数,所以这部分我一直寄希望于现成的库。对于PCA的数学原理,