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


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


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

用法:

scipy.cluster.vq.kmeans(obs, k_or_guess, iter=20, thresh=1e-05, check_finite=True, *, seed=None)#

对形成 k 个簇的一组观察向量执行 k-means。

k-means 算法将观测值的分类调整为聚类并更新聚类质心,直到质心的位置在连续迭代中稳定。在该算法的实现中,通过将观测值与其对应的质心之间的平均欧几里得距离变化的绝对值与阈值进行比较来确定质心的稳定性。这产生了将质心映射到代码的代码簿,反之亦然。

参数

obs ndarray

M×N 数组的每一行都是一个观察向量。列是每次观察期间看到的特征。必须首先使用 whiten 函数对特征进行白化。

k_or_guess int 或 ndarray

要生成的质心数。为每个质心分配一个代码,这也是该质心在生成的code_book 矩阵中的行索引。

通过从观察矩阵中随机选择观察值来选择初始 k 个质心。或者,通过 N 数组传递 k 指定初始 k 质心。

iter 整数,可选

运行k-means的次数,返回失真最低的码本。如果使用 k_or_guess 参数的数组指定初始质心,则忽略此参数。该参数不代表k-means算法的迭代次数。

thresh 浮点数,可选

如果自上次 k-means 迭代以来的失真变化小于或等于阈值,则终止 k-means 算法。

check_finite 布尔型,可选

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

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

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

返回

codebook ndarray

由 k 个质心组成的 k × N 数组。第 i 个质心 codebook[i] 用代码 i 表示。生成的质心和代码代表看到的最低失真,不一定是全局最小失真。请注意,质心的数量不一定与 k_or_guess 参数相同,因为在迭代期间会删除分配给无观测值的质心。

distortion 浮点数

通过的观测值和生成的质心之间的平均(非平方)欧几里得距离。请注意与k-means 算法上下文中失真的标准定义的差异,它是距离平方和。

注意

要获得更多函数或最佳性能,您可以使用 sklearn.cluster.KMeansThis 是多个实现的基准测试结果。

例子

>>> import numpy as np
>>> from scipy.cluster.vq import vq, kmeans, whiten
>>> import matplotlib.pyplot as plt
>>> features  = np.array([[ 1.9,2.3],
...                       [ 1.5,2.5],
...                       [ 0.8,0.6],
...                       [ 0.4,1.8],
...                       [ 0.1,0.1],
...                       [ 0.2,1.8],
...                       [ 2.0,0.5],
...                       [ 0.3,1.5],
...                       [ 1.0,1.0]])
>>> whitened = whiten(features)
>>> book = np.array((whitened[0],whitened[2]))
>>> kmeans(whitened,book)
(array([[ 2.3110306 ,  2.86287398],    # random
       [ 0.93218041,  1.24398691]]), 0.85684700941625547)
>>> codes = 3
>>> kmeans(whitened,codes)
(array([[ 2.3110306 ,  2.86287398],    # random
       [ 1.32544402,  0.65607529],
       [ 0.40782893,  2.02786907]]), 0.5196582527686241)
>>> # Create 50 datapoints in two clusters a and b
>>> pts = 50
>>> rng = np.random.default_rng()
>>> a = rng.multivariate_normal([0, 0], [[4, 1], [1, 4]], size=pts)
>>> b = rng.multivariate_normal([30, 10],
...                             [[10, 2], [2, 1]],
...                             size=pts)
>>> features = np.concatenate((a, b))
>>> # Whiten data
>>> whitened = whiten(features)
>>> # Find 2 clusters in the data
>>> codebook, distortion = kmeans(whitened, 2)
>>> # Plot whitened data and cluster centers in red
>>> plt.scatter(whitened[:, 0], whitened[:, 1])
>>> plt.scatter(codebook[:, 0], codebook[:, 1], c='r')
>>> plt.show()
scipy-cluster-vq-kmeans-1.png

相关用法


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