聚类是将数据集分为由相似数据点组成的组的过程。例如, 将物品安排在购物中心中。同一组中的数据点必须尽可能相同, 并且必须与其他组不同。聚类有两种类型, 分别是:
- 中央
- 层次结构
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均值模型生成码本以及通过将它们与码本中的质心进行比较来量化向量的功能。
Function | Description |
---|---|
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-means算法将一组观察结果分类为k个聚类。 |
SciPy中的K-Means实现
在这里, 我们将了解SciPy中K- means的实现
导入K均值
以下语句用于实现K-means算法:
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 ]]
来源:
https://www.srcmini02.com/31055.html