SciPy Cluster SciPy的基本功能 SciPy常量 K均值聚类 是一种在一组未标记数据中查找聚类和聚类中心的方法。直觉上,我们可以将一个群集看作 - 包含一组数据点,其点间距离与群集外点的距离相比较小。给定一个K中心的初始集合,K均值算法重复以下两个步骤 - 对于每个中心,比其他中心更接近它的训练点的子集(它的聚类)被识别出来。 计算每个聚类中数据点的每个要素的平均值,并且此平均向量将成为该聚类的新中心。 重复这两个步骤,直到中心不再移动或分配不再改变。然后,可以将新点 x 分配给最接近的原型的群集。SciPy库通过集群包提供了K- Means算法的良好实现。让我们了解如何使用它。 K-Means在SciPy中的实现 我们将理解如何在SciPy中实现K-Means。 导入K-Means 我们将看到每个导入函数的实现和用法。 from 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均值 现在让我们使用以下代码计算三个群集的K均值。 # computing K-Means with K = 3 (2 clusters) centroids,_ = kmeans(data,3) 上述代码对形成K个簇的一组观测向量执行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] ] 使用下面给出的代码将每个值分配给一个集群。 # assign each sample to a cluster clx,_ = vq(data,centroids) 该 VQ 功能由“N”每个观测矢量中的“M”进行比较 OBS 与质心阵列和分配观测到最接近的簇。它返回每个观察和失真的聚类。我们也可以检查失真。让我们使用下面的代码检查每个观察的聚类。 # check clusters of observation 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,2表示簇。 SciPy的基本功能 SciPy常量