MATLAB聚类有效性评价指标(外部)

作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/

更多内容,请看标签:MATLAB、聚类

前提:数据的真实标签已知!

1. 归一化互信息(Normalized Mutual information)

定义

程序

function MIhat = nmi(A, B)

%NMI Normalized mutual information

% A, B: 1*N;

if length(A) ~= length(B)

error('length( A ) must == length( B)');

end

N = length(A);

A_id = unique(A);

K_A = length(A_id);

B_id = unique(B);

K_B = length(B_id);

% Mutual information

A_occur = double (repmat( A, K_A, 1) == repmat( A_id', 1, N ));

B_occur = double (repmat( B, K_B, 1) == repmat( B_id', 1, N ));

AB_occur = A_occur * B_occur';

P_A= sum(A_occur') / N;

P_B = sum(B_occur') / N;

P_AB = AB_occur / N;

MImatrix = P_AB .* log(P_AB ./(P_A' * P_B)+eps);

MI = sum(MImatrix(:));

% Entropies

H_A = -sum(P_A .* log(P_A + eps),2);

H_B= -sum(P_B .* log(P_B + eps),2);

%Normalized Mutual information

MIhat = MI / sqrt(H_A*H_B);

结果

>> A = [1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3];

>> B = [1 2 1 1 1 1 1 2 2 2 2 3 1 1 3 3 3];

>> MIhat = nmi(A, B)

MIhat =

0.3646

2. Rand统计量(Rand index)

定义

程序

function [AR,RI,MI,HI]=RandIndex(c1,c2)

%RANDINDEX - calculates Rand Indices to compare two partitions

% ARI=RANDINDEX(c1,c2), where c1,c2 are vectors listing the

% class membership, returns the "Hubert & Arabie adjusted Rand index".

% [AR,RI,MI,HI]=RANDINDEX(c1,c2) returns the adjusted Rand index,

% the unadjusted Rand index, "Mirkin's" index and "Hubert's" index.

if nargin < 2 || min(size(c1)) > 1 || min(size(c2)) > 1

error('RandIndex: Requires two vector arguments')

return

end

C=Contingency(c1,c2);%form contingency matrix

n=sum(sum(C));

nis=sum(sum(C,2).^2);%sum of squares of sums of rows

njs=sum(sum(C,1).^2);%sum of squares of sums of columns

t1=nchoosek(n,2);%total number of pairs of entities

t2=sum(sum(C.^2));%sum over rows & columnns of nij^2

t3=.5*(nis+njs);

%Expected index (for adjustment)

nc=(n*(n^2+1)-(n+1)*nis-(n+1)*njs+2*(nis*njs)/n)/(2*(n-1));

A=t1+t2-t3;%no. agreements

D= -t2+t3;%no. disagreements

if t1==nc

AR=0;%avoid division by zero; if k=1, define Rand = 0

else

AR=(A-nc)/(t1-nc);%adjusted Rand - Hubert & Arabie 1985

end

RI=A/t1;%Rand 1971%Probability of agreement

MI=D/t1;%Mirkin 1970%p(disagreement)

HI=(A-D)/t1;%Hubert 1977%p(agree)-p(disagree)

function Cont=Contingency(Mem1,Mem2)

if nargin < 2 || min(size(Mem1)) > 1 || min(size(Mem2)) > 1

error('Contingency: Requires two vector arguments')

return

end

Cont=zeros(max(Mem1),max(Mem2));

for i = 1:length(Mem1)

Cont(Mem1(i),Mem2(i))=Cont(Mem1(i),Mem2(i))+1;

end

程序中包含了四种聚类度量方法:Adjusted Rand index、Rand index、Mirkin index、Hubert index。

结果

>> A = [1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3];

>> B = [1 2 1 1 1 1 1 2 2 2 2 3 1 1 3 3 3];

>> [AR,RI,MI,HI]=RandIndex(A,B)

AR =

0.2429

RI =

0.6765

MI =

0.3235

HI =

0.3529

3. 参考文献

(simple) Tool for estimating the number of clusters

Mutual information and Normalized Mutual information 互信息和标准化互信息

Evaluation of clustering

matlab中CH指标聚类评价指标,MATLAB聚类有效性评价指标(外部)相关推荐

  1. matlab中的timer模块,[转载]Matlab中Timer的使用

    Matlab中Timer的使用 鉴于Matlab中缺乏多线程机制,使用Timer无疑是一个很重要的工具,Matlab中Timer是一个Java对象. (1)Timer 的定义 t=timer(); 设 ...

  2. m 文件 dll matlab 中调用_如何在matlab中调用python程序

    现在python很火,很多代码都是python写的,如果你和我一样,习惯了使用matlab,还想在matlab中调用Python的代码,应该怎么办呢?其中一条思路:首先在matlab中调用系统脚本命令 ...

  3. matlab中m文件是什么,MATLAB中M文件的使用

    运行方法: 使用matlab的时候,可以在"Command Window"内直接书写matlab代码,也可以将代码保存到M文件中,然后运行该文件.使用matlab主界面菜单&quo ...

  4. matlab 如何axis,在matlab中axis是什么意思,matlab中axis的用法

    在matlab中axis是什么意思轴在matlab中是什么意思,matlab中的Axis是指在绘图中通常使用axis函数来设置坐标值的范围,在matlab的命令窗口中输入doc轴或help轴即可获得该 ...

  5. 在MATLAB中使用数学符号,在matlab中怎么输入特殊符号 function在MATLAB中怎么用

    导航:网站首页 > 在matlab中怎么输入特殊符号 function在MATLAB中怎么用 在matlab中怎么输入特殊符号 function在MATLAB中怎么用 相关问题: 匿名网友: 一 ...

  6. matlab中删除照片_如何使用matlab从图像中删除划痕

    如果您知道划痕的位置,则此问题称为 inpainting,并且存在非常复杂的算法.因此,一种方法是尽可能好地检测划痕,然后在其上使用标准的修复算法.我在Mathematica中玩了一下你的形象: 首先 ...

  7. matlab中仿真丢包,使用MATLAB进行误比特率(BER)仿真----转载

    原作者:James E. Gilley 译者:H. X. Xia 1. 引言 由于Matlab 具有简单的描述语言和优秀的数据图形化能力,MATLAB成为进行数字通信系统仿真的理想工具.在数字通信领域 ...

  8. matlab中p1x怎么表示什么,MATLAB复习题(含答案).doc

    MATLAB语言复习大纲 1. 掌握以下命令行编辑常用的控制键的用法:Del,Esc,Backspace,Ctrl+C. 答:Del是删除光标右边的字符 Esc是删除当前行的全部内容 Backspac ...

  9. matlab做互相关分析,自相关与互相关在matlab中实现_互相关在matlab中实现

    1. 首先说说自相关和互相关的概念. 这个是信号分析里的概念,他们分别表示的是两个时间序列之间和同一个时间序列在任意两个不同时刻的取值之间的相关程度,即互相关函数是描述随机信号x(t),y(t)在任意 ...

最新文章

  1. linux快捷键 赋值,2_Shell语言———bash的快捷键、变量声明、引用变量及变量替换...
  2. linux命令学习之 cp(命令学习之四)
  3. 扇区、磁盘块、页、页框、缓冲区之间的关系!
  4. Java 求一批数的绝对值
  5. 老板让你抗住千万级流量,如何做架构设计?
  6. 【Apache】指定 某一个URL 并进行 Auth 认证
  7. Thread打印值的含义
  8. C#复数类Complex的封装
  9. 电击图片弹出无边自定义窗口
  10. 史上最全的MSSQL复习笔记
  11. Hbase常用数据库操作类
  12. 框架封装_重大突破,欧菲光成功研发半导体封装用高端引线框架
  13. 利用Cramer法则求具有唯一解的方程组的解
  14. html 自动打开超链接,JS、html打开超链接的几种形式
  15. 33. Prometheus-报警-通知模板示例
  16. 物通博联为注塑机远程监控提供物联网解决方案
  17. 我发布在Steam的两款游戏
  18. 从源码角度上探索AdapterViewFlipper怎么实现广告栏的垂直自动滚动
  19. 实战|Python爬取字节跳动1W+招聘信息
  20. Android开发中EventLog分析

热门文章

  1. 产品经验谈:B端产品需求的3个层次,你都了解吗?
  2. python作者 google面试_如果Google面试让你用python写一个树的遍历程序
  3. 加载页面就触发ajax,AJAX post方法,有时会在页面加载时触发,有时不会
  4. 【算法图解|3】JavaScript 如何实现数组去重
  5. 孙叫兽进阶之路之如何进行情绪管理
  6. svm核函数gamma参数_非线性SVM与核函数
  7. jquery简介 each遍历 prop attr
  8. angular 获取ng-repeat完成状态 $last
  9. ie 浏览器布局中的 offset
  10. 面试中关于多线程同步,你必须要思考的问题