npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

ml-kmeans

v7.0.1

Published

K-Means clustering

Readme

ml-kmeans

K-means clustering aims to partition n observations into k clusters in which each observation belongs to the cluster with the nearest mean.

NPM version npm download test coverage license

Installation

npm i ml-kmeans

API Documentation

Usage

import { kmeans } from 'ml-kmeans';

const data = [
  [1, 1, 1],
  [1, 2, 1],
  [-1, -1, -1],
  [-1, -1, -1.5],
];
const centers = [
  [1, 2, 1],
  [-1, -1, -1],
];

const ans = kmeans(data, 2, { initialization: centers });
console.log(ans);
/*
KMeansResult {
  clusters: [ 0, 0, 1, 1 ],
  centroids: [ [ 1, 1.5, 1 ], [ -1, -1, -1.25 ] ],
  converged: true,
  iterations: 2,
  distance: [Function: squaredEuclidean]
}
*/

// Compute the mean error and size of each cluster.
console.log(ans.computeInformation(data));
/*
[
  { centroid: [ 1, 1.5, 1 ], error: 0.25, size: 2 },
  { centroid: [ -1, -1, -1.25 ], error: 0.0625, size: 2 }
]
*/

// Assign new points to the clusters found above.
console.log(ans.nearest([[1, 2, 1]]));
// [ 0 ]

API

kmeans(data, k, options)

Runs the K-means algorithm and returns a KMeansResult.

  • data: array of points to cluster, each in the format [x, y, z, ...].
  • k: number of clusters.
  • options: an optional object with the following properties.

| Option | Type | Default | Description | | ------------------ | -------------------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | | initialization | string or number[][] | 'kmeans++' | Either custom start centroids ([x, y, z, ...]), or one of the methods 'kmeans++', 'random', or 'mostDistant'. | | maxIterations | number | 100 | Maximum number of iterations allowed. Set to 0 to iterate until convergence. | | tolerance | number | 1e-6 | Error tolerance used as the convergence criterion. | | distanceFunction | (p, q) => number | squaredEuclidean | Distance function to use between two points. | | seed | number | (none) | Seed for the random number generator, used by the 'random' and 'mostDistant' initialization methods to make results reproducible. |

Initialization methods

  • 'kmeans++': uses the kmeans++ seeding method.
  • 'random': chooses k random distinct points.
  • 'mostDistant': chooses the most distant points starting from a first random pick.

KMeansResult

The object returned by kmeans.

  • clusters: array with the cluster index of each input point.
  • centroids: array with the resulting centroids.
  • converged: whether the convergence criterion was satisfied.
  • iterations: number of iterations performed.
  • result.nearest(points): returns the cluster index of each of the given new points.
  • result.computeInformation(data): returns the centroid, mean error, and size of each cluster.

kmeansGenerator(data, k, options)

Generator variant of kmeans that yields the KMeansResult of each iteration, which is useful to observe the algorithm step by step.

Authors

Sources

D. Arthur, S. Vassilvitskii, k-means++: The Advantages of Careful Seeding, in: Proc. of the 18th Annual ACM-SIAM Symposium on Discrete Algorithms, 2007, pp. 1027–1035. Link to article

License

MIT