聚类结果的好坏,有很多种指标,其中F-Measue即F值是常用的一种,其中包括precision(查准率或者准确率)和recall(查全率或者召回率)。

F-Measue是信息检索中常用的评价标准。

F-Measue的公式如下:

\[{{F}_{\beta }}=\frac{\left( {{\beta }^{2}}+1 \right)P\cdot R}{{{\beta }^{2}}\cdot P+R}\]

其中${\beta}$是参数,P是precision,R是reacll。通常${\beta}$取1,即:

\[F=\frac{2\cdot P\cdot R}{P+R}\]

设人工标记的分类簇为${{P}_{j}}$,聚类算法分类簇为${{C}_{i}}$

precision、recall个人感觉准确率和查全率翻译的更方便理解些。

precision(查准率或者准确率):

\[P({{P}_{j}},{{C}_{i}})=\frac{\left| {{P}_{j}}\cap {{C}_{i}} \right|}{\left| {{C}_{i}} \right|}\]

recall(查全率或者召回率):

\[R({{P}_{j}},{{C}_{i}})=\frac{\left| {{P}_{j}}\cap {{C}_{i}} \right|}{\left| {{P}_{j}} \right|}\]

F-Measure:

\[F\left( {{P}_{j}},{{C}_{i}} \right)=\frac{2\times P({{P}_{j}},{{C}_{i}})\times R\left( {{P}_{j}},{{C}_{i}} \right)}{P\left( {{P}_{j}},{{C}_{i}} \right)+R\left( {{P}_{j}},{{C}_{i}} \right)}\]

获得一个矩阵,不同于信息检索的是F-Measure有多个,并且人工标记簇的个数和聚类算法得到的簇个数不一定相等。

若已人工标记的簇${{P}_{j}}$为基准,则聚类算法结果越接近人工标记的结果效果越好。也是推荐使用的指标

针对每一个人工标记的${{P}_{j}}$选择${{C}_{i}}$中最接近的作为其F值:

\[F\left( {{P}_{j}} \right)=\underset{1\le i\le m}{\mathop{\max }}\,F({{P}_{j}},{{C}_{i}})\]

然后对所得到的F值进行加权平均,得到最终的一个直观的F值

\[F=\sum\limits_{j=1}^{S}{{{w}_{j}}\cdot F\left( {{P}_{j}} \right)},\ {{w}_{j}}=\frac{\left| {{P}_{j}} \right|}{\sum\limits_{i=1}^{s}{\left| {{P}_{i}} \right|}}=\frac{\left| {{P}_{j}} \right|}{n}\]

代码:

