(Matlab实现)K-means算法及最佳聚类数目的确定

2023-10-27

目录

摘要:

1.K-means算法

2.Calinski-Harabasz Criterion(卡林斯基-哈拉巴斯指标,CH值)

3.Davies-Bouldin Criterion(戴维斯-博尔丁指标,DB值)

4.Gap Value(Gap值)

5.Silhouette Coefficient(轮廓系数)

6.基于Matlab的K-means聚类及最佳聚类数选取结果:

各种指标评价图像:

K-means聚类结果可视化:

7.Matlab程序实现:


摘要:

Kmeans算法中,K值所决定的是在该聚类算法中,所要分配聚类的簇的多少。Kmeans算法对初始值是⽐较敏感的,对于同样的k值,选取的点不同,会影响算法的聚类效果和迭代的次数。本文通过计算原始数据中的:CH值、DB值、Gap值、轮廓系数,四种指标来衡量K-means的最佳聚类数目,并使用K-means进行聚类,最后可视化聚类的结果。

1.K-means算法

k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。

K-means的计算步骤:

2.Calinski-Harabasz Criterion(卡林斯基-哈拉巴斯指标,CH值)

卡林斯基-哈拉巴斯准则有时被称为方差比准则(VRC)。卡林斯基-哈拉巴斯指数定义为

其中,SSB是总体簇间方差,SSW是总体簇内方差,k是簇数,N是观测数。

定义良好的簇具有较大的簇间方差(SSB)和较小的簇内方差(SSW)。VRCk比率越大,数据分区越好。要确定最佳聚类数,最大化关于k的VRCk。最佳聚类数对应于具有最高卡林斯基-哈拉巴斯指数值的解。

卡林斯基-哈拉巴斯准则最适合于具有平方欧几里德距离的k均值聚类解。

3.Davies-Bouldin Criterion(戴维斯-博尔丁指标,DB值)

Davies-Bouldin 准则基于聚类内距离和聚类间距离的比率。戴维斯-博尔丁指数定义为:

其中,Di,j是第i个和第j个簇的簇内到簇间距离比。在数学上:

di是第i个簇中每个点与第i个簇的质心之间的平均距离。dj是第j个簇中每个点与第j个簇的质心之间的平均距离。dij是第i个和第j个簇的质心之间的欧氏距离

Dij的最大值表示簇i的最坏簇内-簇间比率。最优聚类解决方案具有最小的Davies Bouldin指数值。

4.Gap Value(Gap值)

一个常见的聚类评估的图形方法是将误差测量值与几个建议的聚类数量作对比,并找出这个图形的 "肘部"。肘部 "出现在误差测量的最大幅度下降处。差距标准通过将 "肘部 "的位置估计为具有最大差距值的聚类的数量来正式确定这一方法。因此,在差距准则下,最佳的集群数量对应于在一个容忍范围内具有最大的局部或整体差距值的解决方案。具体公式如下:

其中,n是样本量,k是被评估的聚类数量,Wk是聚类内分散度的集合测量。

5.Silhouette Coefficient(轮廓系数)

每个点的轮廓系数是衡量该点与同一聚类中的其他点的相似程度,与其他聚类的点相比。第i个点的轮廓系数si定义为:

其中,ai是第i个点到与i相同聚类中其他点的平均距离,bi是第i个点到不同聚类中的点的最小平均距离,在聚类中最小。如果第i点是其聚类中唯一的点,那么轮廓系数si被设置为1。

轮廓系数的范围从-1到1。一个高的轮廓系数表明该点与它自己的聚类匹配良好,而与其他聚类匹配较差。如果大多数点有一个高的轮廓系数,那么聚类方案是合适的。如果许多点的轮廓系数较低或为负值,那么聚类方案可能有太多或太少的聚类。

可以用轮廓系数作为任何距离指标的聚类评估标准。

6.基于Matlab的K-means聚类及最佳聚类数选取结果:

各种指标评价图像:

K-means聚类结果可视化:

7.Matlab程序实现:

