Java教程

聚类之K-means算法理论及代码实现

本文主要是介绍聚类之K-means算法理论及代码实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、K-means算法思想

1.定义

是一种原型聚类。

原型表示:均值向量

迭代方式:根据均值向量的公式,重新计算出新的均值向量。

2.目标

簇内相似度高,簇外相似度低。即:紧密而独立

3.流程

随机挑选k个样本作为均值向量(初始化)——计算各个样本到均值向量的距离——划分样本到离其最近的均值向量所属的那个簇——重新计算每个簇的均值向量——重复2、3、4步直到均值向量不再被更新(改变)——结束

实际当中,为避免算法运行时间过长,不会运行到均值向量不再更新,而是会设置一个终止条件,当整个过程满足这个终止条件时,算法将结束。

终止条件可以是以下任意一个:

  • 没有(或最小数目)对象被重新分配给不同的聚类;
  • 没有(或最小数目)均值向量再发生变化;
  • 误差平方和局部最小。

4.算法要点

(1)计算距离时,K-means通常采用欧式距离

(2)计算均值向量时,采用公式:

二、补充背景知识

 1.监督学习和无监督学习

(1)监督学习:

指训练集有标签,学习得到的模型用于将测试集进行分类or回归

(2)无监督学习:

指训练集没有标签,学习得到的模型用于揭示数据的潜在内涵(不用测试集进行测试,而是用性能度量对结果进行评估)我猜的,待定

2.聚类的类型

根据算法思想进行分类,常见有原型聚类和密度聚类。

(1)原型聚类

思想:假设簇类结构可以通过一组具有代表性的样本(即:原型)来刻画

流程:初始化原型→迭代更新原型→直到所有原型不再变更→算法结束

核心:原型的表示+迭代的计算方式

(2)密度聚类

思想:假设簇类结构可以通过样本分布的紧密程度(即:密度)来刻画

流程:待补充

3.距离度量

当样本之间需要进行相似性度量(similarity measure)时,一般采用距离度量的方法来定义相似度。即:样本之间距离越大,相似度越低。

距离度量的计算方式有很多种,依据具体情况来选择。

e.g. 欧式距离,曼哈顿距离,切比雪夫距离等

三、代码实现

这篇关于聚类之K-means算法理论及代码实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!