gpt4 book ai didi

matlab - 如何理解Matlab内置函数 "kmeans"?

转载 作者:行者123 更新时间:2023-11-30 09:01:30 24 4
gpt4 key购买 nike

假设我有一个矩阵A,其大小为2000*1000 double。然后我申请Matlab 将函数“kmeans”构建到矩阵A

k = 8;
[idx,C] = kmeans(A, k, 'Distance', 'cosine');

我得到C = 8*1000 double; idx = 2000*1 double,取值范围为1到8;根据文档,C 返回 k-by-p (8 by 1000) 矩阵中的 k 个簇质心位置。 idx 返回一个包含每个观测值的聚类索引的 n×1 向量。我的问题是:

1)我不知道如何理解C,质心位置。位置应该表示为 (x,y),对吧?如何正确理解矩阵C

2) 最终中心c1, c2,...,ck 是什么?它们只是值(value)或位置吗?

3)对于每个簇,如果我只想得到最接近这个簇中心的向量,如何计算和获取?

谢谢!

最佳答案

在回答这三个部分之前,我将先解释一下 MATLAB 的 k 均值解释 ( http://www.mathworks.com/help/stats/kmeans.html ) 中使用的语法。

  • A 是您的数据矩阵(在链接中表示为 X)。有 n 行(在本例中为 2000),代表您拥有的观察/数据点的数量。还有 p 列(在本例中为 1000),表示每个数据点具有的“特征”数量。例如,如果您的数据由 2D 点组成,则 p 将等于 2。
  • k 是要将数据分组到的簇数。根据您提供的 C 维度,k 必须为 8。

现在我将回答三个部分:

  1. C 矩阵的维度为 k x p。每行代表一个质​​心。质心位置根本不必是 (x, y)。质心位置的尺寸等于p。换句话说,如果有 2D 点,则可以将质心绘制为 (x, y)。如果您有 3D 点,您可以将质心绘制为 (x, y, z)。由于 A 中的每个数据点都有 1000 个特征,因此您的质心有 1000 个维度。
  2. 如果不知道您的数据到底是什么,这有点难以解释。质心当然不仅仅是值,而且也不一定是位置。如果您的数据 A 是坐标点,您当然可以将质心表示为位置。然而,我们可以更普遍地看待它。如果您有一个聚类质心 i 以及与该质心分组的数据点 v,则质心将表示与其聚类中的数据点最相似的数据点。希望这是有道理的,如有必要,我可以给出更清晰的解释。
  3. k-means 方法实际上为我们提供了实现这一目标的好方法。该函数实际上有 4 个可能的输出,但我将重点关注第 4 个,我将其称为 D:

    [idx,C,sumd,D] = kmeans(A, k, 'Distance', 'cosine');

    D 的尺寸为 n x k。对于数据点 iD 矩阵中的行 i 给出了从该点到每个质心的距离。因此,对于每个质心,您只需找到最接近该质心的数据点,并返回相应的数据点。如果您需要,我可以提供简短的代码。

另外,只是一个提示。您可能应该使用 kmeans++ 方法来初始化质心。它更快而且通常更好。您可以使用以下方式调用它:

[idx,C,sumd,D] = kmeans(A, k, 'Distance', 'cosine', 'Start', 'plus');

编辑:

以下是第 3 部分所需的代码:

[~, min_idxs] = min(D, [], 1);
closest_vecs = A(min_idxs, :);

closest_vecs 的每一行 i 都是最接近质心 i 的向量。

关于matlab - 如何理解Matlab内置函数 "kmeans"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31844108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com