K-means聚类是一种在一组未标记数据中查找聚类和聚类中心的方法.直觉上,我们可能会认为群集是由一组数据点组成的,这些数据点的点间距离与到群集外部点的距离相比较小.给定一组初始的K中心,K-means算法迭代以下两个步骤 :
对于每个中心,识别出比其他任何中心更接近的训练点子集(其集群).
每个特征中每个特征的平均值计算集群,这个均值向量成为该集群的新中心.
这两个步骤被迭代,直到中心不再移动或者作业不再改变.然后,可以将新点 x 分配给最近原型的簇. SciPy库通过集群包提供了良好的K-Means算法实现.让我们了解如何使用它.
我们将了解如何在SciPy中实现K-Means.
我们将看到每个导入函数的实现和用法.
来自SciPy.cluster.vq import kmeans,vq,whiten
我们必须模拟一些数据来探索聚类.
from numpy import vstack,array from numpy.random import rand # data generation with three features data = vstack((rand(100,3) + array([.5,.5,.5]),rand(100,3)))
现在,我们必须检查数据.上述程序将生成以下输出.
array([[ 1.48598868e+00, 8.17445796e-01, 1.00834051e+00], [ 8.45299768e-01, 1.35450732e+00, 8.66323621e-01], [ 1.27725864e+00, 1.00622682e+00, 8.43735610e-01], …………….
基于每个特征标准化一组观测值.在运行K-Means之前,重新调整观测集的每个特征维度是有益的.每个特征除以所有观察值的标准偏差,得出单位方差.
我们必须使用以下内容用于白化数据的代码.
# whitening of data data = whiten(data)
现在让我们使用以下代码计算具有三个聚类的K-Means.
# computing K-Means with K = 3 (2 clusters) centroids,_ = kmeans(data,3)
上述代码执行K-Means一组观察向量形成K簇. K-Means算法调整质心,直到不能进行足够的进展,即失真的变化,因为最后一次迭代小于某个阈值.在这里,我们可以通过使用下面给出的代码打印质心变量来观察聚类的质心.
print(centroids)
以上代码将生成以下输出.
print(centroids)[ [ 2.26034702 1.43924335 1.3697022 ] [ 2.63788572 2.81446462 2.85163854] [ 0.73507256 1.30801855 1.44477558] ]
使用以下方法为群集分配每个值下面给出的代码.
#将每个样本分配给一个簇 clx,_ = vq(data,centroids)
vq 函数将'M'中的每个观察向量与'N' obs 数组中的质心进行比较将观察分配给最近的群集.它返回每个观察的簇和失真.我们也可以检查失真.让我们使用以下代码检查每个观察的聚类.
#检查观察集群 print clx
上面的代码将生成以下输出.
array([1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 2, 0, 2, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 1, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], dtype=int32)
不同的值0,1, ab的2 ove数组表示簇.