#dbscan #clustering #data-points #data-file #approximated

nightly bin+lib appr_dbscan_rust

基于 Gan 和 Tao 提出的近似 DBSCAN 算法的 Rust 实现

3 个版本

0.1.2 2020 年 10 月 22 日
0.1.1 2020 年 10 月 21 日
0.1.0 2020 年 10 月 21 日

#24 in #data-points

MIT/Apache

1.5MB
1K SLoC

appr_dbscan_rust

本库实现了 Gan 和 Tao 在这篇论文中提出的近似 DBSCAN 算法的 Rust 实现

支持的数据文件格式

接受的数据文件应包含每行一个数据点,且不包含其他内容。每行应包含点的组成部分,由空格分隔。

每个点的组成部分将被读取并存储为 64 位浮点变量

示例

1.0 1.1 0.5
2.3 3.4 6.2
...

用法

本库中有四个主要函数,它们接受的输入类型不同

警告

以下每个函数都期望数据文件中的所有点具有相同的维度,否则会引发恐慌。

固定维度数据文件的近似 DBSCAN

如果每个点的维度是静态已知的(因此不是其他计算的结果),则可以使用此函数

pub fn do_appr_dbscan_file<P, const D: usize>(
    filename: P, 
    epsilon: f64, 
    rho: f64, 
    min_pts: usize
) -> DBSCANResult<D> 
where
    P: AsRef<Path>, 

示例

extern crate appr_dbscan;
use appr_dbscan::do_appr_dbscan_file;
use appr_dbscan::utils::DBSCANResult;
 
let res : DBSCANResult<2> = do_appr_dbscan_file("./datasets/out_test_1.txt", 0.3, 0.1, 10);
let clusters_count = res.len() - 1;
let noise_points_count = res[0].len();

未知维度数据文件的近似 DBSCAN

如果数据点的维度不是静态已知的(例如,如果有一个循环遍历多个不同维度的文件),则可以使用此函数

pub fn do_appr_dbscan_auto_dimensionality_file<P>(
    filename: P, 
    epsilon: f64, 
    rho: f64, 
    min_pts: usize
) -> (VectorDBSCANResult, usize) 
where
    P: AsRef<Path>, 

示例

extern crate appr_dbscan;
use appr_dbscan::do_appr_dbscan_auto_dimensionality_file;

let (res,dimensionality) = do_appr_dbscan_auto_dimensionality_file("./datasets/out_test_1.txt", 0.3, 0.1, 10);
println!("Points dimensionality: {}",dimensionality);
let clusters_count = res.len() - 1;
let noise_points_count = res[0].len();

固定维度点的向量近似 DBSCAN

如果您有一个点的类型为 Vec<[f64;D]> 的向量,则可以使用此函数

pub fn do_appr_dbscan_points<const D: usize>(
    points: Vec<Point<D>>, 
    epsilon: f64, 
    rho: f64, 
    min_pts: usize
) -> DBSCANResult<D>

示例

extern crate appr_dbscan;
use appr_dbscan::do_appr_dbscan_points;
use appr_dbscan::utils::DBSCANResult;
 
let points = vec![[0.0,0.0],[1.0,1.0],[0.0,1.0],[1.0,0.0],[2.0,1.0],[0.0,2.0],[2.0,1.0],[1.0,1.0]];
let res : DBSCANResult<2> = do_appr_dbscan_points(points, 0.3, 0.1, 10);
let clusters_count = res.len() - 1;
let noise_points_count = res[0].len();

未知维度点的向量近似 DBSCAN

如果您有一个点的类型为 Vec<Vec<f64>> 的向量(例如,如果您在一个循环中聚类不同的向量),则可以使用此函数

pub fn do_appr_dbscan_auto_dimensionality_points(
    points: Vec<VectorPoint>, 
    epsilon: f64, 
    rho: f64, 
    min_pts: usize
) -> (VectorDBSCANResult, usize)

示例

extern crate appr_dbscan;
use appr_dbscan::do_appr_dbscan_auto_dimensionality_points;

let points = vec![vec![0.0,0.0],vec![1.0,1.0],vec![0.0,1.0],vec![1.0,0.0],vec![2.0,1.0],vec![0.0,2.0],vec![2.0,1.0],vec![1.0,1.0]];
let (res, dimensionality) = do_appr_dbscan_auto_dimensionality_points(points, 0.3, 0.1, 10);
println!("Points dimensionality: {}",dimensionality);
let clusters_count = res.len() - 1;
let noise_points_count = res[0].len();

依赖项