1 个不稳定版本
0.1.0 | 2020年6月13日 |
---|
#6 in #deviation
26KB
317 行
kddbscan-rs
Rust 实现的 kddbscan 聚类算法。
由 kDDBSCAN 算法的作者提供。
由于采用了全局参数,DBSCAN 无法识别具有不同和变化密度的簇。为了解决这个问题,本文通过利用新的密度定义扩展了 DBSCAN,并提出了一种称为基于 k -偏差密度的 DBSCAN (kDDBSCAN) 的新算法。使用包含具有任意形状和不同或变化密度的簇的各种数据集来展示 kDDBSCAN 的性能,并研究其可行性和实用性。结果表明,kDDBSCAN 的性能优于 DBSCAN。
安装
将 kddbscan
添加到您的 Cargo.toml
文件中的依赖项
[dependencies]
kddbscan = "0.1.0"
使用方法
在您的点结构上实现 IntoPoint
特征。然后将点的向量传递给 cluster
函数。
use kddbscan::{cluster, IntoPoint, ClusterId};
pub struct Coordinate {
pub x: f64,
pub y: f64,
}
impl IntoPoint for Coordinate {
fn get_distance(&self, neighbor: &Coordinate) -> f64 {
((self.x - neighbor.x).powi(2) + (self.y - neighbor.y).powi(2)).powf(0.5)
}
}
fn main() {
let mut coordinates: Vec<Coordinate> = vec![];
coordinates.push(Coordinate { x: 11.0, y: 12.0 });
coordinates.push(Coordinate { x: 0.0, y: 0.0 });
coordinates.push(Coordinate { x: 12.0, y: 11.0 });
coordinates.push(Coordinate { x: 11.0, y: 9.0 });
coordinates.push(Coordinate { x: 10.0, y: 8.0 });
coordinates.push(Coordinate { x: 1.0, y: 2.0 });
coordinates.push(Coordinate { x: 3.0, y: 1.0 });
coordinates.push(Coordinate { x: 4.0, y: 4.0 });
coordinates.push(Coordinate { x: 9.0, y: 0.0 });
let clustered = cluster(coordinates, 2, None, None);
}
展示
这是示例项目的输出。
贡献
欢迎所有 PR 和问题。贡献也是受欢迎的。
许可证
本项目采用 MIT 许可证,算法采用 CC BY 4.0 许可证。
依赖项
~240KB