好久没有更新Blog。这其实是上学期的一个作业,写完了之后一直存放草稿里,看到了微软识花出来之后,突然发现我还写过这个东西。

这是一个非常简单的程序,上传图片,然后识别,由于“作业”关系,其实只能识别15种植物,准确率是70-80%,这与算法有关,当然也和训练集有很大的关系。

1. 目的

利用PCA识别花卉,以及iOS上的应用。

了解PCA算法原理,并应用到花卉识别中。编写一个App,连接服务器,当用户选择了一张花卉照片时,上传照片到服务器,进行识别,最后返回相应的结果到本地进行显示。

2. 环境

Python 2.7.11, Swift 2.2

3. 原理

实验主要利用PCA算法进行识别花卉识别.

PCA(Principal Component Analysis),主成分分析,是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。

利用起识别图片的基本思想是用一组图片进行训练:利用PCA提取出图片的主成分,即为特征值。在对新的图片进行识别时,也提取其特征值进行比较距离(欧几里得距离),距离最近的目标,就是识别出的对象。

简单原理叙述叙述如下:

样本X和样本Y的协方差(Covariance):

协方差为正时说明X和Y是正相关关系,协方差为负时X和Y是负相关关系,协方差为0时X和Y相互独立。

Cov(X,X)就是X的方差(Variance).

当样本是n维数据时,它们的协方差实际上是协方差矩阵(对称方阵),方阵的边长是。比如对于3维数据(x,y,z),计算它的协方差就是:

若,则称是A的特征值,X是对应的特征向量。实际上可以这样理解:矩阵A作用在它的特征向量X上,仅仅使得X的长度发生了变化,缩放比例就是相应的特征值。

当A是n阶可逆矩阵时,A与P-1Ap相似,相似矩阵具有相同的特征值。

特别地,当A是对称矩阵时,A的奇异值等于A的特征值,存在正交矩阵Q(Q-1=QT),使得:

对A进行奇异值分解就能求出所有特征值和Q矩阵。

D是由特征值组成的对角矩阵

由特征值和特征向量的定义知,Q的列向量就是A的特征向量。

4. 效果图

选择图片并点击“Predict”,如下图点击了“杜鹃”的“Predict”


作业留念