K表示当肘部图是平滑曲线时寻找肘部

2023-12-31

我正在尝试使用以下代码绘制 k 的肘部:

load CSDmat %mydata
for k = 2:20
    opts = statset('MaxIter', 500, 'Display', 'off');
    [IDX1,C1,sumd1,D1] = kmeans(CSDmat,k,'Replicates',5,'options',opts,'distance','correlation');% kmeans matlab
    [yy,ii] = min(D1');      %% assign points to nearest center

    distort = 0;
    distort_across = 0;
    clear clusts;
    for nn=1:k
        I = find(ii==nn);       %% indices of points in cluster nn
        J = find(ii~=nn);       %% indices of points not in cluster nn
        clusts{nn} = I;         %% save into clusts cell array
        if (length(I)>0)
            mu(nn,:) = mean(CSDmat(I,:));               %% update mean
            %% Compute within class distortion
            muB = repmat(mu(nn,:),length(I),1);
            distort = distort+sum(sum((CSDmat(I,:)-muB).^2));
            %% Compute across class distortion
            muB = repmat(mu(nn,:),length(J),1);
            distort_across = distort_across + sum(sum((CSDmat(J,:)-muB).^2));
        end
    end
    %% Set distortion as the ratio between the within
    %% class scatter and the across class scatter
    distort = distort/(distort_across+eps);

        bestD(k)=distort;
        bestC=clusts;
end
figure; plot(bestD);

的价值观bestD(簇内方差/簇间方差)是

[
0.401970132754914
0.193697163350293
0.119427184084282
0.0872681777446508
0.0687948264457301
0.0566215549396577
0.0481117619129058
0.0420491551659459
0.0361696583755145
0.0320384092689509
0.0288948343304147
0.0262373245283877
0.0239462330460614
0.0218350896369853
0.0201506779033703
0.0186757121130685
0.0176258625858971
0.0163239661159014
0.0154933431470081
]

该代码改编自 Lihi Zelnik-Manor,2005 年 3 月,加州理工学院。

簇内方差与簇间方差的绘图比是一条平滑曲线,其拐点像曲线一样平滑,绘图bestD上面给出的数据。我们如何找到此类图的拐点?


我认为最好只使用“类内失真”作为优化参数:

%% Compute within class distortion
muB = repmat(mu(nn,:),length(I),1);
distort = distort+sum(sum((CSDmat(I,:)-muB).^2));

用这个without将该值除以“actor_across”。如果你计算它的“导数”:

unexplained_error = within_class_distortion;
derivative = diff(unexplained_error);
plot(derivative)

导数 (k) 告诉您通过添加新簇,无法解释的误差减少了多少。我建议当此错误的减少量小于您获得的第一次减少量的十倍时,停止添加簇。

for (i=1:length(derivative))
    if (derivative(i) < derivative(1)/10)
         break
    end
end
k_opt = i+1;

事实上,获得最佳簇数的方法取决于应用程序,但我认为您可以使用此建议获得良好的 k 值。

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

K表示当肘部图是平滑曲线时寻找肘部 的相关文章

  • 有没有办法在 MATLAB 中查看 pcode 文件 (.p) 的源代码?

    有没有办法在 MATLAB 中打开 pcode 文件 p 如果 开放 是指edit 那么当然不是 pcode 中的 p 代表 受保护 其主要设计目标是在保护其源代码的同时部署功能组件 如果 开放 是指run 那么当然是的 引用手册 http
  • 图像分析-光纤识别

    我是图像分析新手 您知道如何以仅获取纤维的方式对该图像进行二值化吗 我尝试过不同的阈值技术等 但没有成功 我不介意应该使用什么工具 但我更喜欢 NET or Matlab PS 我不知道该把答案放在哪里 所以我把它放在StackOverfl
  • 使用 Doc2vec 后如何解释 Clusters 结果?

    我正在使用 doc2vec 将关注者的前 100 条推文转换为矢量表示形式 例如 v1 v100 之后 我使用向量表示来进行 K 均值聚类 model Doc2Vec documents t size 100 alpha 035 windo
  • 将此 MATLAB 代码转换为 Python 时我做错了什么?

    我正在努力将生成波形的 MATLAB 代码转换为 Python 就上下文而言 这是原子力显微镜带激发响应的模拟 与代码错误无关 在 MATLAB 中从 r vec 生成的图形与我在 Python 中生成的图形不同 我是否正确地将 MATLA
  • 如何让MCR启动时间快

    我将 matlab 程序转换为 net 程序集 即 dll 文件 我制作了一个控制台 C 应用程序 添加了 dll 文件并从 php 调用它 每次调用 exe 时都会调用 MCR 如何使 MCR 在服务器启动时初始化 并且即使在一段时间后调
  • 计算数组中接下来的 n 个元素的乘积

    我想计算下一个的乘积n矩阵的相邻元素 号码n要相乘的元素数应在函数的输入中给出 例如 对于此输入 我应该从第一个开始计算每 3 个连续元素的乘积 p ind max product 1 2 2 1 3 1 3 这给出了 1 2 2 2 2
  • Matlab - 如果值包含xxx,则删除元胞数组中的行

    在 Matlab 中 如何删除包含变量字符串的元胞数组中的元胞 假设我的元胞数组是 C svnTrunk RadarLib radarlb utilities scatteredInterpolant m C svnTrunk RadarL
  • MATLAB 中最有效的矩阵求逆

    在 MATLAB 中计算某个方阵 A 的逆矩阵时 使用 Ai inv A should be the same as Ai A 1 MATLAB 通常会通知我这不是最有效的求逆方法 那么什么是更有效率的呢 如果我有一个方程系统 可能会使用
  • 在 matlab 中求 3d 峰的体积

    现在我有一个带有峰值的 3D 散点图 我需要找到其体积 我的数据来自图像 因此 x 和 y 值表示 xy 平面上的像素位置 z 值是每个像素的像素值 这是我的散点图 scatter3 x y z 20 z filled 我试图找到数据峰值的
  • Matlab:保存后翻转图例顺序和图例重叠图

    我正在尝试根据以下内容反转我的图例条目顺序matlab条形图中图例颜色的逆序 https stackoverflow com questions 31178005 reverse ordering of legend colors in m
  • 为什么旋转 3D 点云后顶点法线会翻转?

    我有两个人脸 3D 点云样本 蓝色点云表示目标面 红色点云表示模板 下图显示目标面和模板面在不同方向上对齐 目标面大致沿 x 轴 模板面大致沿 y 轴 Figure 1 The region around the nose is displ
  • 使用 MATLAB 进行线路跟踪

    我有一个图像 我想将其转换为逻辑图像 包括线条为黑色 背景为白色 当然 可以使用阈值方法来实现这一点 但我不想使用这种方式来做到这一点 我想通过使用线路跟踪方法或类似的方法来检测它 这是关于视网膜血管检测的 我找到了一个article ht
  • Matlab:如何更改矩阵的存储方式?从 1x1x3 到 1x3?

    我目前有 val 1 0 7216 val 2 0 7216 val 3 0 7216 但我想要 0 7216 0 716 0 721 我可以做什么样的操作来做到这一点 The reshape函数将在这里解决问题 Arrange the e
  • 使用符号求解器仅求解某些变量

    我正在尝试在 MATLAB 中求解包含 3 个变量和 5 个常量的方程组 是否可以使用solve求解三个变量 同时保持常量为符号而不用数值替换它们 当您使用SOLVE http www mathworks com access helpde
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • 黑白随机着色的六角格子

    我正在尝试绘制一个 10 000 x 10 000 随机半黑半白的六边形格子 我不知道如何将该格子的六边形随机填充为黑色和白色 这是我真正想要从这段代码中得到的示例 但我无法做到 https i stack imgur com RkdCw
  • 如何在 matlab 中创建由多个 3d 图像数据数组组成的数组

    我正在阅读 15 张图片imagedata imread imagename jpg 它的大小总是320 by 320 by 3 如何将数据放入数组中 使用 for for 循环 以便在访问新数组的第一个元素时获得输入的第一个图像的 RGB
  • 如何更改Plotyy第二轴的颜色和字体大小?

    我使用 MATLAB 的plotyy 函数绘制了两条曲线 AX H1 H2 plotyy voltage span amplitude voltage span Ca SR The problem is that I cannot chan
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any

随机推荐

  • 视频无法在 iPad/iPhone 上播放

    我正在建立一个网站 daratogaincontrol com 在该网站上 我使用 videolightbox 来播放视频 这些视频无法在 iPad 或 iPhone 上播放 该网站在台式机 Mac 和 PC 上运行良好 videoligh
  • 存储 1 到 1000 素数的链表

    正如您将在以下程序的注释中看到的那样 我应该创建一个列表来存储从 1 到 1000 的所有素数并释放节点 其中只有两个功能是我的工作 然而 我很长时间都没有弄清楚为什么这个程序不能编译 你们看到错误了吗 这是已经交的作业 仅供我个人参考 i
  • 防止创建配置文件

    我正在尝试构建一个包 其中包含一些文件 etc那些不是配置 它们包含在conffiles即使我创建一个空的也自动package conffiles in the debian目录 我怎样才能停下来dh installdeb这样做 我不确定我
  • 在 Eclipse 中设置自定义语法突出显示的快速方法

    我知道我不是第一个需要这个的人 我正在开发一个内部创建的代码库 我想在 Eclipse 中对其应用突出显示 在 Notepad 中 我可以为我正在查看的文件设置语言 有什么办法可以为 Eclipse 做到这一点吗 我正在编写的代码将使用与
  • 如何在 Python 中编写一个函数将 csv 的每一行翻译成另一种语言?

    如何在 Python 中编写一个函数 将 csv 文件的每一行翻译为另一种语言 并使用 pandas 将翻译作为另一列添加到同一 csv 中 我的输入文件如下所示 我希望我的输出是这样的 我是这样开始的 from googletrans i
  • ActionController::UrlGenerationError,没有路由匹配

    我已经阅读了我能找到的所有类似问题 但仍然无法找出我的问题 routes rb Rails application routes draw do resources lists only index show create update d
  • 将装饰器列表应用于可调用对象?

    给定一系列装饰器方法 如何将它们应用于可调用对象 例如 因为 foo bar def baz pass 是相同的 def baz pass baz foo bar baz 人们会假设有一个装饰器列表 foo bar 它们可以应用于baz动态
  • ms-access:数据库引擎找不到输入表或查询

    这是查询 SELECT FROM SELECT Occurrence Number Occurrence Date 1 0 Preanalytical Before Testing Cup Type NULL as 2 0 Analytic
  • 找不到“id”=sign_out 的用户

    我正在 Rails 中使用设备 但现在无法注销我的用户 当我使用 users log out 页面时 出现以下错误 ActiveRecord RecordNotFound in UsersController show Couldn t f
  • 为ggmap创建base_layer无法识别data.frame

    我正在尝试使用 ggmap 在地图上绘制位置 因为我想使用分面 所以我必须提供base layer论证ggmap 我也试图将其包装在一个函数中 我有定义地图边界框的变量 long range lt c 71 5 67 5 lat range
  • cakephp 2.0 smtp 电子邮件

    我正在尝试使用 CakePhp 2 0 发送电子邮件 在我的控制器中我使用这个代码 我知道它很好 我从烹饪书 http book cakephp org 2 0 en core utility libraries email html Ap
  • Python 中从右到左的字符串替换?

    我想在 Python 中进行字符串替换 但只执行从右到左的第一个实例 在理想的世界中我会 myStr mississippi print myStr rreplace iss XXX 1 gt missXXXippi 鉴于此 最好的方法是什
  • Sublime 就像 HTML5 中的多个光标

    您知道如何在浏览器中使用 Sublime 或 Cloud 9 之类的多光标功能吗 我想要多个光标textarea 可能在多个文本区域中 应该可以使用 HTML5 但在网络上没有找到任何内容 谢谢你 正如巴洛普所说王牌编辑有多个光标 如果你想
  • VB6 - Foxpro 2.6 XP 上没有 isam 错误

    老板给了我一些相当古老的遗留代码 全部用 VB6 完成 安装 Visual Studio 6 和其他一些东西后 我终于能够打开该项目并实际编译 运行它 我的新问题来自这行代码 Set db DBEngine Workspaces 0 Ope
  • 为什么在 Ruby 中捕获命名组会导致“未定义的局部变量或方法”错误?

    我在 Ruby 2 0 中的正则表达式中的命名捕获方面遇到问题 我有一个字符串变量和一个内插正则表达式 str hello world re w
  • 使用VBA检查下面的单元格是否为空

    如何在 Excel 中使用 VBA 检查下面的单元格是否为空 我想对特定范围内的所有值求和 但前提是下面的单元格不为空 通过 VBA 或任何其他方式可以实现这一点吗 Example 4 2 3 2 1 2 3 1 总和为 4 3 2 9 尝
  • 涉及 sin() 的两个非常相似的函数表现出截然不同的性能 - 为什么?

    考虑以下两个程序 它们以两种不同的方式执行相同的计算 v1 c include
  • SQL Loader - 多个文件和抓取文件名

    我有一个包含超过 400K txt 文件的文件夹 名字像 deID RESUL 12433287659 txt 234323456 txt deID RESUL 34534563649 txt 345353567 txt deID RESU
  • ContentResolver 和“where”条件中的“IN”语句

    我正在尝试根据联系人的 id 获取光标以获取联系人列表 我不太确定如何将 IN 语句与参数数组一起使用 我目前所拥有的会导致错误 public Cursor GetContacts String ids ContentResolver cr
  • K表示当肘部图是平滑曲线时寻找肘部

    我正在尝试使用以下代码绘制 k 的肘部 load CSDmat mydata for k 2 20 opts statset MaxIter 500 Display off IDX1 C1 sumd1 D1 kmeans CSDmat k