https://github.com/seregpie/kmeansplusplus
Implementation of the k-means-plus-plus algorithm to partition the values into the clusters.
https://github.com/seregpie/kmeansplusplus
Last synced: 5 months ago
JSON representation
Implementation of the k-means-plus-plus algorithm to partition the values into the clusters.
- Host: GitHub
- URL: https://github.com/seregpie/kmeansplusplus
- Owner: SeregPie
- License: mit
- Created: 2018-10-15T14:25:32.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-10-17T15:08:38.000Z (over 4 years ago)
- Last Synced: 2024-12-11T07:38:52.372Z (5 months ago)
- Language: JavaScript
- Homepage:
- Size: 23.4 KB
- Stars: 3
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# KMeansPlusPlus
```
KMeansPlusPlus(values, clustersCount, {
distance(value, otherValue) { /* euclidean distance */ },
map(value) { /* identity */ },
maxIterations: 1024,
mean(...values) { /* centroid */ },
random: Math.random,
})
```Implementation of the [k-means-plus-plus algorithm](https://en.wikipedia.org/wiki/k-means++) to partition the values into the clusters.
| argument | description |
| ---: | :--- |
| `values` | An iterable of the values to be clustered. |
| `clustersCount` | Nhe number of the clusters. |
| `distance` | A function to calculate the distance between two values. |
| `map` | A function to map the values. |
| `maxIterations` | The maximum number of iterations until the convergence. |
| `mean` | A function to calculate the mean value. |
| `random` | A function as the pseudo-random number generator. |Returns the clustered values as an array of arrays.
## dependencies
- [KMeans](https://github.com/SeregPie/KMeans)
- [JustMyLuck](https://github.com/SeregPie/JustMyLuck)## setup
### npm
```shell
npm install @seregpie/k-means-plus-plus
```---
Import inside an ES module.
```javascript
import KMeansPlusPlus from '@seregpie/k-means-plus-plus';
```*or*
Import inside a CommonJS module.
```javascript
let KMeansPlusPlus = require('@seregpie/k-means-plus-plus');
```### browser
```html
```
The module is globally available as `KMeansPlusPlus`.
## usage
```javascript
let vectors = [[1, 4], [6, 2], [0, 4], [1, 3], [5, 1], [4, 0]];
let clusters = KMeans(vectors, 2);
// => [[[1, 4], [0, 4], [1, 3]], [[6, 2], [5, 1], [4, 0]]]
```---
Provide a `map` function to convert a value to a vector.
```javascript
let Athlete = class {
constructor(name, height, weight) {
this.name = name;
this.height = height;
this.weight = weight;
}
toJSON() {
return this.name;
}
};
let athletes = [
new Athlete('A', 185, 72), new Athlete('B', 183, 84), new Athlete('C', 168, 60),
new Athlete('D', 179, 68), new Athlete('E', 182, 72), new Athlete('F', 188, 77),
new Athlete('G', 180, 71), new Athlete('H', 180, 70), new Athlete('I', 170, 56),
new Athlete('J', 180, 88), new Athlete('K', 180, 67), new Athlete('L', 177, 76),
];
let clusteredAthletes = KMeansPlusPlus(athletes, 2, {
map: athlete => [athlete.weight / athlete.height],
});
console.log(JSON.parse(JSON.stringify(clusteredAthletes)));
// => [['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K'], ['B', 'J', 'L']]
```