【问题标题】:Interpreting output from mahout clusterdumper解释 mahout clusterdumper 的输出
【发布时间】:2011-08-13 21:30:55
【问题描述】:

我对抓取的页面(超过 25K 文档;个人数据集)进行了聚类测试。 我做了一个集群转储:

$MAHOUT_HOME/bin/mahout clusterdump --seqFileDir output/clusters-1/ --output clusteranalyze.txt

运行 cluster dumper 后的输出显示 25 个元素 "VL-xxxxx {}" :

VL-24130{n=1312 c=[0:0.017, 10:0.007, 11:0.005, 14:0.017, 31:0.016, 35:0.006, 41:0.010, 43:0.008, 52:0.005, 59:0.010, 68:0.037, 72:0.056, 87:0.028, ... ] r=[0:0.442, 10:0.271, 11:0.198, 14:0.369, 31:0.421, ... ]}
...
VL-24868{n=311 c=[0:0.042, 11:0.016, 17:0.046, 72:0.014, 96:0.044, 118:0.015, 135:0.016, 195:0.017, 318:0.040, 319:0.037, 320:0.036, 330:0.030, ...] ] r=[0:0.740, 11:0.287, 17:0.576, 72:0.239, 96:0.549, 118:0.273, ...]}

如何解释这个输出?

简而言之:我正在寻找属于特定集群的文档 ID。

是什么意思:

  • VL-x ?
  • n=y c=[z:z', ...]
  • r=[z'':z''', ...]

0:0.017 是否表示“0”是属于该集群的文档 ID?

我已经在 mahout wiki 页面上阅读了 CL、n、c 和 r 的含义。但是有人可以更好地向我解释一下,或者指向一个更详细解释的资源吗?

对不起,如果我问了一些愚蠢的问题,但我是 apache mahout 的新手,并将它用作我的集群课程作业的一部分。

【问题讨论】:

    标签: hadoop cluster-analysis k-means mahout


    【解决方案1】:

    我认为你需要阅读源代码——从http://mahout.apache.org 下载。 VL-24130 只是聚合集群的集群标识符。

    【讨论】:

      【解决方案2】:
      1. 默认情况下,kmeans 聚类使用不包含数据点名称的 WeightedVector。因此,您想使用 NamedVector 自己制作一个序列文件。 seq文件的个数和映射任务是一一对应的。因此,如果您的映射容量为 12,则在制作 seqfiles 时,您希望将数据分成 12 份 命名Vecotr:

        vector = new NamedVector(new SequentialAccessSparseVector(Cardinality),arrField[0]);
        
      2. 基本上,您需要从 HDFS 系统下载 clusteredPoints 并编写自己的代码来输出结果。这是我为输出聚类点成员资格而编写的代码。

        import java.io.*;
        import java.util.ArrayList;
        import java.util.HashMap;
        import java.util.List;
        import java.util.Map;
        import java.util.Set;
        import java.util.TreeMap;
        
        import org.apache.hadoop.conf.Configuration;
        import org.apache.hadoop.fs.FileSystem;
        import org.apache.hadoop.fs.Path;
        import org.apache.hadoop.io.IntWritable;
        import org.apache.hadoop.io.SequenceFile;
        import org.apache.mahout.clustering.WeightedVectorWritable;
        import org.apache.mahout.common.Pair;
        import org.apache.mahout.common.iterator.sequencefile.PathFilters;
        import org.apache.mahout.common.iterator.sequencefile.PathType;
        import org.apache.mahout.common.iterator.sequencefile.SequenceFileDirIterable;
        import org.apache.mahout.math.NamedVector;
        
        public class ClusterOutput {
        
        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                try {
                        BufferedWriter bw;
                        Configuration conf = new Configuration();
                        FileSystem fs = FileSystem.get(conf);
                        File pointsFolder = new File(args[0]);
                        File files[] = pointsFolder.listFiles();
                        bw = new BufferedWriter(new FileWriter(new File(args[1])));
                        HashMap<String, Integer> clusterIds;
                        clusterIds = new HashMap<String, Integer>(5000);
                        for(File file:files){
                                if(file.getName().indexOf("part-m")<0)
                                        continue;
                                SequenceFile.Reader reader = new SequenceFile.Reader(fs,  new Path(file.getAbsolutePath()), conf);
                                IntWritable key = new IntWritable();
                                WeightedVectorWritable value = new WeightedVectorWritable();
                                while (reader.next(key, value)) {
                                        NamedVector vector = (NamedVector) value.getVector();
                                        String vectorName = vector.getName();
                                        bw.write(vectorName + "\t" + key.toString()+"\n");
                                        if(clusterIds.containsKey(key.toString())){
                                                clusterIds.put(key.toString(), clusterIds.get(key.toString())+1);
                                        }
                                        else
                                                clusterIds.put(key.toString(), 1);
                                }
                                bw.flush();
                                reader.close(); 
                        }
                        bw.flush();
                        bw.close();
                        bw = new BufferedWriter(new FileWriter(new File(args[2])));
                        Set<String> keys=clusterIds.keySet();
                        for(String key:keys){
                                bw.write(key+" "+clusterIds.get(key)+"\n");
                        }
                        bw.flush();
                        bw.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
        }
        

      【讨论】:

        【解决方案3】:

        您可以使用 mahout clusterdump https://cwiki.apache.org/MAHOUT/cluster-dumper.html

        【讨论】:

        • 请阅读问题。 OP 已经使用了 clusterdumper。
        【解决方案4】:

        完成答案:

        • VL-x:是集群的标识符
        • n=y:是簇中元素的个数
        • c=[z, ...]:是簇的质心,与 z 是不同维度的权重
        • r=[z, ...]:是簇的半径。

        更多信息在这里: https://mahout.apache.org/users/clustering/cluster-dumper.html

        【讨论】:

        • c=[monkey:0.7, 0.7 意味着什么?这是平均学期权重吗?如果我使用字数统计,那是平均字数猴子吗?换句话说,这个集群中的文档平均有 70% 的时间是猴子?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 2012-05-19
        • 2014-02-17
        • 2011-05-03
        • 2012-02-17
        • 2021-12-18
        相关资源
        最近更新 更多