【问题标题】:How to perform k-means clustering in mahout with vector data stored as CSV?如何使用存储为 CSV 的矢量数据在 mahout 中执行 k-means 聚类?
【发布时间】:2012-02-05 19:25:07
【问题描述】:

我有一个包含数据向量的文件,其中每一行都包含一个以逗号分隔的值列表。我想知道如何使用 mahout 对这些数据执行 k-means 聚类。 wiki 中提供的示例提到了创建 sequenceFiles,但是我不确定是否需要进行某种类型的转换才能获得这些 sequenceFiles。

【问题讨论】:

  • 您是否需要使用 mahout 来完成这项工作,或者其他什么都可以?有很多集群 api、工具、示例代码等可以很容易地做到这一点。如果您只有一个文件,您的数据点可能会非常小,理论上 Mahout 是针对大规模问题的。
  • 我正在从这里查看聚类数据集:grouplens.org/node/73 最大的数据集可能包含 10,000 x 72,000 个数据点。这就是为什么我认为 mahout 可能是最好的,当我尝试加载较小的数据集时 WEKA 崩溃
  • 试试glaros.dtc.umn.edu/gkhome/software,Weka也有SDK。 k-means 在大多数语言中实现起来非常简单,所以我相信你可以在 google 上找到一些代码 sn-ps

标签: mahout k-means


【解决方案1】:

我建议手动读取 CSV 文件中的条目,从中创建 NamedVectors,然后使用序列文件编写器将向量写入序列文件。从那里开始,KMeansDriver 运行方法应该知道如何处理这些文件。

序列文件对键值对进行编码,因此键是样本的 ID(应该是字符串),值是向量周围的 VectorWritable 包装器。

下面是一个简单的代码示例,说明如何做到这一点:

 List vector = new LinkedList();
    命名向量 v1;
    v1 = new NamedVector(new DenseVector(new double[] {0.1, 0.2, 0.5}), "第一个项目");
    向量.add(v1);

    配置配置 = 新配置();
    文件系统 fs = FileSystem.get(config);

    路径 path = new Path("datasamples/data");

    //写一个SequenceFile形成一个Vector
    SequenceFile.Writer writer = new SequenceFile.Writer(fs, config, path, Text.class, VectorWritable.class);
    VectorWritable vec = new VectorWritable();
    for(NamedVector v:vector){
        vec.set(v);
        writer.append(new Text(v.getName()), v);
    }
    writer.close();

另外,我建议阅读Mahout in Action 的第 8 章。它提供了有关 Mahout 中数据表示的更多详细信息。

【讨论】:

  • 您知道如何从聚类结果中获取向量名称吗?见stackoverflow.com/questions/14476706/…
  • 您的示例中有一个小错误(顺便说一句,感谢您发布它)。而不是“writer.append(new Text(v.getName()), v);”我认为它需要是“write.append(new Text(v.getName()), vec);”。否则你会得到一个异常说“java.io.IOException:错误的值类:org.apache.mahout.math.NamedVector is not class org.apache.mahout.math.VectorWritable”
【解决方案2】:

也许你可以用象鸟来写象形符格式的向量

https://github.com/kevinweil/elephant-bird#hadoop-sequencefiles-and-pig

【讨论】:

    猜你喜欢
    • 2012-01-24
    • 2014-05-05
    • 2011-03-31
    • 2020-10-30
    • 1970-01-01
    • 2016-07-28
    • 2013-02-07
    • 2021-10-11
    相关资源
    最近更新 更多