本文简要介绍 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()
相关用法
- Python SciPy vq.kmeans用法及代码示例
- Python SciPy vq.whiten用法及代码示例
- Python SciPy vq.vq用法及代码示例
- Python SciPy interpolate.make_interp_spline用法及代码示例
- Python SciPy stats.anderson用法及代码示例
- Python SciPy ClusterNode.pre_order用法及代码示例
- Python SciPy stats.iqr用法及代码示例
- Python SciPy FortranFile.read_record用法及代码示例
- Python SciPy ndimage.correlate用法及代码示例
- Python SciPy special.exp1用法及代码示例
- Python SciPy special.expn用法及代码示例
- Python SciPy signal.czt_points用法及代码示例
- Python SciPy interpolate.krogh_interpolate用法及代码示例
- Python SciPy ndimage.morphological_gradient用法及代码示例
- Python SciPy distance.sokalmichener用法及代码示例
- Python SciPy linalg.eigvalsh_tridiagonal用法及代码示例
- Python SciPy linalg.cdf2rdf用法及代码示例
- Python SciPy csc_array.diagonal用法及代码示例
- Python SciPy fft.idctn用法及代码示例
- Python SciPy linalg.LaplacianNd用法及代码示例
- Python SciPy linalg.solve_circulant用法及代码示例
- Python SciPy hierarchy.ward用法及代码示例
- Python SciPy signal.chirp用法及代码示例
- Python SciPy stats.genpareto用法及代码示例
- Python SciPy ndimage.variance用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.cluster.vq.kmeans2。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。