matlab实现肘部法(手肘法)确定kmeans方法k值
Author:HanDi
上海某高校遥感专业 工科男
相信积微者速成,相信分享的力量
CSDN@这可真是难为我了
数学建模时用K-means分类时确定K值遇见的一个小问题,上网查,发现matlab版本的没人实现。查看原理也不是很难就自己实现了一下。果然还是自己动手丰衣足食!!!
SSE公式
SSE=∑i=1k∑p∈Ci∣p−mi∣2S S E=\sum_{i=1}^{k} \sum_{p \in C_{i}}\left|p-m_{i}\right|^{2} SSE=i=1∑kp∈Ci∑∣p−mi∣2
其中,Ci是第i个类,p是Ci类中的所有样本点,mi是Ci类的质心(Ci中所有样本的均值)。
肘部法思想
肘部法的核心思想是分类数k越大,样本划分会更加精细,每个类的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。
这里值得我们注意的是,我们应该选择图像拐点,即下图k应取3,刚好跟鸢尾花数据集给的标签数3相对应。也就是说分3类确实是效果最好。
通俗的说,图像拐点说明再增加k值,类内误差变化已经很小了,已经不能比当前k值更好的区分样本了。
初次写技术博客没有什么经验,如有不足,还请大家多多包涵,欢迎大家私信交流 ^ _ ^ !!!一起进步~
以后会分享一些地理数据处理和数据挖掘的示例
下面是完整代码,我的Matlab版本是 2019b
这里是使用的示例数据是matlab自带的鸢尾花数据集
可以自行更换自己的数据
clc;
clear;
load fisheririsdata = meas;
%对原始数据进行归一化处理
data=mapminmax(meas,0,1);
%n是样本数,p为特征维数,k为分类数
[n,p]=size(data);K=8;D=zeros(K,2);
for k=2:K[lable,c,sumd,d]=kmeans(data,k,'dist','sqeuclidean');
% data,n×p原始数据向量
% lable,n×1向量,聚类结果标签;
% c,k×p向量,k个聚类质心的位置
% sumd,k×1向量,类间所有点与该类质心点距离之和
% d,n×k向量,每个点与聚类质心的距离
sse1 = sum(sumd.^2);
D(k,1) = k;
D(k,2) = sse1;
endplot(D(2:end,1),D(2:end,2))
hold on;
plot(D(2:end,1),D(2:end,2),'or');title('不同K值聚类偏差图')
xlabel('分类数(K值)')
ylabel('簇内误差平方和')
代码运行效果
感谢@沙漏dan点这里
这篇博文给予的帮助如有错误,欢迎评论,私信,会及时改正
matlab实现肘部法(手肘法)确定kmeans方法k值相关推荐
- python 机器学习——Kmeans之K值的选取原理
Kmeans之K值的选取 参考 一般而言,没有所谓最好的选择聚类数的方法,通常情况下是需要根据不同的问题,人工进行选择的.选择的时候思考我们运用 K-means 算法聚类的动机是什么,然后选择能最好服 ...
- Kmeans聚类K值的确定
通过手肘法确定Kmeans聚类的最优K值 SSE = [] # 存放每次结果的误差平方和 for k in range(5,50):estimator = KMeans(n_clusters=k,ma ...
- K-means聚类K值的选择、Calinski-Harabasz准则
K-means聚类K值的选择.Calinski-Harabasz准则 目录 K-means聚类K值的选择.Calinski-Harabasz准则 K-means聚类K值的选择 Calinski-Har ...
- kmeans 的k值确定方法
用聚类算法分好类后如何判断分的效果呢?方法就是轮廓系数(Silhouette). Silhouette系数是对聚类结果有效性的解释和验证,由PeterJ. Rousseeuw于1986提出. ...
- 轮廓系数确定kmeans的K值
轮廓系数确定kmeans的K值 方法: 1,计算样本i到同簇其他样本的平均距离ai.ai 越小,说明样本i越应该被聚类到该簇.将ai 称为样本i的簇内不相似度. 簇C中所有样本的a i 均值称为簇C的 ...
- K-means中K值的选取
以下博文转自:https://blog.csdn.net/qq_15738501/article/details/79036255 感谢 最近做了一个数据挖掘的项目,挖掘过程中用到了K-means聚 ...
- KMeans聚类 K值的确定以及初始类簇中心点的选取
KMeans算法是最常用的聚类算法,基本思想是:在给定K值和K个初始类簇中心点的情况下,把每个样本点分到离其最近的簇中,然后重新计算每个簇的中心点(取平均值),然后再迭代的进行分配点和更新类簇中心点的 ...
- Kmeans聚类K值选择Parametric Bootstrap方法,以及数据重抽样方法Bootstrapping
常用的K值选择方法是通过寻找"拐点"确认,或者下游业务需求确定.下文介绍了另一种选择方法. 评论:原始该K值选择法只有在数据为"gaussian-like"时才 ...
- kmeans python自定义初始聚类中心_机器学习-KMeans聚类 K值以及初始类簇中心点的选取...
本文主要基于Anand Rajaraman和Jeffrey David Ullman合著,王斌翻译的<大数据-互联网大规模数据挖掘与分布式处理>一书. KMeans算法是最常用的聚类算法, ...
最新文章
- 安装完Hadoop之后,命令行输入hadoop或hdfs却找不到命令的解决方法
- supervisor
- Linux系统文件压缩与备份(5)
- STL之Deque容器
- swift 展示html富文本,Swift HTML富文本显示
- 【习题 6-5 UVA-1600】Patrol Robot
- Image Gallery
- 远程计算机维修,电脑坏了不用愁,向日葵电脑远程维修省时又省力
- win7局域网共享设置_win7局域网共享,教你在智能电视上看win7系统电脑资源
- 王者荣耀游戏时间计算机制,王者荣耀荣耀战力怎么算,荣耀战力计算机制详解...
- DevExpress 控件中文化教程详解(内含下载官网中文化包和自定义修改中文化包制作教程)
- 工信部教育与考试中心-软件测试工程师考试题A卷-答
- 打码,需要一个好的键盘
- java报表是什么_什么是报表工具
- TWS蓝牙耳机怎么挑选?值得买的蓝牙耳机推荐
- CGroup(控制组)
- ERP系统对服装行业的帮助有哪些?
- C#从入门到精通学习笔记——(2)
- CSS3的@keyframes用法详解:
- 一篇简易的MODBUS 转 profibus 网关 将ABB ACS800变频器接入 profibus 总线案例
热门文章
- 计算机毕设(附源码)JAVA-SSM火车订票系统
- 栈(数据结构)超详解(最后面还有一道经典习题哦)
- 虹科分享 | 如何测试与验证复杂的FPGA设计(3)——硬件测试
- 泛舟亚马逊 拥抱无尽的广袤与神秘
- 微信错误提示code= -4/微信发送被拒绝
- eth入门之工作量证明 (POW)
- Java—数组排序(升序和降序)
- Undefined symbols for architecture arm64:
- 不太卡出身的高校,有哪些?
- MySQL查询出现“this is incompatible with sql_mode=only_full_group_by“错误