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

标题: 利用mahout进行clustering一些疑惑 [打印本页]

作者: reck    时间: 2012-10-18 14:59
标题: 利用mahout进行clustering一些疑惑
我大学没好好学习什么统计概率,工作十年早忘光了。
现在碰到有些问题,颇有些难以解释。
首先通过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常规技术我还是比较熟悉的。

作者: cwc    时间: 2012-10-18 16:37
本帖最后由 cwc 于 2012-10-18 16:39 编辑

对于去除噪音词,你还可以试试Porter Stemmer,它可以消除相同单词不同词根带来的影响,还能起到不错的降维效果。另外,利用互信息、信息增益法也是常用的去噪音词和降维的方法。
作者: ysjld999    时间: 2012-11-27 15:13
我也存在这样的疑惑




欢迎光临 机器学习和生物信息学实验室联盟 (http://123.57.240.48/) Powered by Discuz! X3.2