scipy.cluster.vq.kmeans的使用

scipy.cluster.vq.kmeans(obs, k_or_guess, iter=20, thresh=1e-05, check_finite=True)
对形成k个群集的一组观察向量执行k均值。

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

参数

  1. obs
    M×N阵列的每一行都是观察向量。 列是每次观察期间看到的特征。 必须先使用whiten将特征增白。
  2. k_or_guess
    生成的质心数。 将代码分配给每个质心,这也是质心在生成的code_book矩阵中的行索引。
    通过从观察矩阵中随机选择观察值来选择初始k重心。 可替代地,将k乘以N数组指定初始的k个质心。
  3. iter
    运行k均值的次数,返回具有最低失真的代码本。 如果为k_or_guess参数的数组指定了初始质心,则将忽略此参数。 此参数不代表k均值算法的迭代次数。
  4. thresh
    如果自上次k均值迭代以来失真的变化小于或等于阈值,则终止k均值算法。
  5. check_finite
    是否检查输入矩阵仅包含有限数。 禁用可能会提高性能,但是如果输入中确实包含无穷大或NaN,则可能会导致问题(崩溃,终止)。 默认值:True

返回值

  1. codebook
    由k个质心组成的k x N数组。 第i个质心代码簿[i]用代码i表示。 生成的质心和代码表示所看到的最低失真,而未必是全局最小失真。
  2. distortion
    通过的观测值与生成的质心之间的平均(非平方)欧氏距离。 请注意,在k均值算法的上下文中,失真的标准定义有所不同,即平方距离的总和。
import numpy as np
from scipy.cluster.vq import vq, kmeans, whiten
import matplotlib.pyplot as plt

features = np.array([[1.9,2.0],
                     [1.7,2.5],
                     [1.6,3.1],
                     [0.1,0.1],
                     [0.8,0.3],
                     [0.4,0.3],
                     [0.22,0.1],
                     [0.4, 0.3],
                     [0.4,0.5],
                     [1.8,1.9]])

wf = whiten(features)
print("whiten features: \n", wf)

book = np.array((wf[0], wf[1]))

codebook, distortion = kmeans(wf, book)
# 可以写kmeans(wf,2), 2表示两个质心,同时启用iter参数
print("codebook:", codebook)
print("distortion: ", distortion)

plt.scatter(wf[:,0], wf[:,1])
plt.scatter(codebook[:, 0], codebook[:, 1], c='r')
plt.show()

在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值