- SciPy 教程
- SciPy - 首页
- SciPy - 简介
- SciPy - 环境搭建
- SciPy - 基本功能
- SciPy - 聚类
- SciPy - 常量
- SciPy - FFTpack
- SciPy - Integrate
- SciPy - Interpolate
- SciPy - 输入和输出
- SciPy - Linalg
- SciPy - Ndimage
- SciPy - Optimize
- SciPy - Stats
- SciPy - CSGraph
- SciPy - Spatial
- SciPy - ODR
- SciPy - Special 包
- SciPy 有用资源
- SciPy - 参考
- SciPy - 快速指南
- SciPy - 有用资源
- SciPy - 讨论
SciPy - 聚类
K均值聚类是一种用于在未标记数据集中查找聚类和聚类中心的方法。直观地,我们可以将聚类理解为——包含一组数据点,这些数据点之间的距离相对于该聚类外部点的距离来说较小。给定一组初始的K个中心,K均值算法迭代执行以下两个步骤:
对于每个中心,识别出训练点(其聚类)的子集,该子集比任何其他中心更靠近它。
计算每个聚类中数据点每个特征的均值,并且该均值向量成为该聚类的新的中心。
这两个步骤被迭代执行,直到中心不再移动或分配不再改变。然后,一个新的点x可以被分配到最接近原型的聚类。SciPy库通过cluster包提供了K均值算法的一个很好的实现。让我们了解如何使用它。
SciPy中的K均值实现
我们将了解如何在SciPy中实现K均值。
导入K均值
我们将看到每个导入函数的实现和用法。
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均值之前,最好通过白化重新缩放观测集的每个特征维度。每个特征除以其在所有观测值上的标准差,以使其具有单位方差。
对数据进行白化
我们必须使用以下代码对数据进行白化。
# whitening of data data = whiten(data)
使用三个聚类计算K均值
现在让我们使用以下代码使用三个聚类计算K均值。
# computing K-Means with K = 3 (2 clusters) centroids,_ = kmeans(data,3)
上述代码对形成K个聚类的一组观测向量执行K均值。K均值算法调整质心,直到无法取得足够的进展,即自上次迭代以来的失真变化小于某个阈值。在这里,我们可以通过使用下面给出的代码打印centroids变量来观察聚类的质心。
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函数将'M'乘以'N'的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表示聚类。
广告