怎么确定K均值聚类中的K(基于matlab)

怎么确定K均值聚类中的K(基于matlab)k 均值算法原理和优缺点点击打开链接定义 D 类内平均距离 类间平均距离不同的 K 有不同的 D D 越小越好 但 k 也不能过大 根据实际情况取 数据集 96 个维度的 616 条数据 matlab 代码 clc cleardata xlsread C Users Administrato Desktop 数据 xlsx Sheet1 n p size data

k均值算法原理和优缺点

点击打开链接

 

定义

D=类内平均距离/类间平均距离

不同的K有不同的D,D越小越好,但k也不能过大,根据实际情况取。

数据集

96个维度的616条数据。

matlab代码

clc;clear data=xlsread('C:\Users\Administrator\Desktop\数据.xlsx','Sheet1'); [n,p]=size(data); for i=1:p minr=min(data(:,i)); maxr=max(data(:,i)); data(:,i)=(data(:,i)-minr)/(maxr-minr);%归一化 end K=15;D=zeros(K-1,2);T=0; for k=2:K T=T+1; [lable,c,sumd,d]=kmeans(data,k); %data,n*p原始数据向量 %lable,n*1向量,聚类结果标签; %c,k*p向量,k个聚类质心的位置 %sumd,1*k向量,类间所有点与该类质心点距离之和 %d,n*k向量,每个点与聚类质心的距离 %-----求每类数量----- sort_num=zeros(k,1);%每类数量 for i=1:k for j=1:n if lable(j,1)==i sort_num(i,1)=sort_num(i,1)+1; end end end %-----求每类数量----- sort_ind=sumd./sort_num;%每类类内平均距离 sort_ind_ave=mean(sort_ind);%类内平均距离 %-----求类间平均距离----- h=nchoosek(k,2);A=zeros(h,2);t=0;sort_outd=zeros(h,1); for i=1:k-1 for j=i+1:k t=t+1; A(t,1)=i; A(t,2)=j; end end for i=1:h for j=1:p sort_outd(i,1)=sort_outd(i,1)+(c(A(i,1),j)-c(A(i,2),j))^2; end end sort_outd_ave=mean(sort_outd);%类间平均距离 %-----求类间平均距离----- D(T,1)=k; D(T,2)=sort_ind_ave/sort_outd_ave; end min(D(:,2)); [f,g]=find(D==min(D(:,2))); plot(D(:,1),D(:,2))

运行结果

怎么确定K均值聚类中的K(基于matlab)

横坐标为K,纵坐标为D,随着K的增加D虽然越来越小,但结合实际业务,K不能取太大,取5较好。

K取5的聚类matlab代码如下:

clc;clear; k=5;%类数设置 data=xlsread('C:\Users\Administrator\Desktop\数据.xlsx','Sheet1'); [n,p]=size(data); [lable,c,sumd,d]=kmeans(data,k); %data,n*p原始数据向量 %lable,n*1向量,聚类结果标签; %c,k*p向量,k个聚类质心的位置 %sumd,1*k向量,类间所有点与该类质心点距离之和 %d,n*k向量,每个点与聚类质心的距离 x=0:95;y=zeros(k,p); for i=1:k t=0; for j=1:n if lable(j,1)==i t=t+1; y(i,:)= y(i,:)+data(j,:); end end y(i,:)= y(i,:)/t; subplot(2,3,i); plot(x,y(i,:)) end

聚类效果如下

怎么确定K均值聚类中的K(基于matlab)

如果对你有帮助,请点下赞,予人玫瑰手有余香!

时时仰望天空,理想就会离现实越来越近!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215091.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午2:43
下一篇 2026年3月18日 下午2:44


相关推荐

  • UiBot 网页数据抓取

    UiBot 网页数据抓取访问 boss 直聘官网 搜索职位为 rpa 如图 选择功能 数据抓取 如图 开始选择目标数据 点击选择目标 如图 选择第一个字段 岗位名称 如图 根据提示选择同一层级的另一条数据 如图 结果如图所示 表明已经抓取到了岗位名称这个字段 点击确定 结果如图 如果要抓取另外的字段 则可以选择抓取更多数据 不需要的话即可点击下一步 这里选择下一步 如果需要翻页 可以点击页面的翻页按钮作为翻页元素 这里选择完成 如图 写入回到设计器中 可以看到已经完成了

    2026年3月16日
    2
  • springBoot注解与分析

    springBoot注解与分析springBoot注解与分析

    2022年4月22日
    25
  • 简单的checkbox多选框样式修改(纯css3)

    简单的checkbox多选框样式修改(纯css3)今天在做项目的时候有需要用到多选框 并且因为 ui 的关系 需要稍微美化一下多选框 所以找到了实现方法 挺实用的 不需要脚本就能实现 前端布局如下 lt inputclass select tag input type checkbox id tag id style display none gt lt labelclass tag label for amp q

    2026年3月17日
    2
  • glup基本操作

    glup基本操作glup 它是一款 nodejs 应用 它是打造前端工作流的利器 打包 压缩 合并 git 远程操作 简单易用 无快不破 高质量的插件 glup 安装 npminstallgl cli npminstallsa devgulp 安装各种插件 npminstallsa 本地使用 gulpnpminsta imagemin

    2026年3月19日
    2
  • intellij idea快速生成main方法、for循环、out输出

    intellij idea快速生成main方法、for循环、out输出点击这里查看<intellijidea使用教程汇总篇>1、System.out.println()输入sout,按下enter键,生成System.out.println()方法.sout—>soutv=System.out.println("变量名 = " + 变量)soutp—>System.out.println("")2、public…

    2022年5月6日
    166
  • mysql主键怎么做更新操作_更新MySQL主键

    mysql主键怎么做更新操作_更新MySQL主键下一次 使用单个 altertable 语句更新主键 altertablexx addprimaryke k1 k2 k3 修复问题 createtablef user 2 user 1 type timestamp n primarykey user 2 user 1 type locktablefi

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号