1.0.12 • Published 7 months ago

@thi.ng/k-means v1.0.12

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
7 months ago

k-means

npm version npm downloads Twitter Follow

This project is part of the @thi.ng/umbrella monorepo.

About

Configurable k-means & k-medians (with k-means++ initialization) for n-D vectors.

Status

BETA - possibly breaking changes forthcoming

Search or submit any issues for this package

Installation

yarn add @thi.ng/k-means

ES module import:

<script type="module" src="https://cdn.skypack.dev/@thi.ng/k-means"></script>

Skypack documentation

For Node.js REPL:

# with flag only for < v16
node --experimental-repl-await

> const kMeans = await import("@thi.ng/k-means");

Package sizes (gzipped, pre-treeshake): ESM: 987 bytes

Dependencies

Usage examples

Several demos in this repo's /examples directory are using this package.

A selection:

ScreenshotDescriptionLive demoSource
Color palette generation via dominant color extraction from uploaded imagesDemoSource
Image dithering and remapping using indexed palettesDemoSource

API

Generated API docs

Example usage:

import { kmeans, meansLatLon } from "@thi.ng/k-means";
import { HAVERSINE_LATLON } from "@thi.ng/distance";

// data from: https://simplemaps.com/data/world-cities
const items = [
    { id: "berlin", latlon: [52.5167, 13.3833] },
    { id: "boston", latlon: [42.3188, -71.0846] },
    { id: "detroit", latlon: [42.3834, -83.1024] },
    { id: "kyoto", latlon: [35.0111, 135.7669] },
    { id: "london", latlon: [51.5072, -0.1275] },
    { id: "new york", latlon: [40.6943, -73.9249] },
    { id: "osaka", latlon: [34.6936, 135.5019] },
    { id: "paris", latlon: [48.8566, 2.3522] },
    { id: "philadelphia", latlon: [40.0077, -75.1339] },
    { id: "tokyo", latlon: [35.6897, 139.6922] },
    { id: "vienna", latlon: [48.2083, 16.3731] },
];

// cluster based on lat/lon
const clusters = kmeans(
    3,
    items.map((x) => x.latlon),
    {
        // custom centroid calc for geo locations
        // https://docs.thi.ng/umbrella/k-means/modules.html#meansLatLon
        strategy: meansLatLon,
        // custom distance function for geo location (default: DIST_SQ)
        dist: HAVERSINE_LATLON
    }
);

// print each cluster
for (let c of clusters) {
    console.log(c.items.map((i) => items[i].id));
}

// [ 'boston', 'detroit', 'new york', 'philadelphia' ]
// [ 'kyoto', 'osaka', 'tokyo' ]
// [ 'berlin', 'london', 'paris', 'vienna' ]

Authors

Karsten Schmidt

If this project contributes to an academic publication, please cite it as:

@misc{thing-k-means,
  title = "@thi.ng/k-means",
  author = "Karsten Schmidt",
  note = "https://thi.ng/k-means",
  year = 2021
}

License

© 2021 Karsten Schmidt // Apache Software License 2.0

1.0.12

7 months ago

1.0.11

8 months ago

1.0.9

8 months ago

1.0.10

8 months ago

1.0.8

8 months ago

1.0.7

9 months ago

1.0.6

9 months ago

1.0.5

9 months ago

1.0.4

9 months ago

1.0.2

9 months ago

1.0.3

9 months ago

1.0.1

10 months ago

0.7.19

10 months ago

0.7.18

10 months ago

0.7.17

11 months ago

0.7.15

11 months ago

0.7.16

11 months ago

0.7.14

12 months ago

0.7.13

12 months ago

0.7.12

12 months ago

0.7.2

1 year ago

0.7.1

1 year ago

0.7.4

1 year ago

0.7.3

1 year ago

0.7.0

1 year ago

0.7.11

1 year ago

0.7.10

1 year ago

0.6.94

1 year ago

0.6.93

1 year ago

0.6.95

1 year ago

0.6.90

1 year ago

0.6.92

1 year ago

0.6.91

1 year ago

0.7.9

1 year ago

0.6.89

1 year ago

0.7.6

1 year ago

0.7.5

1 year ago

0.7.8

1 year ago

0.7.7

1 year ago

0.6.88

1 year ago

0.6.87

1 year ago

0.6.86

1 year ago

0.6.85

1 year ago

0.6.84

2 years ago

0.6.83

2 years ago

