scipy.cluster.vq 模块的哪个函数用于将码本中的代码分配给观察?
在实现 k-means 算法之前,scipy.cluster.vq.vq(obs, code_book, check_finite = True)用于为码本中的每个观察分配代码。它首先将 'M' by 'N' obs 数组中的每个观察向量与码本中的质心进行比较。比较后,它将代码分配给最近的质心。它需要 obs 数组中的单位方差特征,我们可以通过将它们传递给scipy.cluster.vq.whiten(obs, check_finite = True)函数来实现。
参数
下面给出了函数scipy.cluster.vq.vq(obs, code_book, check_finite = True) 的参数-
obs− ndarray
它是一个由 'N' 组成的 'M' 数组,其中每一行是一个观察值,列是在每次观察过程中看到的特征。示例如下 -
obs = [[ 1., 1., 1.], [ 2., 2., 2.], [ 3., 3., 3.], [ 4., 4., 4.]]
code_book - ndarray
它也是一个 'M' by 'N' 数组,通常使用 k-means 算法生成,其中每一行保存不同的代码,列是该代码的特征。
示例如下 -
code_book = [ [ 1., 2., 3., 4.], [ 1., 2., 3., 4.], [ 1., 2., 3., 4.]]
check_finite - 布尔值,可选
此参数用于检查输入矩阵是否仅包含有限数字。禁用此参数可能会给您带来性能提升,但如果观察确实包含无穷大,它也可能导致一些问题,例如崩溃或非终止。此参数的默认值为True。
退货
代码- ndarray
它返回一个“M”数组,其中包含每个观察的代码簿索引。
dist - ndarray
它还返回每个观察值与其最近代码之间的距离,也称为失真。
示例
import numpy as np from scipy.cluster.vq import vq code_book = np.array([[1.,1.,1.], [2.,2.,2.]]) observations = np.array([[2.9, 1.3, 1.9], [1.7, 3.2, 1.1], [1.0, 0.2, 1.7,]]) vq(observations, code_book)
输出结果
(array([1, 1, 0]), array([1.14455231, 1.52970585, 1.06301458]))