06.17 十分钟搞懂python实现无监督K均值聚类算法

本文简要介绍了一种常用的无监督学习算法:K 均值聚类,主要用python实现

无监督学习是一类用于在数据中寻找模式的机器学习技术。无监督学习算法使用的输入数据都是没有标注过的,这意味着数据只给出了输入变量(自变量 X)而没有给出相应的输出变量(因变量)。在无监督学习中,算法本身将发掘数据中有趣的结构。

十分钟搞懂python实现无监督K均值聚类算法

监督学习 VS 无监督学习

在监督学习中,系统试图从之前给出的示例中学习。因此,如果数据集被标注过了,提前做好了分类的信息的这就是一个监督学习问题;而如果数据没有被标注过,这就是一个无监督学习问题,学习过程中并不知道分类结果是否正确。

十分钟搞懂python实现无监督K均值聚类算法

左图是一个监督学习的例子,它使用回归技术找到在各个特征之间的最佳拟合曲线。

而右无监督学习中,根据特征对输入数据进行划分,并且根据数据所属的簇进行预测。

一:模型原理:

K-Means算法的思想:对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。

如果用数据表达式表示,假设簇划分为,则我们的目标是最小化平方误差E:

十分钟搞懂python实现无监督K均值聚类算法

算法都包含一个过程,即找出和某一个点最近的点。利用了最近邻(nearest neighbors)的思想。

二:算法步骤:

(1) 首先要注意的是k值的选择,一般来说,我们会根据对数据的先验经验选择一个合适的k值,如果没有什么先验知识,则可以通过交叉验证选择一个合适的k值。并随机初始化它们各自的中心点。中心点是与每个数据点向量长度相同的位置。这需要我们提前预知类的数量(即中心点的数量)。

(2) 计算每个数据点到中心点的距离,数据点距离哪个中心点最近就划分到哪一类中。

(3) 计算每一类中中心点作为新的中心点。

(4) 重复以上步骤,直到每一类中心在每次迭代后变化不大为止。也可以多次随机初始化中心点,然后选择运行结果最好的一个。

三:重要的参数

n_clusters:聚类的个数K值,一般根据经验,也可以先画出样本的散点图,查看样本的分布情况再初步确定聚类的个数

max_iter:最大迭代次数,超过这个次数,则停止迭代

四:数据准备

我们使用sklearn自带Iris 数据集-额鸢尾花卉数据集,这个数据集包含 150 条记录,每条记录由 5 个特征构成——花瓣长度、花瓣宽度、萼片长度、萼片宽度、花的类别。花的类别包含 Iris Setosa、Iris VIrginica 和 Iris Versicolor 三种。本文中向无监督算法提供了鸢尾花的后两个特征,sepal length 萼片长度(厘米),sepal width 萼片宽度(厘米)预测它属于哪个类别。

数据探索

首先使用 matplotlib 进行数据可视化,代码如下:

十分钟搞懂python实现无监督K均值聚类算法

十分钟搞懂python实现无监督K均值聚类算法

五:K 均值算法的 Python 实现

十分钟搞懂python实现无监督K均值聚类算法

结果如下:类别特征,类别数量

十分钟搞懂python实现无监督K均值聚类算法

六:模型检验:

1,画出聚类散点图

十分钟搞懂python实现无监督K均值聚类算法

如下图,聚类之后形成包含聚类中心的散点图

十分钟搞懂python实现无监督K均值聚类算法

十分钟搞懂python实现无监督K均值聚类算法

2,Calinski-Harabasz分数值:在(0-1)区间,越大说明组与组之间界限越明显,组内之间样本界限越小,说明模型越好,

3,兰德指数:在(0-1)区间,越大越好,但是前提得知道确定的分类结果

六:结果解读

如果聚类的效果好,就需要对每个类别的特征根据业务需要进行解读或者定义,使之能真正在业务中使用


分享到:


相關文章: