好久没有更新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”
作业留念