#cluster #density #deviation #data-science #dynamic

kddbscan

A k -Deviation Density Based Clustering Algorithm (kDDBSCAN)

1 个不稳定版本

0.1.0 2020年6月13日

#6 in #deviation

MIT 协议

26KB
317

kddbscan-rs

GitHub Actions MIT licensed Released API docs Master API docs

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);
}

展示

这是示例项目的输出。

Output of the kddbscan algorithm

贡献

欢迎所有 PR 和问题。贡献也是受欢迎的。

许可证

本项目采用 MIT 许可证,算法采用 CC BY 4.0 许可证。

依赖项

~240KB