#聚类 #模糊 #局部 #逼近 #火焰 #关系 #对象

flame-clustering

基于局部成员近似模糊聚类(FLAME)

4 个版本

0.2.2 2023年6月19日
0.2.1 2023年6月3日
0.2.0 2023年2月20日
0.1.0 2023年2月14日

#876算法

每月 35 次下载

BSD-3-Clause

33KB
640

flame-clustering

描述

Fuzzy clustering by Local Approximation of MEmberships (FLAME) 是一种数据聚类算法,它定义了数据集密集部分的簇,并仅基于对象之间的邻域关系进行簇分配。

该算法首次在以下文献中描述:"FLAME,一种用于分析 DNA 微阵列数据的创新模糊聚类方法",BMC Bioinformatics,2007,8:3。可从以下链接获取:http://www.biomedcentral.com/1471-2105/8/3

这个 Rust 库是从原始的 C 实现 调整而来。

使用示例

以下是一个如何使用库进行聚类的简化示例

use flame_clustering::DistanceGraph;

let data: Vec<f64> = vec![0.12, 0.23, 0.15, 0.19, 100.0];
let (clusters, outliers) = DistanceGraph::build(&data, |a, b| (a - b).abs())
    .find_supporting_objects(2, -1.0)
    .approximate_fuzzy_memberships(100, 1e-6)
    .make_clusters(-1.0);

assert_eq!(format!("{clusters:?}"), "[[0, 1, 3, 2]]");
assert_eq!(format!("{outliers:?}"), "[4]");

输出是原始数据集索引的序列。在上面的示例中,识别出一个包含数字 [0.12, 0.15, 0.19, 0.23] 的簇,并且 100.0 被识别为异常值。

有关方法参数的更多信息,请参阅库文档。

兼容性说明

Rust 实现与原始库在以下方面有所不同

  • 将单个 Flame 结构体替换为构建器风格的 API。有关详细信息,请参阅库文档。
  • 已修改代码以接受用户提供的距离函数。
  • 目前尚不支持直接指定距离矩阵。
  • 异常值不再自动分配到最近的簇。默认情况下,异常值保持为异常值;为了保留原始行为,需要调用新的 assign_outliers() 方法。
  • 聚类算法使用 64 位浮点数,而原始算法主要使用 32 位数字。这导致与 C 实现相比存在细微的数值差异。
  • 原始库提供了 Flame_DotProductFlame_DotProductDist 距离方法,但我没有在这里包含它们。
  • 原始实现中没有包含测试。在代码移植过程中,为了开发辅助添加了一些单元测试,但测试覆盖率不完整。
  • 对代码中的注释进行了轻微的语法修正。

依赖关系

~1.5MB
~38K SLoC