这一节我们来讨论下聚类算法,聚类属于无监督问题,给出的数据没有标签值,需要机器算法自行去探索其中的规律,根据该规律将相近的数据划分为一类。
聚类算法理解起来非常容易,没有数学公式的推导。我们用下图来做个简单的说明,原始数据是没有颜色的,我们通过聚类算法将相近的数据分成了三类,并标记了三种颜色。
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 data process.png
3.K-MEANS算法的优缺点
优点:
理解简单,执行速度快,只需要指定n_clusters参数就可以了,适合常规数据集。
缺点:
没有标签值,模型效果难以评估,所以很难确定分多少簇效果较好。
复杂度与样本呈线性关系,很难发现任意形状的簇。如下图,这种形状数据集难以分类。
difficult to split.png
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]
网友评论