机器学习之经典聚类算法k-means在人脸识别的应用
Posted 渣渣驴here
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习之经典聚类算法k-means在人脸识别的应用相关的知识,希望对你有一定的参考价值。
简介:
聚类被认为是机器学习中最常使用的技术之一,它历史悠久、应用广泛,几乎应用于环境学、医学、生物学、天文学、经济学等各个领域。其中K-means是最为常用的聚类算法。
K-means 算法是最为经典的基于划分的聚类方法, 是十大经典数据挖掘算法之一。 K-means 算法的基本思想是;以空间中 k 个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。k-means 算法接受参数 k ;然后将事先输入的 n 个数据对象划分为 k 个聚类,以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。
步骤:
算法原理:
K-means算法的基础是最小误差平方和准则。
若 Ni 是第 i 聚类Γi 中的样本数目, mi 是这些样本的均值,即
把Γi 中的个样本 y 与均值 mi 间的误差平方和对所有类相加后为
Je是误差平方和聚类准则,它是样本集 Y 和类别集 Ω的函数。 Je度量了用 C 个聚类中心 m1, m2, ···, mc 代表 c 个样本子集Γ 1, Γ 2, ···, Γc 时所产生的总的误差平方。 对于不同的聚类,Je的值当然是不同的, 使 Je 极小的聚类是误差平方和准则下的最优结果。这种类型的聚类通常称为最小方差划分。
输入:训练样本V={v(1),v(2),…,v(n)},v={v1,v2,…,vni},k:聚类个数;
输出:C={C1,C2,…,Ck};
步骤1 在数据集中随机选取K个对象作为初始聚类中心 c1,c2,…,ck;
步骤2 计算数据集中每个对象到聚类中心的距离,选取最小距离min|v- cj|,分配到聚类中,其中v={v1,v2,…,vn},j=1,2……k;
步骤3 计算每个聚类中的所有对象均值,将此均值作为新的聚类中心,,nj为第j类中对象的个数,j=1,2,……k;
步骤4 如果每个簇的聚类中心不再发生变化,聚类准则函数收敛,则算法结束。否则返回步骤2继续迭代。
人脸识别应用:
将 100*100 的 face 矩阵降维为一个 1*10000 的行矩阵; 然后将每 2000 个数据为一组求取一个平均数, 即得到一个 1*3 的 feature 矩阵, 此时 feature 矩阵中存储的是处理后的0~255 之间的数,即为特征 1、特征2、特征 3 的值,得到一个如下所示的矩阵
降维后的数据集
图片号 特征 1 特征 2 特征 3 人物代号 人物
1 227.764 235.008251.269 1 甲
2 201.95 171.624194.945 1 甲
3 224.934 181.419220.641 1 甲
4 299.497 283.707205.971 1 甲
5 206.334 175.668186.104 1 甲
6 206.334 175.668186.104 1 甲
7 208.128 166.037255.486 1 甲
8 238.901 168.59194.15 1 甲
9 209.31 168.449195.075 1 甲
10 177.1 153.796166.812 1 甲
11 183.189 129.826151.057 17 乙
12 261.774 169.557195.924 17 乙
13 261.042 162.394211.054 17 乙
14 234.876 134.373111.316 17 乙
15 251.593 165.491191.16 17 乙
16 231.97 157.978179.263 17 乙
17 62.434 46.4688.195 17 乙
18 269.553 170.8198.746 17 乙
19 284.118 159.287178.697 17 乙
20 262.452 151.028188.618 17 乙
21 238.901 168.59194.15 24 丙
22 209.31 168.449195.075 24 丙
23 177.1 153.796166.812 24 丙
24 183.189 129.826151.057 24 丙
25 261.774 169.557195.924 24 丙
26 261.042 162.394211.054 24 丙
27 234.876 134.373111.316 24 丙
28 251.593 165.491191.16 24 丙
29 231.97 157.978179.263 24 丙
30 62.434 46.4688.195 24 丙
但是 30 个样本就有 30 个 feature 矩阵,且同一个特征下个样本的值可能全不相同,此时对于 K-means 算法来说,就不好处理了,所以还要对特征的值进行分类,求得每个特征下30 个值得平均数 avg, 再将每个样本的该特征的值与avg 比较, 若大于avg 则记为 1;否则为 0,。最终得到一个如下所示的矩阵。
将所有(30 张)图片的每个特征以平均数为界限非为两类
图片号 特征 1 特征 2 特征 3 人物代号 人物
1 1 1 1 1 甲
2 0 1 1 1 甲
3 0 1 1 1 甲
4 1 1 1 1 甲
5 0 1 0 1 甲
6 0 1 0 1 甲
7 0 0 1 1 甲
8 1 1 1 1 甲
9 0 1 1 1 甲
10 0 0 0 1 甲
11 0 0 1 17 甲
12 0 0 0 17 乙
13 1 1 1 17 乙
14 1 0 1 17 乙
15 1 0 0 17 乙
16 1 0 1 17 乙
17 1 0 0 17 乙
18 0 0 0 17 乙
19 1 1 1 17 乙
20 1 0 0 17 乙
21 1 1 1 24 丙
22 0 1 1 24 丙
23 0 0 0 24 丙
24 0 0 1 24 丙
25 0 0 0 24 丙
26 1 1 1 24 丙
27 1 0 1 24 丙
28 1 0 0 24 丙
29 1 0 1 24 丙
30 1 0 0 24 丙
输在得到上面的数据后,将人物代号为 1,17,24 的照片降维后的数据集作为聚类中心点。在测试选择一张图片后,将新照片降维的特征一,特征二,特征三,数据集分别与三个聚类中心的特征一,特征二, 特征三数据集求得欧式距离量度,得到最后数据最小的,这判定新照片属于此聚类中心。再用聚类算法得到 1,17,24 号照片的聚类后的照片,并作为一个库为新输入的照片作比较,判断具体是哪个人。
喜欢请关注
以上是关于机器学习之经典聚类算法k-means在人脸识别的应用的主要内容,如果未能解决你的问题,请参考以下文章
机器学习之SKlearn(scikit-learn)的K-means聚类算法