k-平均聚类算法(k -means Clustering)第一步:生成质心
前面所讲到的图像识别任务是需要预期输出的简单监督学习(supervised-training)中的一种简单情况。在这里我们通过不需要预期输出的无监督学习(unsupervised-training)来进行图像分类。
最简单的方法是 k-平均聚类算法(k -means Clustering)。
k-平均聚类算法在类别数已知时使用。在质心不断明确的过程中完成特征量的分类任务。
k-平均聚类算法如下:
- 为每个数据随机分配类;
- 计算每个类的重心;
- 计算每个数据与重心之间的距离,将该数据分到重心距离最近的那一类;
- 重复步骤2和步骤3直到没有数据的类别再改变为止。
在这里,以减色化和直方图作为特征量来执行以下的算法:
- 对图像进行减色化处理,然后计算直方图,将其用作特征量;
- 对每张图像随机分配类别0或类别1(在这里,类别数为2,以
np.random.seed (1)
作为随机种子生成器。当np.random.random
小于th
时,分配类别0;当np.random.random
大于等于th
时,分配类别1,在这里th=0.5
); - 分别计算类别0和类别1的特征量的质心(质心存储在
gs = np.zeros((Class, 12), dtype=np.float32)
中); - 对于每个图像,计算特征量与质心之间的距离(在此取欧氏距离),并将图像指定为质心更接近的类别。
- 重复步骤3和步骤4直到没有数据的类别再改变为止。
在这里,实现步骤1至步骤3吧(步骤4和步骤5的循环不用实现)!将图像test@@@.jpg
进行聚类。
python实现:
答案: