K-Means算法原理及程序实现

一、算法介绍

(1)算法思想

Kmeans算法是一个重复移动类中心点的过程,把类的中心点,也称重心(centroids),移动到其包含成员的平均位置,然后重新划分其内部成员。k是算法计算出的超参数,表示类的数量;Kmeans可以自动分配样本到不同的类,但是不能决定究竟要分几个类。k必须是一个比训练集样本数小的正整数。有时,类的数量是由问题内容指定的。例如,一个鞋厂有三种新款式,它想知道每种新款式都有哪些潜在客户,于是它调研客户,然后从数据里找出三类。也有一些问题没有指定聚类的数量,最优的聚类数量是不确定的。后面我将会详细介绍一些方法来估计最优聚类数量。

Kmeans的参数是类的重心位置和其内部观测值的位置。与广义线性模型和决策树类似,Kmeans参数的最优解也是以成本函数最小化为目标。Kmeans成本函数公式如下:


图1.成本函数J

μi是第k个类的重心位置。成本函数是各个类畸变程度(distortions)之和。每个类的畸变程度等于该类重心与其内部成员位置距离的平方和。若类内部的成员彼此间越紧凑则类的畸变程度越小,反之,若类内部的成员彼此间越分散则类的畸变程度越大。求解成本函数最小化的参数就是一个重复配置每个类包含的观测值,并不断移动类重心的过程。首先,类的重心是随机确定的位置。实际上,重心位置等于随机选择的观测值的位置。每次迭代的时候,Kmeans会把观测值分配到离它们最近的类,然后把重心移动到该类全部成员位置的平均值那里。

(2)算法步骤


K-Means算法原理及程序实现_第1张图片
图2.算法步骤

(3)算法的程序实现流程


K-Means算法原理及程序实现_第2张图片
图3.算法流程

二、算法的程序实现(Python)


由于不支持代码格式,所以就不直接粘贴过来了,如需查看算法程序,请戳此处链接:

K-Means算法.py

三、算法实现的效果图


K-Means算法原理及程序实现_第3张图片
图3.原始数据撒点图


K-Means算法原理及程序实现_第4张图片
图四.K-Means聚类后的数据撒点图

你可能感兴趣的:(K-Means算法原理及程序实现)