scipy.cluster.vq.kmeans() 和 scipy.cluster.vq.kmeans2() 方法之间有什么区别?


scipy.cluster.vq() 包含两种实现 k 均值聚类的方法,即 kmeans() 和 kmeans2()。这两种方法的工作方式存在显著差异。让我们来了解一下:

  • scipy.cluster.vq.kmeans(obs, k_or_guess, iter=20, thresh=1e-05, check_finite=True) - kmeans() 方法通过对一组观测向量执行 k 均值算法来形成 k 个聚类。为了确定质心的稳定性,该方法使用阈值来比较观测值与其相应质心之间平均欧几里德距离的变化。该方法的输出是一个代码本,用于映射质心到代码,反之亦然。

  • scipy.cluster.vq.kmeans2(data, k, iter=10, thresh=1e-05, minit='random', missing='warn', check_finite=True) - kmeans2() 方法通过执行 k 均值算法将一组观测向量分类到 k 个聚类中。与 kmeans() 方法不同,kmeans2() 方法不使用阈值来检查收敛性。kmeans2() 的参数也比 kmeans() 方法多。它有额外的参数来决定质心的初始化方法、处理空聚类以及验证输入矩阵是否只包含有限数字。

示例

使用 kmeans() 方法计算 K 均值:

#importing the required Python libraries:
import numpy as np
from numpy import vstack,array
from numpy.random import rand
from scipy.cluster.vq import whiten, kmeans, vq

#Random data generation:
data = vstack((rand(200,2) + array([.5,.5]),rand(150,2)))

#Normalizing the data:
data = whiten(data)

# computing K-Means with kmeans() method
centroids, mean_value = kmeans(data, 3)
print("Code book :
", centroids, "
") print("Mean of Euclidean distances :", mean_value.round(4))

输出

Code book :
[[2.45420231 3.19421081]
[2.77295342 1.74582367]
[0.99156276 1.35546602]]

Mean of Euclidean distances : 0.791

对相同的数组数据使用 kmeans2() 方法计算 K 均值:

#importing the required Python libraries:
import numpy as np
from numpy import vstack,array
from numpy.random import rand
from scipy.cluster.vq import whiten, kmeans2

#Random data generation:
data = vstack((rand(200,2) + array([.5,.5]),rand(150,2)))

#Normalizing the data:
data = whiten(data)

# computing K-Means with kmeans2() method
centroids, clusters = kmeans2(data, 3, minit='random')
print("Code book :
", centroids, "
") print(("Clusters :", clusters))

输出

Code book :
[[3.07353603 2.71692674]
[1.07148876 0.74285308]
[1.64579292 2.29821454]]

('Clusters :', array([2, 0, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0,
2, 2, 1, 2, 2, 2, 0, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0, 2, 2,
0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 0,
0, 0, 2, 2, 0, 2, 0, 0, 0, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 2,
2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 2, 2, 0,
2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 2, 0, 0, 2, 0,
2, 0, 2, 0, 0, 2, 2, 0, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0,
2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0,
2, 0, 0, 2, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 2, 0,
2, 0, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1,
2, 2, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1,
1, 2, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 2, 2,
1, 2, 1, 0, 2, 2, 2, 1, 2, 2, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1,
2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2,
1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 2,
2, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1],
dtype=int32))

更新于:2021年11月24日

419 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告