欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

聚类算法KMeans

程序员文章站 2022-03-10 10:37:13
...

这一节我们来讨论下聚类算法,聚类属于无监督问题,给出的数据没有标签值,需要机器学习算法自行去探索其中的规律,根据该规律将相近的数据划分为一类。
聚类算法理解起来非常容易,没有数学公式的推导。我们用下图来做个简单的说明,原始数据是没有颜色的,我们通过聚类算法将相近的数据分成了三类,并标记了三种颜色。
聚类算法KMeans
1.K-MEANS算法的基本概念
1.指定簇的个数,需要指定K值,k-means会根据指定的k值将数据分为k类。实际代码:km = KMeans(n_clusters = 3),代码中的3就是我们指定的k值。
2.质心:均值,所有数据点各向量的平均值,类似于高中物理中的重心的概念。
3.距离度量:计算每个数据点距离质心的距离。
2.K-MEANS工作流程简单介绍
我们用下图来对K-Means算法做一个简单的说明。首先,对于一个数据集,我们先随机给出两个质心,然后我们计算每个数据点距离两个质心的距离d1,d2,然后比较的d1,d2的大小,哪个值小,数据点就属于哪一类。其次,我们对第一次分类完的数据再次更新其质心(各数据点各维度的均值),再重复第一步的距离计算与比较过程,经过多次的迭代,最终我们就可以将数据分为2类。
聚类算法KMeans
3.K-MEANS算法的优缺点
优点:
理解简单,执行速度快,只需要指定n_clusters参数就可以了,适合常规数据集。
缺点:
没有标签值,模型效果难以评估,所以很难确定分多少簇效果较好。
复杂度与样本呈线性关系,很难发现任意形状的簇。如下图,这种形状数据集难以分类。
聚类算法KMeans
4.K-MEANS算法API文档简介

sklearn.cluster.KMeans(n_clusters=8, init=’k-means++’, n_init=10, max_iter=300, tol=0.0001, 
precompute_distances=’auto’, verbose=0, random_state=None, copy_x=True, n_jobs=None, 
algorithm=’auto’)

关键参数说明:
n_clusters:数据集要切分的类别数量,整型值,默认为8.
K-MEANS算法样例演示

import numpy as np
from sklearn.cluster import KMeans

#随机构造部分数据
X = np.array([[1,6],[2,4],[7,2],[8,5],[9,3],[5,3]])
#构建模型
km = KMeans(n_clusters=2).fit(X)
#查看kmeans的分类结果
km.labels_
[1, 1, 0, 0, 0, 0]
#查看数据集的质心点位置
km.cluster_centers_
[[7.25, 3.25],
 [1.5 , 5.  ]]

#使用km模型对未知数据集进行预测
km.predict([[3,9]])
[1]

下面链接是KMeans的可视化过程,可以帮助我们理解KMeans的算法原理。多尝试操作几次,还是非常有趣的,其链接如下:
聚类可视化

相关标签: 机器学习