Source code for densitree.steps.density

from __future__ import annotations
import numpy as np
from sklearn.neighbors import NearestNeighbors
from .base import BaseStep


[docs] class DensityEstimator(BaseStep): """Estimate local density for each cell using k-NN. Density is defined as 1 / (distance to k-th nearest neighbor + eps), so cells in dense regions get high density values. """ def __init__(self, knn: int = 5, eps: float = 1e-8) -> None: self.knn = knn self.eps = eps
[docs] def run(self, data: np.ndarray, **ctx) -> dict: nn = NearestNeighbors(n_neighbors=self.knn + 1) # +1 because cell is its own neighbor nn.fit(data) distances, _ = nn.kneighbors(data) kth_dist = distances[:, self.knn] # distance to k-th neighbor (excluding self) density = 1.0 / (kth_dist + self.eps) return {"density": density}