机器学习和生物信息学实验室联盟

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3753|回复: 9
打印 上一主题 下一主题

Common Clustering Metrics Implemented by Numpy and Scipy

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-15 12:38:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 chenwq 于 2013-4-15 13:13 编辑

1、Platform required
This is tested under the scipy 0.9 and numpy 2.0, but they should also work with a reasonably new version.

2、Parameters
Each metric requires only the following two parameters:
predicted_label, labels predicted by the some clustering algorithm:
              predicted_label = array([1,1,6,1,1,1,2,2,2,2,2,2,3,3,3,3,3])
group_truth, labels given by the train data:
              group_truth = array([2,5,1,1,3,1,2,2,2,2,2,2,3,3,3,3,3])

3、Test cases:
  1. if __name__=="__main__":
  2.         #Example from http://nlp.stanford.edu/IR-book       
  3.            
  4.         predicted_label = array([1,1,6,1,1,1,2,2,2,2,2,2,3,3,3,3,3])
  5.         group_truth = array([2,5,1,1,3,1,2,2,2,2,2,2,3,3,3,3,3])

  6.         print "test case 1:"
  7.         print "group_truth:"
  8.         print group_truth
  9.         print "predicted_label:"
  10.         print predicted_label

  11.        
  12.         print "F-score: "
  13.         print F(predicted_label, group_truth)[0]
  14.         print "\nAdjusted purity:"
  15.         print APP(predicted_label, group_truth)
  16.         print "\nMutual Information:"
  17.         print mi(predicted_label, group_truth)
  18.         print "\nNormalized Mutual Information:"
  19.         print nmi(predicted_label, group_truth)
  20.         print "\nv measure score:"
  21.         print V(predicted_label, group_truth)
  22.         print "\nAdjusted Rand Index:"
  23.         print rand(predicted_label, group_truth)

  24.        
  25.         predicted_label = array([1, 2, 2, 3, 3, 2, 1])
  26.         group_truth = array([1, 2, 2, 3, 3, 2, 1])
  27.         print "-" * 50
  28.         print "test case 2:"
  29.         print "group truth:"
  30.         print group_truth
  31.         print "predicted_label:"
  32.         print predicted_label
  33.         print "F-score: "
  34.         print F(predicted_label, group_truth)[0]
  35.         print "\nAdjusted purity:"
  36.         print APP(predicted_label, group_truth)
  37.         print "\nMutual Information:"
  38.         print mi(predicted_label, group_truth)
  39.         print "\nNormalized Mutual Information:"
  40.         print nmi(predicted_label, group_truth)
  41.         print "\nv measure score:"
  42.         print V(predicted_label, group_truth)
  43.         print "\nAdjusted Rand Index:"
  44.         print rand(predicted_label, group_truth)
复制代码


4、References

Clustering evaluation for Numpy and Scipy

5、Source code:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享
回复

使用道具 举报

沙发
 楼主| 发表于 2013-4-15 19:53:54 | 只看该作者
scikit-learn也有关于clustering的metrics。可以把这部分分离出来单独使用。参数和本帖的一样。
回复 支持 反对

使用道具 举报

板凳
发表于 2013-4-15 20:12:23 | 只看该作者
Clustering Metrics是啥?和聚类有啥关系?我好弱....
回复 支持 反对

使用道具 举报

地板
发表于 2013-4-15 20:44:15 | 只看该作者
group_truth 训练集中的label?聚类的话训练集有真实label吗?有的话还聚类干什么?
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2013-4-15 21:14:39 | 只看该作者
本帖最后由 chenwq 于 2013-4-15 21:23 编辑
Genie 发表于 2013-4-15 20:44
group_truth 训练集中的label?聚类的话训练集有真实label吗?有的话还聚类干什么?


是的。
帖子里面的metrics都是需要group_truth的。我觉得是可能是因为关于有监督学习的loss function的理论相对来说比较成熟,无监督的聚类评价指标从中借鉴了。在上面的metrics中可以看到loss function的影子。

之前听过不完全类似的疑问(有点牵强了):
网址中已经有文件目录结构了,如http://ir.com/computational_advertising/audience_target_by_google的目录结构是computational advertising/audience_target_by_google,可以认为这是一篇关于计算广广告主题的文章,更仔细一点是关于受众定向的topic。为什么还需要LDA?
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2013-4-15 21:22:39 | 只看该作者
xmubingo 发表于 2013-4-15 20:12
Clustering Metrics是啥?和聚类有啥关系?我好弱....


师兄过谦了。
Clustering Metrics是在说评价聚类算法的聚类效果的一系列常用指标。

转载这个帖子的时候心理有点发怵,担心出现低级的拼写错误,或者翻译不恰当的地方,看来是发生了。。
因为主要是从帖子末尾的文中引用过来的,所以引用的时候也是用E语加了一点自己的内容。

果然,我的英语真的很弱。不仅从中文翻译到英语有困难,从英语到中文也是。

回复 支持 反对

使用道具 举报

7#
发表于 2013-4-15 21:36:31 | 只看该作者
chenwq 发表于 2013-4-15 21:14
是的。
帖子里面的metrics都是需要group_truth的。我觉得是可能是因为关于有监督学习的loss function的 ...

聚类lable是人和机器都能了解的吧?而下面的这个可能人一看知道就是关于computing advertising的topic,但是机器就无能为力了吧?所以需要LDA,代码强改天讨论会给我们讲下吧?
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2013-4-15 22:04:20 | 只看该作者
Genie 发表于 2013-4-15 21:36
聚类lable是人和机器都能了解的吧?而下面的这个可能人一看知道就是关于computing advertising的topic,但 ...

很惭愧,这些我指标我只勉强了解了一点。何况不是我自己的东西。

附件的代码处有一些论文的下载链接。
回复 支持 反对

使用道具 举报

9#
发表于 2013-4-18 14:45:36 | 只看该作者
chenwq 发表于 2013-4-15 21:14
是的。
帖子里面的metrics都是需要group_truth的。我觉得是可能是因为关于有监督学习的loss function的 ...

我觉得因为是需要对聚类的结果进行评估,一种是根据直接聚类的结果,如类间距离最大,类内距离最小,但这并一定能够代表真正的结果质量,另一种是根据应用本身的需求来定义,即我明确知道这个点应该是哪个类,如果归错了应该是什么样的惩罚结果,从而如何影响我们对这次聚类结果的评估。然而后一种,如果在每一次聚完类后直接让用户人工去评估,显然耗时又费力,那么我们就直接使用已有的分类文档来进行评估,从而将真实的类标和聚类后的类标进行对比。

关于LDA,我的理解是其利用topic的隐性语义结构,很好地解决了一词多义和一义多词的问题,这更符合现实中的语言模型,比之简单的抽取层次元素,能有更丰富的表达方式。不过关于LDA的内容,理解还是太浅,期待高手指导。
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2013-4-21 16:17:50 | 只看该作者
tangzk 发表于 2013-4-18 14:45
我觉得因为是需要对聚类的结果进行评估,一种是根据直接聚类的结果,如类间距离最大,类内距离最小,但这 ...

对于internal indices类的metrics,也就是没有ground-truth也有相应的指标,例如
1、DBI (Davies-Bouldin Index )
2、DI (Dunn Index)
3、Silhouette Index (SI)
等等。
根据应用本身的目标,
即我明确知道这个点应该是哪个类,
,然后选取合适的指标,需要人工来评估。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

机器学习和生物信息学实验室联盟  

GMT+8, 2024-11-27 08:43 , Processed in 0.078541 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表