MATLAB聚类有效性评价指标(内部) MATLAB聚类有效性评价指标(外部)MATLAB聚类有效性评价指标(外部 成对度量)
MATLAB聚类有效性评价指标(内部)
作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
外部评价指标(需要真实标签),请看:MATLAB聚类有效性评价指标(外部),MATLAB聚类有效性评价指标(外部 成对度量)
MATLAB中有一个聚类内部评价指标的函数evalclusters(),关于函数的官网,请看:https://www.mathworks.com/help/stats/evalclusters.html
1. evalclusters函数用法
eva= evalclusters(data,clust,'xxx');
data:可以是归一化/标准化之后的。
clust:聚类后的标签,参数可以是字符串或者矩阵,字符串了话就要写matlab规定的聚类算法,比如'kmeans'。如果你用的不是matlab自带的聚类算法去聚类的,而是想评估自己写的聚类算法性能,那么clust就填写你聚类结果的标签矩阵Label就行了,比如你的数据data是N*M的,N是样本个数,M是特征维数。那么标签矩阵Label就是N*1的矩阵,代表聚类后每个样本的标签,这样就可以输出评估结果了。
'xxx':可以选择四种评价指标:'CalinskiHarabasz' | 'DaviesBouldin' | 'gap' | 'silhouette'
'CalinskiHarabasz': Calinski-Harabasz index (CHI,越大越好)
'DaviesBouldin': Davies-Bouldin index(用的最多,越小越好)
'gap': gap statistic (越大越好)
'silhouette': silhouette coefficient (SC,轮廓系数,越大越好)
2. MATLAB程序
实验数据来自:https://www.cnblogs.com/kailugaji/p/10861064.html#_label3_0_1_2,将生成的三维数据存为data.txt。
clear
clc
% 作者:凯鲁嘎吉 https://www.cnblogs.com/kailugaji/
% 用了SC与DBI这两个指标
% label:聚类后的标签,不是真实标签
data_load = dlmread("data.txt");
data = data_load(:, 1:end-1);
label = data_load(:, end); % 真实标签
label_2 = [ones(180, 1); 2.*ones(120, 1)]; % 瞎写的标签
%% 真实标签的评价结果
eva_DBI_1= evalclusters(data,label,'DaviesBouldin');
eva_SC_1= evalclusters(data,label,'silhouette');
DBI_1 = eva_DBI_1.CriterionValues; % 越小越好
SC_1 = eva_SC_1.CriterionValues; % 越大越好
%% 瞎写的标签的评价结果
eva_DBI_2= evalclusters(data,label_2,'DaviesBouldin');
eva_SC_2= evalclusters(data,label_2,'silhouette');
DBI_2 = eva_DBI_2.CriterionValues; % 越小越好
SC_2 = eva_SC_2.CriterionValues; % 越大越好
%% 显示评价结果
fprintf("DBI越小越好:DBI(真实标签): %f, DBI(坏标签): %f\n", DBI_1, DBI_2); % 越小越好
fprintf("SC越大越好:SC(真实标签): %f, SC(坏标签): %f\n", SC_1, SC_2); % 越大越好
3. 结果
DBI越小越好:DBI(真实标签): 0.892058, DBI(坏标签): 0.938236
SC越大越好:SC(真实标签): 0.599176, SC(坏标签): 0.574342
4. 参考
[1] https://www.mathworks.com/help/stats/evalclusters.html
原文地址:https://www.cnblogs.com/kailugaji/p/16169796.html
- Java数据结构和算法(十三)——哈希表
- Java数据结构和算法(十二)——2-3-4树
- UDF编程操作实现
- GitHub敏感信息扫描工具
- Java数据结构和算法(九)——高级排序
- Java数据结构和算法(十一)——红黑树
- Entity Framework Core 之数据库迁移
- 常见Web源码泄露总结
- 浅析Entity Framework Core2.0的日志记录与动态查询条件
- ASP.NET Core中使用IOC三部曲(三.采用替换后的Autofac来实现AOP拦截)
- 【weakfilescan】敏感文件扫描工具
- ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入)
- ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器)
- CVE-2017-11882漏洞复现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- DataFrame.groupby()所见的各种用法详解
- keras训练曲线,混淆矩阵,CNN层输出可视化实例
- Pandas缺失值2种处理方式代码实例
- ThinkPHP5 的简单搭建和使用详解
- PyInstaller运行原理及常用操作详解
- php使用curl模拟浏览器表单上传文件或者图片的方法
- Python轻量级web框架bottle使用方法解析
- 详解在YII2框架中使用UEditor编辑器发布文章
- 基于python和flask实现http接口过程解析
- Python xpath表达式如何实现数据处理
- Python脚本破解压缩文件口令实例教程(zipfile)
- 使用keras实现Precise, Recall, F1-socre方式
- Python Django搭建网站流程图解
- Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
- keras自定义损失函数并且模型加载的写法介绍