K均值聚类
参考博客:
聚类能够将具有相似属性的对象划分到同一个集合(簇)中。
聚类方法能够应用于所有对象,簇内的对象越相似,聚类算法的效果越好。
K均值聚类的基本步骤
-
K均值聚类是一种将输入数据划分为k个簇的简单的聚类算法,该算法不断提取当前分类的中心点(也称为质心或重心),并最终在分类稳定时完成聚类。
-
从本质上说,K均值聚类是一种迭代算法。
-
在实际处理过程中需要进行多轮的迭代,直到分组稳定不再发生变化,即可认为分组完成。
K均值聚类算法的基本步骤如下
- 随机选取k个点作为分类的中心点。
- 将每个数据点放到距离它最近的中心点所在的类中。
- 重新计算各个分类的数据点的平均值,将该平均值作为新的分类中心点。
- 重复步骤2和步骤3,直到分类稳定。
K均值聚类
OpenCV提供了函数cv2.kmeans()来实现K均值聚类。
该函数的语法格式为:
retval, bestLabels, centers=cv2.kmeans(data, K, bestLabels, criteria, attempts,flags)
# 输入参数
data:输入的待处理数据集合,应该是np.float32类型,每个特征放在单独的一列中。
K:要分出的簇的个数,即分类的数目,最常见的是K=2,表示二分类。
bestLabels:表示计算之后各个数据点的最终分类标签(索引)。实际调用时,参数bestLabels的值设置为None。
criteria:算法迭代的终止条件。当达到最大循环数目或者指定的精度阈值时,算法停止继续分类迭代计算。该参数由3个子参数构成,分别为type、max_iter和eps。
type表示终止的类型,可以是三种情况
cv2.TERM_CRITERIA_EPS:精度满足eps时,停止迭代。
cv2.TERM_CRITERIA_MAX_ITER:迭代次数超过阈值max_iter时,停止迭代。
cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER:上述两个条件中的任意一个满足时,停止迭代。
max_iter:最大迭代次数。
eps:精确度的阈值。
attempts:在具体实现时,为了获得最佳分类效果,可能需要使用不同的初始分类值进行多次尝试。指定attempts的值,可以让算法使用不同的初始值进行多次(attempts次)尝试。
flags:表示选择初始中心点的方法,主要有以下3种。
cv2.KMEANS_RANDOM_CENTERS:随机选取中心点。
cv2.KMEANS_PP_CENTERS:基于中心化算法选取中心点。
cv2.KMEANS_USE_INITIAL_LABELS:使用用户输入的数据作为第一次分类中心点;如果算法需要尝试多次(attempts 值大于1时),后续尝试都是使用随机值或者半随机值作为第一次分类中心点。
# 输出
retval:距离值(也称密度值或紧密度),返回 每个点到相应中心点距离的平方和(是一个数)。
bestLabels:各个数据点的最终分类标签(索引)。
centers:每个分类的中心点数据。