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 次下载
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_DotProduct
和Flame_DotProductDist
距离方法,但我没有在这里包含它们。 - 原始实现中没有包含测试。在代码移植过程中,为了开发辅助添加了一些单元测试,但测试覆盖率不完整。
- 对代码中的注释进行了轻微的语法修正。
依赖关系
~1.5MB
~38K SLoC