<title>Analyze · Clustering</title>
<description>Density-based clustering over **columns** using precomputed distances between series.</description>
<keywords>analyze, clustering, class, dbscan, public, fields, hdbscan, js, new, data, record, string</keywords>

# Analyze · Clustering

Density-based clustering over **columns** using precomputed distances between series.

## Class: `Dbscan`

**Constructor**

```js
new Dbscan(data: Record<string, number[]>, options?: { eps?: number, minPts?: number, metric?: 'mad' })
```

- `eps` (default `0.4`), `minPts` (default `3`), `metric` (default `'mad'`).

### Public fields

- `metric: string`
- `eps: number` · `minPts: number`
- `labels: number[]` – `0` unvisited, `-1` noise, `1..` cluster id per column.
- `clusters: Array<{ id:number, columns:string[] }>` – built by `buildClusters`.
- `distances: number[][]` – symmetric distance matrix.
- Core methods (invoked by constructor): `findNeighbors(i)`, `expandCluster(i, clusterId)`, `run()`.

## Class: `Hdbscan`

**Constructor**

```js
new Hdbscan(data: Record<string, number[]>, options?: { metric?: 'mad', minClusterSize?: number })
```

- `minClusterSize` defaults to `2`.

### Public fields

- `metric: string`, `minClusterSize: number`
- `labels: number[]` – final labels per column.
- `clusters: Array<{ id:number, columns:string[] }>`
- `mreachDistances: number[][]` – mutual reachability distances.
- `mst: Array<[i,j,weight]>` – minimum spanning tree.
- `hierarchy: Array<{ clusterId, lambdaBirth, lambdaDeath, points, size, children }>`
