【发布时间】:2020-10-29 01:47:47
【问题描述】:
我有一个包含近 4000000 个条目的数据框。基于 3 个特征,我想找到每个点与其第 1000 个最近邻居之间的距离。到目前为止,我已经尝试过这样的:
from sklearn.neighbors import NearestNeighbors
neigh = NearestNeighbors(n_neighbors=1000)
nbrs = neigh.fit(df[features])
distances, indices = nbrs.kneighbors(df[features])
Afterwars 我会对distances 数组进行切片,以获得一个数组,其中每个条目的距离仅为第 1000 个最近邻居,因为这是我唯一关心的一个。但是我没有走那么远,因为我没有足够的内存来存储形状为 (4000000, 1000) 的数组。
有没有办法可以只保存到第 1000 个邻居的距离并丢弃所有其他 999?
背景是我正在努力寻找适合 epsilon 运行 DBSCAN 算法的方法,但显然我的数据点彼此太接近。我已经为 5 个和 100 个邻居尝试了上面的代码。然而,除了一些异常值之外,距离几乎为 0。 Quantiles for distances to the 100th neighbor
【问题讨论】:
-
尝试使用 KDTree:scikit-learn.org/stable/modules/generated/…
标签: python scikit-learn dbscan