SciPy 教程-SciPy 聚类

聚类是将数据集划分为包含相似数据点的组的过程。例如,购物商场中的物品是如何排列的。同一组中的数据点应尽可能相同,并且应与其他组不同。有两种类型的聚类,分别是:
- 中心型
- 层次型
k-均值聚类算法是一个简单的无监督算法,用于预测未标记数据集中的分组。预测基于存在的聚类中心数量(k)和最近的平均值(以观测值之间的欧几里得距离计算)。
K-均值算法
步骤如下,假设我们有输入 x1, x2, x3,....xn 数据和 K 值。
步骤 - 1:
选择 K 个随机点作为聚类中心,称为质心。假设这些是 c1, c2, ...ck,可以写成如下:
c1,c2,...ck
C 是所有质心的集合。
步骤-2:
通过计算其欧几里得(L2)距离,将每个输入值 xi 分配给最近的中心。
步骤-3:
在这一步中,我们通过计算分配给该聚类的所有点的平均值来获得新的质心。
步骤-4:
重复步骤 2 和 3,直到没有任何聚类保持不稳定。
K-均值聚类和向量量化 (scipy.cluster.vq)
SciPy 提供了用于 K-均值聚类的函数,从 k-均值模型生成码本,以及通过将向量与码本中的质心进行比较来量化向量。
函数 | 描述 |
---|---|
scipy.cluster.vq.whiten(obs, check_finite=True ) | 它标准化一组特征上的观测值。 |
scipy.cluster.vq.vq(obs, code_book,check_finite=True) | 它将观测值分配给码本中的代码。 |
scipy.cluster.vq.kmeans(obs, k_or_guess, iter=20, thresh=1e-05, check_finite=True) | 它在一组观测向量上执行 k-均值,形成 k 个聚类。 |
scipy.cluster.vq.kmeans2(data,k,iter=10, thresh=1e-05, minit='random', missing='warn', check_finite=True) | 它使用 k-均值算法将一组观测值分类为 k 个聚类。 |
SciPy 中的 K-均值实现
这里,我们将了解 SciPy 中 K-均值的实现
导入 K-均值
使用以下语句实现 K-均值算法:
from SciPy.cluster.vq import kmeans,vq,white
计算三个聚类的 K-均值
K-均值算法反复迭代,调整质心,直到无法在失真方面进行必要的进展,因为自上次迭代以来的变化小于某个阈值。考虑以下示例:
from numpy import vstack,array
from numpy.random import rand
from scipy.cluster.vq import kmeans,vq,whiten
# data generation with three features
data1 = vstack((rand(100,3) + array([.5,.5,.5]),rand(100,3)))
# whitening of data
data1 = whiten(data)
# computing K-Means with clusters
centroids,_ = kmeans(data1,3)
print(centroids)
输出:
[[1.97955982 1.78985952 1.51775359]
[2.6926236 2.70116313 2.75279787]
[0.84636826 0.93081751 1.0708057 ]]