(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算法及最佳聚类数目的确定 的相关文章

  • FFT 的功率谱密度

    我有一段代码可以获取部分信号的 FFT 现在我正在尝试获取 PSD Fs 44100 cj sqrt 1 T 6 dt 1 Fs left test 1 right test 2 time 45 interval 636 w range t
  • 图像堆栈的最大强度投影

    我正在尝试重新创建该功能 max array 3 来自 MatLab 它可以获取 N 个图像的 300x300px 图像堆栈 我在这里说 图像 因为我正在处理图像 实际上这只是一个大的双数组 300x300xN 并创建一个 300x300
  • 如何让MCR启动时间快

    我将 matlab 程序转换为 net 程序集 即 dll 文件 我制作了一个控制台 C 应用程序 添加了 dll 文件并从 php 调用它 每次调用 exe 时都会调用 MCR 如何使 MCR 在服务器启动时初始化 并且即使在一段时间后调
  • Matlab:如何显示数组的“真实”值?

    我有一个在脚本中计算的向量 计算后 我将值显示到命令窗口 显示如下 finalResults 1 0e 05 0 0001 0 0 0005 0 0002 0 0001 0 0027 0 0033 0 0001 0 0000 0 0000
  • 计算数组中接下来的 n 个元素的乘积

    我想计算下一个的乘积n矩阵的相邻元素 号码n要相乘的元素数应在函数的输入中给出 例如 对于此输入 我应该从第一个开始计算每 3 个连续元素的乘积 p ind max product 1 2 2 1 3 1 3 这给出了 1 2 2 2 2
  • 按元素出现的频率对数组元素进行排序

    是否可以在 matlab octave 中使用sort函数根据元素的相对频率对数组进行排序 例如数组 m 4 4 4 10 10 10 4 4 5 应该产生这个数组 5 10 10 10 4 4 4 4 4 5是出现频率较低的元素 位于顶部
  • Matlab Mex文件编译

    我正在尝试编译一个 mex 文件以在 matlab 中使用套接字连接 问题是它总是说我没有安装sdk或编译器 但我已经安装了 Visual Studio 2010 Express Visual Studio 2012 Express Vis
  • MATLAB 滚动图

    我有一个脑电图数据库 我想绘制它 数据库是一个19 1000 134的矩阵 其中 19 是通道数 在第一种方法中 我只使用一个渠道 1000 个样本大小 采样率为 500 Hz 时为 1000 个点 即 2 秒数据 134 epochs的数
  • 为什么旋转 3D 点云后顶点法线会翻转?

    我有两个人脸 3D 点云样本 蓝色点云表示目标面 红色点云表示模板 下图显示目标面和模板面在不同方向上对齐 目标面大致沿 x 轴 模板面大致沿 y 轴 Figure 1 The region around the nose is displ
  • Matlab没有优化以下内容吗?

    我有一个很长的向量 1xrv 和一个很长的向量w1xs 和一个矩阵Arxs 它是稀疏的 但维度非常大 我期望 Matlab 对以下内容进行优化 这样我就不会遇到内存问题 A v w 但看起来 Matlab 实际上是在尝试生成完整的v w矩阵
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • 两个向量之间的欧氏距离(单行矩阵)

    我有两个向量 单行矩阵 假设我们已经知道长度len A x1 x2 x3 x4 x5 B y1 y2 y3 y4 y5 计算它们之间的欧几里德距离最快的方法是什么 我的第一次尝试是 diff A B sum 0 for column 1 l
  • 我需要转义该 MATLAB 字符串中的字符吗?

    我想在 MATLAB 中调用以下 bash 命令 grep Up to test linux vision1 1 log awk print 7 I use system 在MATLAB中 但结果有错误 gt gt status strin
  • matlab中类库的全局变量

    我有一些matlab声明的类 我如何声明所有类中都可见的常量 例如 这些常量可以是在所有类的方法中使用的物理常量 首先想到的是使用全局变量 还有更好的办法吗 最好在单独的文件中声明这些常量 包含常量的类是执行此操作的一种很好的干净方法 请参
  • 如何找到平面和 3d 矩阵之间的交平面

    如果我有一堆图像并且尺寸如下 size M 256 256 124 我有 3 个点 它们的坐标是 coor a 100 100 124 coor b 256 156 0 coor c 156 256 0 如何创建 M 与这 3 个点定义的平
  • 如何使用 MATLAB 的 substruct 函数创建表示使用“end”的引用的结构?

    我想使用substruct http www mathworks com help matlab ref substruct html函数创建一个结构体以供使用subsref 目的是使用索引字符串subsref而不是通常的 符号 因为我正在
  • 如何更改Plotyy第二轴的颜色和字体大小?

    我使用 MATLAB 的plotyy 函数绘制了两条曲线 AX H1 H2 plotyy voltage span amplitude voltage span Ca SR The problem is that I cannot chan
  • 如何在文本集中创建所有字符组合?

    例如 我有这样的文本集 第 1 栏 a b 第 2 栏 l m n 第 3 栏 v w x y 我想将它们组合起来以获得如下输出 alv alw alx aly amv amw amx amy 这将输出 24 种文本组合 如果我只使用前两列
  • 在matlab中绘制给定区域内(两个圆之间)的向量场

    我想在 Matlab 中绘制下面的向量场 u cos x x 0 y y 0 v sin x x 0 y y 0 我可以在网格中轻松完成 例如 x 和 y 方向从 2 到 2 x 0 2 y 0 1 x y meshgrid 2 0 2 2
  • @(t)在Matlab中是什么意思? [复制]

    这个问题在这里已经有答案了 正如标题所示 考虑到下面的上下文 t 在 Matlab 中到底意味着什么 computeNumericalGradient 是一个函数 cofiCostFunc 也是一个接受一堆参数的函数 问题是 t 对 cof

随机推荐