聚类效果评测-Fmeasure和Accuracy及其Matlab实现
聚类结果的好坏,有很多种指标,其中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实现的更多相关文章
- 数学建模及机器学习算法(一):聚类-kmeans(Python及MATLAB实现,包括k值选取与聚类效果评估)
一.聚类的概念 聚类分析是在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好.我们事先并不知道数据的正确结果(类标),通过聚类算法来发现和挖掘数据本身的结 ...
- 使用K-means进行聚类,用calinski_harabaz_score评价聚类效果
代码如下: """ 下面的方法是用kmeans方法进行聚类,用calinski_harabaz_score方法评价聚类效果的好坏 大概是类间距除以类内距,因此这个值越大越 ...
- 【转】GMM与K-means聚类效果实战
原地址: GMM与K-means聚类效果实战 备注 分析软件:python 数据已经分享在百度云:客户年消费数据 密码:lehv 该份数据中包含客户id和客户6种商品的年消费额,共有440个样本 正文 ...
- 【原】KMeans与深度学习模型结合提高聚类效果
这几天在做用户画像,特征是用户的消费商品的消费金额,原始数据(部分)是这样的: id goods_name goods_amount 男士手袋 1882.0 淑女装 2491.0 女士手袋 345.0 ...
- 【原】KMeans与深度学习自编码AutoEncoder结合提高聚类效果
这几天在做用户画像,特征是用户的消费商品的消费金额,原始数据(部分)是这样的: id goods_name goods_amount 男士手袋 1882.0 淑女装 2491.0 女士手袋 345.0 ...
- Matlab实现K-Means聚类算法
人生如戏!!!! 一.理论准备 聚类算法,不是分类算法.分类算法是给一个数据,然后判断这个数据属于已分好的类中的具体哪一类.聚类算法是给一大堆原始数据,然后通过算法将其中具有相似特征的数据聚为一类. ...
- MATLAB中“fitgmdist”的用法及其GMM聚类算法
MATLAB中“fitgmdist”的用法及其GMM聚类算法 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 高斯混合模型的基本原理:聚类——GMM,MA ...
- K-means聚类算法MATLAB
以K-means算法为例,实现了如下功能 自动生成符合高斯分布的数据,函数名为gaussianSample.m 实现多次随机初始化聚类中心,以找到指定聚类数目的最优聚类.函数名myKmeans.m 自 ...
- 发表在 Science 上的一种新聚类算法
今年 6 月份,Alex Rodriguez 和 Alessandro Laio 在 Science 上发表了一篇名为<Clustering by fast search and find of ...
随机推荐
- EventFiringWebDriver网页事件监听(二)
public class SeleniumDemo { /** * @param args */ public static void main(String[] args) { WebDriver ...
- 网页采集利器 phpQuery
网页采集利器 phpQuery 2012-02-28 11:43:24| 分类: php|举报|字号 订阅 在网页采集的时候,通常都会用到正则表达式.但是有时候对于正则不太好的同学,比如我, ...
- SSH查看Linux系统是32位还是64位?
Linux下如何明确地查看操作系统的位数 如何知晓操作系统是32位还是64位?这里介绍一种简单的方式: [root@localhost mysql-5.1.57]# getconf LONG_BI ...
- for…else和while…else
当while语句配备else子句时,如果while子句内嵌的循环体在整个循环过程中没有执行break语句(循环体中没有break语句,或者循环体中有break语句但是始终未执行),那么循环过程结束后, ...
- PKU 3267 The Cow Lexicon(动态规划)
题目大意:给定一个字符串和一本字典,问至少需要删除多少个字符才能匹配到字典中的单词序列.PS:是单词序列,而不是一个单词 思路: ...
- Tasks in parallel
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- JS 原生JS 判断滚动条滑动到底部(兼容苹果safari)
ListenerScoller () { var pageIndex = 1; var startX, startY; document.addEventListener('touchstart',f ...
- typeof instanceof 和 obj.constructor
1.typeof用以获取一个变量或者表达式的类型,typeof一般只能返回如下几个结果: 'number','boolean','string','function'(函数),'object'(NU ...
- C#基础--多线程
一.微软早期操作系统中的问题 在早期的操作系统中,应用程序都是在同一个地址空间中运行的,每个程序的数据其它程序都是可见的,并且因为早期CPU是单内核 的所以所有的执行都是线性的.这就引出两个问题: 第 ...
- [caffe]caffe资料收集
1.caffe主页,有各种tutorial. 2.Evan Shelhamer的tutorial,包括视频.