Matlab 中用于聚类的确定性函数
deterministic function in Matlab for clustering
我一直在使用 Matlab 内置的 kmeans 函数进行聚类。由于算法中使用的随机性,如果我设置不同的种子,结果会有所不同。这有点烦人。有没有办法减少聚类结果的差异?或者,Matlab 中是否有用于聚类的确定性函数?
这是正常的。
k-average 算法在每次迭代后创建新的 类,因此结果可能不同。
例如:算法是判断哪个水果是苹果,哪个是梨。它可以将苹果分类为梨,但是所有的苹果都是梨,而所有的梨都是苹果。
如果你有图像处理工具箱,有使用 Otsu 方法的工具,它是确定性的
https://en.wikipedia.org/wiki/Otsu's_method
如果 datain 是您的输入数据:
对于 2 类:
threshold = graythresh(datain);
threshold = 将数据拆分为2类的阈值,归一化为[0,1]
对于多个 类:
thresholds = multithresh(datain,N);
N = 阈值数
thresholds = 1xN 阈值向量(未归一化)
我想出了一些方法来减少聚类结果的差异。
- 将 'OnlinePhase'、'on' 放入 kmeans 的参数中。这将导致局部最小值通常是全局最小值。
- 将'Replicates', 5 放入参数中。这里 5 可以用更大的数字代替。它要求 Matlab 做 5 次 kmeans 并选择最好的结果。
- 将'MaxIter', 1000 放入参数中。这会将最大迭代次数从默认的 100 增加到 1000,这可以但不太可能提高准确性。
只要我们以 kmeans 的最佳结果为目标,我们就更有可能获得一致的结果。
我一直在使用 Matlab 内置的 kmeans 函数进行聚类。由于算法中使用的随机性,如果我设置不同的种子,结果会有所不同。这有点烦人。有没有办法减少聚类结果的差异?或者,Matlab 中是否有用于聚类的确定性函数?
这是正常的。 k-average 算法在每次迭代后创建新的 类,因此结果可能不同。 例如:算法是判断哪个水果是苹果,哪个是梨。它可以将苹果分类为梨,但是所有的苹果都是梨,而所有的梨都是苹果。
如果你有图像处理工具箱,有使用 Otsu 方法的工具,它是确定性的
https://en.wikipedia.org/wiki/Otsu's_method
如果 datain 是您的输入数据:
对于 2 类:
threshold = graythresh(datain);
threshold = 将数据拆分为2类的阈值,归一化为[0,1]
对于多个 类:
thresholds = multithresh(datain,N);
N = 阈值数
thresholds = 1xN 阈值向量(未归一化)
我想出了一些方法来减少聚类结果的差异。
- 将 'OnlinePhase'、'on' 放入 kmeans 的参数中。这将导致局部最小值通常是全局最小值。
- 将'Replicates', 5 放入参数中。这里 5 可以用更大的数字代替。它要求 Matlab 做 5 次 kmeans 并选择最好的结果。
- 将'MaxIter', 1000 放入参数中。这会将最大迭代次数从默认的 100 增加到 1000,这可以但不太可能提高准确性。
只要我们以 kmeans 的最佳结果为目标,我们就更有可能获得一致的结果。