#k-means #聚类 # #均值

nightly kmeans_smid

一个小巧快速的k-means聚类计算库。修复了从kmeans-rs中继承的smid问题。

3个不稳定版本

0.3.0 2024年6月13日
0.2.3 2024年6月13日
0.2.2 2024年6月13日

#1273 in 算法

Apache-2.0

91KB
1.5K SLoC

kmeans_smid

Current Crates.io Version docs

kmeans_smid是一个小巧快速的k-means聚类计算库。它修复了kmeans crate中的smid问题。以下是一个小示例,使用kmean++作为初始化方法,使用lloyd作为k-means变体。

use kmeans_smid::*;

fn main() {
    let (sample_cnt, sample_dims, k, max_iter) = (20000, 200, 4, 100);

    // Generate some random data
    let mut samples = vec![0.0f64;sample_cnt * sample_dims];
    samples.iter_mut().for_each(|v| *v = rand::random());

    // Calculate kmeans, using kmean++ as initialization-method
    let kmean = KMeans<f64, 8>::new(samples, sample_cnt, sample_dims);
    let result = kmean.kmeans_lloyd(k, max_iter, KMeans::init_kmeanplusplus, &KMeansConfig::default());

    println!("Centroids: {:?}", result.centroids);
    println!("Cluster-Assignments: {:?}", result.assignments);
    println!("Error: {}", result.distsum);
}

数据结构

出于性能考虑,所有计算都在裸向量上完成,使用来自packed_simd crate的手写SIMD内联函数。所有向量都按行存储,因此每个样本存储在连续的内存块中。

支持的变体/算法

  • lloyd (标准k-means)
  • minibatch

支持的质心初始化方法

  • KMean++
  • 随机分区
  • 随机抽样

依赖项

~2MB
~40K SLoC