关于层次聚类(hierarchical clustering)的基本步骤:
1、假设每个样本为一类,计算每个类的距离,也就是相似度
2、把最近的两个合为一新类,这样类别数量就少了一个
3、重新新类与各个旧类(去了那两个合并的类)之间的相似度;
4、循环重复2和3直到所有样本点都归为一类
这个计算的过程,相当于重构一个二叉树,只是这个过程,是从树叶-->树枝-->树干的构建过程
本例将以14张图片,做为样本,进行聚类,点击这里 下载图片样本
1、假设每个样本为一类,计算每个类的距离,也就是相似度
2、把最近的两个合为一新类,这样类别数量就少了一个
3、重新新类与各个旧类(去了那两个合并的类)之间的相似度;
4、循环重复2和3直到所有样本点都归为一类
这个计算的过程,相当于重构一个二叉树,只是这个过程,是从树叶-->树枝-->树干的构建过程
本例将以14张图片,做为样本,进行聚类,点击这里 下载图片样本
以下是使用我提供的图片库生成的分类结果,以及一张PS修后对代码中各变量的说明
当然,你也可以自己定义一个目录,程序会读取目录下所有JPG图片
如果你用了自己的图片,在代码中的一此数据的变化说明,可能和使用产生的数据不同了,同时,本文的主要目的是层次聚类(hierarchical clustering)的基本步骤,对于图片的相似度的算法并不完善,效果也并不是十分理想,不过如果你使用自己从手机中导入的生活照,不同的场景大致还是能分类出来的
# -*- coding:utf-8 -*-
from PIL import ImageDraw,Image
import numpy as np
import os
import sys
nodeList = []#用于存储所有的节点,包含图片节点,与聚类后的节点
distance = {}#用于存储所有每两个节点的距离,数据格式{(node1.id,no