思想: k-均值算法把簇的型心定义为簇内点的均值。它的处理流 程如下。首先,在数据集D中随机地选择k个对象,每个对象代表一个簇的初始均值或中心。对剩下的每个对象,根据其与各个簇中心的欧式距离,将它们分配到最相似的簇。然后,k-均值算法迭代地改善簇内变差。对于每个簇,它使用上次迭代分配到该簇的对象,计算新的均值。然后,使用更新后的均值作为新的簇中心,重新分配所有对象。迭代继续,直到分配稳定,即本轮形成的簇与前一轮形成的簇相同。
算法: k-均值。用于划分的k-均值算法,其中每个簇的中心都用簇中所有对象的均值来表示。
输入:
- k:簇的数目
- D:包含n个对象的数据集
输出:k个簇的集合
方法:
- 从D中任意选择k个对象作为初始簇中心;
- repeat
- 根据簇中对象的均值,将每个对>象分配到最相似的簇;
- 更新簇均值,即重新计算每个簇中对象的均值;
- util不在发生变化;
由于k-均值算法采用的是贪心算法而没有列举出所有可能的划分,所以k-均值算法不能保证收敛于全局最优解,它常常终止于一个局部最优解。结果可能依赖于初始簇中心的随机选择。实践中,为了得到好的结果,通常以不同的初始簇中心,多次运行k-均值算法。
k-均值算法的时间复杂度是O(nkt),其中n是对象总数,k是簇数,t是迭代次数。通常k << n 且 t << n。因此,对于处理大型数据集,该算法是相对可伸缩和有效的。