当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy vq.kmeans2用法及代码示例


本文简要介绍 python 语言中 scipy.cluster.vq.kmeans2 的用法。

用法:

scipy.cluster.vq.kmeans2(data, k, iter=10, thresh=1e-05, minit='random', missing='warn', check_finite=True, *, seed=None)#

使用 k-means 算法将一组观测值分类为 k 个集群。

该算法试图最小化观测值和质心之间的欧几里得距离。包括几个初始化方法。

参数

data ndarray

“N”维中“M”个观测值的“M”乘“N”个数组或“M”个一维观测值的长度“M”个数组。

k int 或 ndarray

要形成的簇数以及要生成的质心数。如果 minit 初始化字符串是 ‘matrix’,或者如果给出了 ndarray,则将其解释为要使用的初始集群。

iter 整数,可选

要运行的k-means 算法的迭代次数。请注意,从 iters 参数到 kmeans 函数的含义不同。

thresh 浮点数,可选

(尚未使用)

minit str,可选

初始化方法。可用的方法是‘random’, ‘points’、‘++’和‘matrix’:

‘random’:从高斯生成 k 个质心,并根据数据估计均值和方差。

‘points’:从初始质心的数据中随机选择 k 个观测值(行)。

‘++’:根据 kmeans++ 方法选择 k 个观测值(小心播种)

‘matrix’:将 k 参数解释为初始质心数组的 k × M(或一维数据的长度 k 数组)数组。

missing str,可选

处理空簇的方法。可用的方法有‘warn’和‘raise’:

‘warn’:发出警告并继续。

‘raise’:引发ClusterError并终止算法。

check_finite 布尔型,可选

是否检查输入矩阵是否仅包含有限数。禁用可能会提高性能,但如果输入确实包含无穷大或 NaN,则可能会导致问题(崩溃、非终止)。默认值:真

seed {无,int, numpy.random.Generator numpy.random.RandomState },可选

用于初始化伪随机数生成器的种子。如果种子是无(或numpy.random), 这numpy.random.RandomState使用单例。如果种子是一个 int,一个新的RandomState使用实例,播种种子.如果种子已经是一个Generator或者RandomState实例然后使用该实例。默认值为无。

返回

centroid ndarray

在 k-means 的最后一次迭代中发现的由“N”个质心数组组成的 ‘k’。

label ndarray

label[i] 是第 i 个观测值最接近的质心的代码或索引。

参考

[1]

D. Arthur 和 S. Vassilvitskii,“k-means++:仔细播种的优势”,第十八届年度ACM-SIAM 离散算法研讨会论文集,2007 年。

例子

>>> from scipy.cluster.vq import kmeans2
>>> import matplotlib.pyplot as plt
>>> import numpy as np

创建 z,一个形状为 (100, 2) 的数组,其中包含来自三个多元正态分布的样本的混合。

>>> rng = np.random.default_rng()
>>> a = rng.multivariate_normal([0, 6], [[2, 1], [1, 1.5]], size=45)
>>> b = rng.multivariate_normal([2, 0], [[1, -1], [-1, 3]], size=30)
>>> c = rng.multivariate_normal([6, 4], [[5, 0], [0, 1.2]], size=25)
>>> z = np.concatenate((a, b, c))
>>> rng.shuffle(z)

计算三个集群。

>>> centroid, label = kmeans2(z, 3, minit='points')
>>> centroid
array([[ 2.22274463, -0.61666946],  # may vary
       [ 0.54069047,  5.86541444],
       [ 6.73846769,  4.01991898]])

每个集群有多少个点?

>>> counts = np.bincount(label)
>>> counts
array([29, 51, 20])  # may vary

绘制集群。

>>> w0 = z[label == 0]
>>> w1 = z[label == 1]
>>> w2 = z[label == 2]
>>> plt.plot(w0[:, 0], w0[:, 1], 'o', alpha=0.5, label='cluster 0')
>>> plt.plot(w1[:, 0], w1[:, 1], 'd', alpha=0.5, label='cluster 1')
>>> plt.plot(w2[:, 0], w2[:, 1], 's', alpha=0.5, label='cluster 2')
>>> plt.plot(centroid[:, 0], centroid[:, 1], 'k*', label='centroids')
>>> plt.axis('equal')
>>> plt.legend(shadow=True)
>>> plt.show()
scipy-cluster-vq-kmeans2-1.png

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.cluster.vq.kmeans2。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。