【问题标题】:deterministic function in Matlab for clusteringMatlab中用于聚类的确定性函数
【发布时间】:2019-07-28 09:22:29
【问题描述】:

我一直在使用 Matlab 内置的 kmeans 函数进行聚类。由于算法中使用的随机性,如果我设置不同的种子,结果会有所不同。这有点烦人。有没有办法减少聚类结果的差异?或者,Matlab 中是否有用于聚类的确定性函数?

【问题讨论】:

  • 为什么不直接使用确定性初始化?请参阅手册。
  • @Anony-Mousse 我能想到的唯一方法是使用例如 rng(1) 来设置种子。
  • 这是一个流行的选择,是的。或者使用前k个点。或者通过任何其他方法确定的一组固定的 k 点...

标签: matlab machine-learning cluster-analysis k-means


【解决方案1】:

这很正常。 k-平均算法在每次迭代后创建新的类,因此结果可能不同。 例如:该算法是确定哪个水果是一个有梨的苹果。它可以将一个苹果归类为梨,但是所有的苹果都是梨,而所有的梨都是苹果。

【讨论】:

    【解决方案2】:

    如果你有图像处理工具箱,有使用大津方法的工具,这是确定性的

    https://en.wikipedia.org/wiki/Otsu's_method

    如果 datain 是您的输入数据:

    对于 2 类: threshold = graythresh(datain);

    threshold = 将数据分成2类的阈值,归一化为[0,1]

    对于多个类: thresholds = multithresh(datain,N);

    N = 阈值数

    thresholds = 1xN 阈值向量(未标准化)

    【讨论】:

      【解决方案3】:

      我想出了一些方法来减少聚类结果的差异。

      1. 将 'OnlinePhase','on' 放入 kmeans 的参数中。这将导致局部最小值,通常是全局最小值。
      2. 将 'Replicates', 5 放入参数中。这里 5 可以替换为更大的数字。它要求 Matlab 做 5 次 kmeans 并选择最好的结果。
      3. 将 'MaxIter', 1000 放入参数中。这会将最大迭代次数从默认的 100 增加到 1000,这可以但不太可能提高准确性。

      只要我们以 kmeans 的最佳结果为目标,我们就更有可能获得一致的结果。

      【讨论】:

      • 所以您没有按照评论的建议尝试设置'Start'?它允许您提供种子。这使得算法具有确定性。
      • @CrisLuengo 我可以通过设置“开始”来使其具有确定性。但是,这可能会导致更差的聚类结果。我需要平衡性能和随机性。
      猜你喜欢
      • 2011-10-02
      • 2011-07-18
      • 2018-12-21
      • 2016-08-26
      • 2011-12-22
      • 2013-02-28
      • 2020-06-10
      相关资源
      最近更新 更多