function [FMeasure,Accuracy] = Fmeasure(P,C)
% P为人工标记簇
% C为聚类算法计算结果
N = length(C);% 样本总数
p = unique(P);
c = unique(C);
P_size = length(p);% 人工标记的簇的个数
C_size = length(c);% 算法计算的簇的个数
% Pid,Rid:非零数据:第i行非零数据代表的样本属于第i个簇
Pid = double(ones(P_size,1)*P == p'*ones(1,N) );
Cid = double(ones(C_size,1)*C == c'*ones(1,N) );
CP = Cid*Pid';%P和C的交集,C*P
Pj = sum(CP,1);% 行向量,P在C各个簇中的个数
Ci = sum(CP,2);% 列向量,C在P各个簇中的个数 precision = CP./( Ci*ones(1,P_size) );
recall = CP./( ones(C_size,1)*Pj );
F = 2*precision.*recall./(precision+recall);
% 得到一个总的F值
FMeasure = sum( (Pj./sum(Pj)).*max(F) );
Accuracy = sum(max(CP,[],2))/N;
end

  

聚类效果评测-Fmeasure和Accuracy及其Matlab实现的更多相关文章

  1. 数学建模及机器学习算法(一):聚类-kmeans(Python及MATLAB实现,包括k值选取与聚类效果评估)

    一.聚类的概念 聚类分析是在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好.我们事先并不知道数据的正确结果(类标),通过聚类算法来发现和挖掘数据本身的结 ...

  2. 使用K-means进行聚类,用calinski_harabaz_score评价聚类效果

    代码如下: """ 下面的方法是用kmeans方法进行聚类,用calinski_harabaz_score方法评价聚类效果的好坏 大概是类间距除以类内距,因此这个值越大越 ...

  3. 【转】GMM与K-means聚类效果实战

    原地址: GMM与K-means聚类效果实战 备注 分析软件:python 数据已经分享在百度云:客户年消费数据 密码:lehv 该份数据中包含客户id和客户6种商品的年消费额,共有440个样本 正文 ...

  4. 【原】KMeans与深度学习模型结合提高聚类效果

    这几天在做用户画像,特征是用户的消费商品的消费金额,原始数据(部分)是这样的: id goods_name goods_amount 男士手袋 1882.0 淑女装 2491.0 女士手袋 345.0 ...

  5. 【原】KMeans与深度学习自编码AutoEncoder结合提高聚类效果

    这几天在做用户画像,特征是用户的消费商品的消费金额,原始数据(部分)是这样的: id goods_name goods_amount 男士手袋 1882.0 淑女装 2491.0 女士手袋 345.0 ...

  6. Matlab实现K-Means聚类算法

    人生如戏!!!! 一.理论准备 聚类算法,不是分类算法.分类算法是给一个数据,然后判断这个数据属于已分好的类中的具体哪一类.聚类算法是给一大堆原始数据,然后通过算法将其中具有相似特征的数据聚为一类. ...

  7. MATLAB中“fitgmdist”的用法及其GMM聚类算法

    MATLAB中“fitgmdist”的用法及其GMM聚类算法 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 高斯混合模型的基本原理:聚类——GMM,MA ...

  8. K-means聚类算法MATLAB

    以K-means算法为例,实现了如下功能 自动生成符合高斯分布的数据,函数名为gaussianSample.m 实现多次随机初始化聚类中心,以找到指定聚类数目的最优聚类.函数名myKmeans.m 自 ...

  9. 发表在 Science 上的一种新聚类算法

    今年 6 月份,Alex Rodriguez 和 Alessandro Laio 在 Science 上发表了一篇名为<Clustering by fast search and find of ...

随机推荐

  1. JDK 注解详解

    注解用途 我们在使用spring MVC框架时用到了很多的注解,如:@Controller.@RequestMapping等等,spring框架通过反射获取到标签进行不同的逻辑处理.注解是代码的附属信 ...

  2. 9.如何让ubuntu的ssh免密码登录

    ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server: sudo apt-get install openssh-server 安装后,可以使用如下命令登陆本机: s ...

  3. Linux使用scp命令实现文件的上传和下载

    上传本地/data/project/test.zip 文件至远程服务器192.168.1.2的 /root 目录下,代码如下: scp /home/project/test.zip  root@192 ...

  4. Spark 2.0 PCA主成份分析

    PCA在Spark2.0中用法比较简单,只需要设置: .setInputCol(“features”)//保证输入是特征值向量 .setOutputCol(“pcaFeatures”)//输出 .se ...

  5. JSP页面实现自动跳转!

    JSP页面实现自动跳转!一.页面自动刷新: 把如下代码加入<head>区域中<meta http-equiv=”refresh” content=”5″>注:content=” ...

  6. UVA10020:Minimal coverage(最小区间覆盖)

    题目: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68990#problem/M 题目需求:数轴上有n个闭区间[ai,bi],选择尽量 ...

  7. (转)C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区

    程序在内存有五个存在区域: A:动态区域中的栈区  B:动态区域中的栈区 C:静态区域中:全局变量 和静态变量    (这个区域又可以进一步细分为:初始化的全局变量和静态变量    以及    未初始 ...

  8. Mac下Jmeter快速安装与入门-模拟测试Post请求及设置Http头

    [1]去Apache官网下载 Binaries系列的最新Jmeter.gz包 [2]下载到本地之后解压缩,进入到解压之后的目录然后,找到apache-jmeter-4.0/bin/jmeter.sh ...

  9. 前端学习笔记之ES6快速入门

    0x1 let和const let ES6新增了let命令,用于声明变量.其用法类似var,但是声明的变量只在let命令所在的代码块内有效. { let x = 10; var y = 20; } x ...

  10. CSS 媒体类型

    CSS 媒体类型 媒体类型允许你指定文件将如何在不同媒体呈现.该文件可以以不同的方式显示在屏幕上,在纸张上,或听觉浏览器等等. 一.媒体类型 一些CSS属性只设计了某些媒体.例如"voice ...