聚类结果的好坏,有很多种指标,其中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. POJ1664:放苹果(线性dp)

    题目: http://poj.org/problem?id=1664 Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1 ...

  2. MySQL整理(三)

     一.简单单表操作   (1)简单CRUD 插入查询结果 insert into table1(id,name,age) select id,name,age from table2 where id ...

  3. windows平台mongoDB安装配置

    一.首先安装mongodb 1.官网下载mongoDB:http://www.mongodb.org/downloads,选择windows平台.安装时,一路next就可以了.我安装在了F:\mong ...

  4. [转]linux shell 获取当前正在执行脚本的绝对路径

    原文链接:http://sexywp.com/bash-how-to-get-the-basepath-of-current-running-script.htm 常见的一种误区,是使用 pwd 命令 ...

  5. python字符串的操作(去掉空格strip(),切片,查找,连接join(),分割split(),转换首字母大写, 转换字母大小写...)

    #可变变量:list, 字典#不可变变量:元祖,字符串字符串的操作(去掉空格, 切片, 查找, 连接, 分割, 转换首字母大写, 转换字母大小写, 判断是否是数字字母, 成员运算符(in / not ...

  6. 利用maven-dependency-plugin插件使用及场景

    背景: 1.需要某个特殊的 jar包,但是有不能直接通过maven依赖获取,或者说在其他环境的maven仓库内不存在,那么如何将我们所需要的jar包打入我们的生产jar包中. 2.某个jar包内部包含 ...

  7. Redhat 7.4更新为Centos7的yum并安装docker-ce

    以下命令请在root下执行 #删除原有的yum rpm -qa|grep yum|xargs rpm -e --nodeps #install centos yum #wget http://mirr ...

  8. Ubuntu 16.04 安装Navicat Premium

    一.介绍 Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL.SQLite.Oracle 及 PostgreSQL 资料库 ...

  9. zookeeper和淘宝dubbo的关系

    Dubbo建议使用Zookeeper作为服务的注册中心. 1.   Zookeeper的作用:         zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知 ...

  10. Django学习笔记之ORM字段和字段参数

    Object Relational Mapping(ORM) 一.ORM介绍 1. ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象 ...