0.6.82

2 years ago

0.6.81

2 years ago

0.6.80

2 years ago

0.6.79

2 years ago

0.6.78

2 years ago

0.6.77

2 years ago

0.6.76

2 years ago

0.6.75

2 years ago

0.6.74

2 years ago

0.6.73

2 years ago

0.6.72

2 years ago

0.6.71

2 years ago

0.6.70

2 years ago

0.6.67

2 years ago

0.6.69

2 years ago

0.6.68

2 years ago

0.6.65

2 years ago

0.6.66

2 years ago

0.6.64

2 years ago

0.6.63

2 years ago

0.6.62

2 years ago

0.6.61

2 years ago

0.6.60

2 years ago

0.6.58

2 years ago

0.6.59

2 years ago

0.6.57

2 years ago

0.6.56

2 years ago

0.6.54

2 years ago

0.6.55

2 years ago

0.6.53

2 years ago

0.6.52

2 years ago

0.6.51

2 years ago

0.6.50

2 years ago

0.6.49

2 years ago

0.6.48

2 years ago

0.6.43

2 years ago

0.6.42

2 years ago

0.6.45

2 years ago

0.6.44

2 years ago

0.6.41

2 years ago

0.6.40

2 years ago

0.6.47

2 years ago

0.6.46

2 years ago

0.6.32

2 years ago

0.6.31

2 years ago

0.6.34

2 years ago

0.6.33

2 years ago

0.6.30

2 years ago

0.6.39

2 years ago

0.6.36

2 years ago

0.6.35

2 years ago

0.6.38

2 years ago

0.6.37

2 years ago

0.6.21

2 years ago

0.6.20

2 years ago

0.6.23

2 years ago

0.6.22

2 years ago

0.6.29

2 years ago

0.6.28

2 years ago

0.6.25

2 years ago

0.6.24

2 years ago

0.6.27

2 years ago

0.6.26

2 years ago

0.6.18

2 years ago

0.6.19

2 years ago

0.6.17

2 years ago

0.6.16

2 years ago

0.6.15

2 years ago

0.6.14

2 years ago

0.6.13

2 years ago

0.6.12

2 years ago

0.6.11

2 years ago

0.6.7

3 years ago

0.6.6

3 years ago

0.6.9

3 years ago

0.6.8

3 years ago

0.6.10

3 years ago

0.6.5

3 years ago

0.6.3

3 years ago

0.6.4

3 years ago

0.6.2

3 years ago

0.5.40

3 years ago

0.6.1

3 years ago

0.6.0

3 years ago

0.5.38

3 years ago

0.5.39

3 years ago

0.5.36

3 years ago

0.5.37

3 years ago

0.5.35

3 years ago

0.5.32

3 years ago

0.5.33

3 years ago

0.5.30

3 years ago

0.5.31

3 years ago

0.5.34

3 years ago

0.5.29

3 years ago

0.5.27

3 years ago

0.5.28

3 years ago

0.5.25

3 years ago

0.5.26

3 years ago

0.5.23

3 years ago

0.5.24

3 years ago

0.5.22

3 years ago

0.5.18

3 years ago

0.5.19

3 years ago

0.5.16

3 years ago

0.5.17

3 years ago

0.5.15

3 years ago

0.5.21

3 years ago

0.5.20

3 years ago

0.5.10

3 years ago

0.5.11

3 years ago

0.5.14

3 years ago

0.5.12

3 years ago

0.5.13

3 years ago

0.5.9

4 years ago

0.5.8

4 years ago

0.4.9

4 years ago

0.5.7

4 years ago

0.5.4

4 years ago

0.5.3

4 years ago

0.5.6

4 years ago

0.5.5

4 years ago

0.5.0

4 years ago

0.5.2

4 years ago

0.5.1

4 years ago

0.4.8

4 years ago

0.4.7

4 years ago

0.4.4

4 years ago

0.4.6

4 years ago

0.4.1

4 years ago

0.4.0

4 years ago

0.4.3

4 years ago

0.3.6

4 years ago

0.3.5

4 years ago

0.3.4

4 years ago

0.3.3

4 years ago

0.3.2

4 years ago

0.3.1

4 years ago

0.3.0

4 years ago

0.2.5

4 years ago

0.2.4

4 years ago

0.2.3

4 years ago

0.2.2

4 years ago

0.2.1

4 years ago

0.2.0

4 years ago

0.1.0

4 years ago