K-Means算法简介
K-MEANS
算法是输入聚类个数k
,以及包含 n
个数据对象的数据库,输出满足方差最小标准k
个聚类的一种算法。属于一种经典的无监督学习算法。
示意图如下所示:k-means
算法接受输入量 k
;然后将n
个数据对象划分为 k
个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。
基本步骤:
(1) 从 n个数据对象任意选择 k 个对象作为初始聚类中心;
(2) 根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分;
(3) 重新计算每个(有变化)聚类的均值(中心对象);
(4) 计算标准测度函数,当满足一定条件,如函数收敛时,则算法终止;如果条件不满足则回到步骤(2)。
TensorFlow的K-Means实现
1 | from __future__ import print_function |
导入数据集
1 | # Import MNIST data |
Extracting ./data/train-images-idx3-ubyte.gz
Extracting ./data/train-labels-idx1-ubyte.gz
Extracting ./data/t10k-images-idx3-ubyte.gz
Extracting ./data/t10k-labels-idx1-ubyte.gz
设置参数
1 | # Parameters |
构建K-means图模型
1 | # Build KMeans graph |
训练模型
1 | # Start TensorFlow session |
Step 1, Avg Distance: 0.341471
Step 10, Avg Distance: 0.221609
Step 20, Avg Distance: 0.220328
Step 30, Avg Distance: 0.219776
Step 40, Avg Distance: 0.219419
Step 50, Avg Distance: 0.219154
测试
1 | # Assign a label to each centroid |
Test Accuracy: 0.7127