部分代码:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(Matlab实现)K-means算法及最佳聚类数目的确定 的相关文章

  • KMeans 对不平衡数据进行聚类

    我有一组包含 50 个特征 c1 c2 c3 的数据 行数超过 80k 每行包含标准化数值 范围 0 1 它实际上是一个标准化的虚拟变量 其中一些行只有很少的特征 3 4 即如果没有值则分配 0 大多数行大约有 10 20 个特征 我使用
  • 如何正确从表中删除 NaN 值

    在 Matlab 中阅读 Excel 电子表格后 不幸的是 我的结果表中包含了 NaN 例如这个 Excel 表格 将产生此表 其中出现额外的 NaN 列 我尝试使用以下代码片段删除 NaN measurementCells readtab
  • 以 2 为底的矩阵对数

    Logm 取矩阵对数 并且log2 取矩阵每个元素以 2 为底的对数 我正在尝试计算冯 诺依曼熵 它涉及以 2 为底的矩阵对数 我该怎么做呢 如果将 以 2 为底 的矩阵指数定义为B expm log 2 A 或者如果您类似地通过特征分解直
  • 将 Matlab 数组移植到 C/C++

    我正在将 matlab 程序移植到 C C 我有几个问题 但最重要的问题之一是 Matlab 将任何维度的数组都视为相同 假设我们有一个这样的函数 function result f A B C result A 2 B C A B and
  • 在 MATLAB 中绘图后恢复轴

    从文本文件绘制多种方法的输出后 未显示轴的右侧和上侧 我需要拥有它们并将它们加粗 就像当前的轴一样 绘制的数据来自存储每种方法数据的文件 每个数据文件都是一个 256x2 文件 包含 0 1 之间的值 第一列是精度 第二列是召回率 figu
  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得
  • 在 Matlab 中保存 Kinect 深度图像?

    通过使用 Kinect 我可以获得深度图像 其中每个深度图像像素存储相机和物体之间的距离 以毫米为单位 现在我想保存它们以便以后使用 最好的推荐是什么 我正在考虑将深度图像保存为图像 jpg png等 然而 该值通常是从50毫米到10000
  • MATLAB:将当前文件夹设置为脚本位置

    我在不同的文件夹中有一些脚本和数据 我使用addpath和相对路径经常 我的问题是 只有当我的当前文件夹是我执行的脚本所在的位置时 这才有效 例如 如果我执行添加路径 X 的脚本 A 然后执行位于路径 X 中的脚本 B 则 Matlab 不
  • 帮助我理解FFT函数(Matlab)

    1 除了负频率之外 FFT 函数提供的最小频率是多少 是零吗 2 如果它为零 我们如何在对数刻度上绘制零 3 结果总是对称的 或者只是看起来是对称的 4 如果我使用abs fft y 来比较2个信号 我是否会失去一些准确性 1 除了负频率之
  • Matlab:2行10列的子图

    如何在 matlab 中绘制 20 幅图像 2 行 10 列 我知道我必须使用 子图 功能 但我对给出的参数感到困惑 我尝试给予 子图 2 10 行索引 列索引 但它似乎不起作用 请帮忙 的前两个参数subplot函数分别给出图中子图的总行
  • 氡变换线检测

    我正在尝试检测灰度图像中的线条 为此 我在 MATLAB 中使用 Radon 变换 我的 m 文件的示例如下所示 我可以使用此代码检测多行 我还使用线条的移位和旋转属性来绘制线条 但是 我不明白在获取rho和theta值后如何获取检测线的起
  • 使用不同的背景颜色保存 MATLAB 图窗

    我想打印一个带有深色背景和白色标签的 MATLAB 图 如果我使用print or saveas命令我不知何故失去了颜色 绘图符号再次变暗 背景变为白色 points rand 100 3 plot3 points 1 points 2 p
  • MATLAB问题:在图块中引用变量的值[重复]

    这个问题在这里已经有答案了 可能的重复 matlab 绘图标题中的变量 https stackoverflow com questions 5629458 matlab variable in plot title 我想在图中引用 m 文件
  • MATLAB:图像角坐标和引用元胞数组

    我在比较不同元胞数组中的元素时遇到一些问题 这个问题的背景是我正在使用bwboundariesMATLAB 中的函数可追踪图像的轮廓 该图像是结构横截面 我试图找出整个部分是否具有连续性 即 只有一个轮廓由bwboundaries命令 完成
  • matlab中优先级队列的实现方法

    matlab中有没有提供minpriorityqueue功能的库 import java util PriorityQueue import java util public class MyQueue Comparator
  • 如何在matlab中使矩阵图平滑

    就像上图一样 怎样才能让画面更流畅呢 或者缩小y轴的范围 数据来自二维矩阵 然后我用plot data 请随意提出任何想法 平滑线条的一种方法涉及样本点之间数据的非线性插值 当你这样做时plot x y o http www mathwor
  • 计算给出数组中最小标准差的子集

    让我们有一个大小的向量N 例如 x rand N 1 我想计算长度子集的最小标准差K在向量中 When N and K很小 很容易找到最好的子集 因为我可以使用nchoosek N K 枚举所有可能的子集 但是当值N and K比我们说的要
  • 在Matlab图例中使用Latex?

    我的 matlab 不接受我的 Latex 例如 如果我使用legend b 6 rightarrow b 7 它没有向我显示箭头 我该如何解决这个问题 尝试使用 Latex 解释器 例如 legend b 6 rightarrow b 7
  • GO TO 语句 - Fortran 到 Matlab

    我一直在努力将此网格搜索代码从 Fortran 转换为 Matlab 但是我无法正确合并 GO TO 语句 我正在尝试使用 while 循环 但我认为我需要其他东西来结束搜索 任何帮助将不胜感激 vmax 1 0E 15 amax G 1
  • 使用网络计算机进行 Matlab 并行处理

    我熟悉matlabpool and parfor用法 但我仍然需要加快计算速度 我的 1GB 网络中有一台功能更强大的计算机 两台计算机都有 R2010b 并且具有相同的代码和路径 使用两台计算机进行并行计算的最简单方法是什么 我今天使用的

随机推荐