【问题标题】:How to format data for the spark mlib kmeans clustering algorithm?如何为 spark mllib kmeans 聚类算法格式化数据?
【发布时间】:2015-07-09 04:49:34
【问题描述】:

我正在尝试从 apache Spark 的 mlib 库中进行 kmeans 聚类算法。我已经完成了所有设置,但我不确定如何格式化输入数据。我对机器学习比较陌生,所以任何帮助都将不胜感激。 在示例 data.txt 中,数据如下: 0.0 0.0 0.0 0.1 0.1 0.1 0.2 0.2 0.2 9.0 9.0 9.0 9.1 9.1 9.1 9.2 9.2 9.2

我要运行算法的数据现在是这种格式(json数组):

[{"customer":"ddf6022","order_id":"20031-19958","asset_id":"dd1~33","price":300,"time":1411134115000,"location":"bt2"},{"customer":"ddf6023","order_id":"23899-23825","asset_id":"dd1~33","price":300,"time":1411954672000,"location":"bt2"}]

如何将其转换为可与 k-means 聚类算法一起使用的东西?我正在使用 Java,我猜我需要它是 JavaRDD 格式,但不知道如何去做。

【问题讨论】:

    标签: java algorithm machine-learning apache-spark


    【解决方案1】:

    这是如何工作的:

    首先,您必须定义要应用 KMeans 的维度,Spark 文档中包含的 KMeans 示例适用于 3D 点数据集(XY & Z 尺寸)。考虑到 MLLib 上的 KMeans 实现能够处理 n>=1

    的 n 维集

    提案:

    因此,对于您的输入,XYZ 维度将是 JSON 字段:price时间 & 位置。然后,您所要做的就是从数据集中提取这些维度并将它们放入文本文件中,如下所示:

    300 1411134115000 2
    300 1411954672000 2
    ...
    ...
    ...
    

    位置“bt2”已替换为 2(假设您的数据集有其他位置)。您必须向 KMeans 提供数值。

    笔记/想法:

    为了获得更好的聚类结果并根据数据时间分布,如果您通过将时间戳字段转换为值来利用时间戳字段会很好:Year、Month、Day、Hour、Minute、Second 等。所以,您根据您的聚类目的,可以使用不同的维度作为单独的字段。

    另外,我猜你想进行自动 JSON2CSV 转换过程。因此,在您的映射实现中,您可以使用这样的方法:https://stackoverflow.com/a/15411074/833336

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 2016-12-16
      • 2019-05-28
      • 2016-10-04
      • 2018-08-01
      • 2016-07-08
      • 2015-04-20
      • 2017-09-29
      • 2018-04-01
      相关资源
      最近更新 更多