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

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4181|回复: 2
打印 上一主题 下一主题

利用mahout进行clustering一些疑惑

[复制链接]
跳转到指定楼层
楼主
发表于 2012-10-18 14:59:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我大学没好好学习什么统计概率,工作十年早忘光了。
现在碰到有些问题,颇有些难以解释。
首先通过mahout,将法新社的新闻数据从Sequencefile进行MR运算,利用lucene的WhitespaceAnalyzer 。
该分词算法的确很简单,空格分词。
使用常见的文本TFIDF加权权法。
单词最小出现在3篇文档
og-likeihood的最小概率=50
mahout seq2sparse -i data/mahoutseq -o data/mahoutclustering -ow \
        -a org.apache.lucene.analysis.WhitespaceAnalyzer \
        -chunk 200 -wt tfidf -s 5 -md 3 -x 90 -ng 2 -ml 50 -seq -n 2

运行后产生K-Means输入数据目录:
drwxr-xr-x   - root supergroup          0 2012-10-17 08:54 /user/root/data/mahoutclustering/df-count
-rw-r--r--   3 root supergroup     955974 2012-10-17 08:53 /user/root/data/mahoutclustering/dictionary.file-0
-rw-r--r--   3 root supergroup     855253 2012-10-17 08:54 /user/root/data/mahoutclustering/frequency.file-0
drwxr-xr-x   - root supergroup          0 2012-10-17 08:54 /user/root/data/mahoutclustering/tf-vectors
drwxr-xr-x   - root supergroup          0 2012-10-17 08:55 /user/root/data/mahoutclustering/tfidf-vectors
drwxr-xr-x   - root supergroup          0 2012-10-17 08:51 /user/root/data/mahoutclustering/tokenized-documents
drwxr-xr-x   - root supergroup          0 2012-10-17 08:53 /user/root/data/mahoutclustering/wordcount

df-count很容易理解,IDF是逆文档频率,而DF则是它反之。
dictionary.file-0是分词后term与term id的映射。
frequency.file-0是term 与频率映射
tf-vectors 遍历tokenized-documents ,产生是term所对应词频权重,可用于clustering计算
tfidf-vectors 是term所对应词频使用tf-idf加权后,勇于clustering计算,大部分情况与tf-vectors一起产生。
tokenized-documents :首先通过lucene WhitespaceAnalyzer 分词后结果存储在这个目录。
wordcount 不解释了

大部分情况下,我们对于文本聚类分析都使用TF-IDF,因此较多使用tfidf-vectors,最终计算完成后利用dictionary.file-0做term还原。

因此运行Mahout KMeans迭代:
mahout kmeans -i data/mahoutclustering/tfidf-vectors \
        -c output/initial-clusters \
        -o output/kmeans-cosine \
        -dm org.apache.mahout.common.distance.CosineDistanceMeasure \
        -cd 0.1 -k 20 -x 20 -cl

KMeans的初始重心点应是随机产生的。
导致了迭代的次数可能也会随机,一次迭代就是一个MR运算。
我不太明白KMeans这种初始重心点随机到底会带来多大影响?

最终还原term ,并打印聚类结果。
mahout clusterdump -dt sequencefile -d data/mahoutclustering/dictionary.file-* -s output/kmeans-*/clusters-*-final/ -b 10 -n 10

结果仍然无法令人满意,噪音词很多,不知道常规如何除去这些噪音词呢?
当然一些简单的,例如 大小写,stop word等lucene常规技术我还是比较熟悉的。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 转播转播 分享分享
回复

使用道具 举报

沙发
发表于 2012-10-18 16:37:59 | 只看该作者
本帖最后由 cwc 于 2012-10-18 16:39 编辑

对于去除噪音词,你还可以试试Porter Stemmer,它可以消除相同单词不同词根带来的影响,还能起到不错的降维效果。另外,利用互信息、信息增益法也是常用的去噪音词和降维的方法。
回复 支持 反对

使用道具 举报

板凳
发表于 2012-11-27 15:13:46 | 只看该作者
我也存在这样的疑惑
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 20:01 , Processed in 0.065072 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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