【问题标题】:Clustering string data with ELKI使用 ELKI 对字符串数据进行聚类
【发布时间】:2013-03-07 05:10:48
【问题描述】:

我需要使用 ELKI 根据编辑距离/Levenshtein 距离对大量字符串进行聚类。由于数据集太大,我想避免使用基于文件的预计算距离矩阵。我该怎么做

(a) 从文件中加载 ELKI 中的字符串数据(仅“标签”)?

(b) 实现一个访问标签的距离函数(扩展AbstractDBIDDistanceFunction,但是如何获取标签?)

一些代码 sn-ps 或示例输入文件会有所帮助。

【问题讨论】:

    标签: string cluster-analysis edit-distance elki


    【解决方案1】:

    其实很简单:

    A)编写一个适合您的输入文件格式的Parser(为什么要尝试重用为数值向量编写的解析器带标签?),可能是AbstractStreamingParser 的子类,产生所需数据类型的关系(可能你可以只使用String。如果你想更笼统一点,TokenSequence 可能是这些距离更合适的概念. 字符串只是最简单的情况。

    B) 基于此向量类型而不是 DBID 实现 DistanceFunction,即 PrimitiveDistanceFunction<String>。同样,子类化 AbstractPrimitiveDistanceFunction 可能是最简单的事情。

    出于性能原因,您可能还想研究索引算法来检索例如k 最相似的字符串有效。我不确定字符串编辑距离和 levenshtein 距离存在哪些索引结构。

    一位同事有一个学生,他显然有一些工作令牌编辑距离,但我还没有看到或审查过代码。在处理日志文件时,他可能会使用基于令牌的方法而不是字符。

    【讨论】:

    • 感谢您的快速而有用的建议 - 现在可以使用了。我唯一改变的是扩展AbstractParserParser 而不是AbstractStreamingParser(例如BitVectorLabelParser),因为当我生成带有AbstractStreamingParser 子类的字符串时,我得到了[1]。如果需要,我将研究索引算法。 [1]NoSupportedDataTypeException: No data type found satisfying: String Available types: DBID...
    • 至于 [1],您可能没有发出 Event.META_CHANGED 事件。但除此之外,您是否会考虑将您的代码贡献给 ELKI,以便其他人也可以使用它?我敢肯定你不是唯一对 Levenshtein 距离和弦乐感兴趣的人。
    猜你喜欢
    • 1970-01-01
    • 2016-08-14
    • 2016-02-11
    • 1970-01-01
    • 2015-08-31
    • 2019-10-20
    • 2015-12-20
    • 2021-10-30
    • 2017-09-02
    相关资源
    最近更新 更多