我在抓取的网页上运行了一个群集测试(超过25K个文档;个人数据集)。 我做了一个clusterdump:
$MAHOUT_HOME/bin/mahout clusterdump --seqFileDir output/clusters-1/ --output clusteranalyze.txt
运行集群转储器后的输出显示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。
是什么意思:
0:0.017表示“0”是属于该集群的文档ID吗?
我已经在mahout wiki页面上阅读了CL,n,c和r的含义。但是,有人可以更好地向我解释它们或者指向一个更详细解释的资源吗?
很抱歉,如果我问一些愚蠢的问题,但我是一名新手,并且使用它作为我的课程作业的一部分进行聚类。
答案 0 :(得分:4)
默认情况下,kmeans群集使用不包含数据点名称的WeightedVector。因此,您希望使用NamedVector自行创建序列文件。 seq文件的数量与映射任务之间存在一对一的对应关系。因此,如果您的映射容量为12,那么在制作seqfiles时,您希望将数据分成12个部分 NamedVecotr:
vector = new NamedVector(new SequentialAccessSparseVector(Cardinality),arrField[0]);
基本上,您需要从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();
}
}
}
答案 1 :(得分:1)
完成答案:
更多信息: https://mahout.apache.org/users/clustering/cluster-dumper.html
答案 2 :(得分:0)
我认为您需要阅读源代码 - 从http://mahout.apache.org下载。 VL-24130
只是聚合群集的群集标识符。
答案 3 :(得分:-1)
您可以使用mahout clusterdump https://cwiki.apache.org/MAHOUT/cluster-dumper.html