Scikit Learn 为 70 万个具有 2 列(纬度和经度)的数据点实施 DBSCAN 消耗 128GB+ RAM。如何解决这个内存问题?
Posted
技术标签:
【中文标题】Scikit Learn 为 70 万个具有 2 列(纬度和经度)的数据点实施 DBSCAN 消耗 128GB+ RAM。如何解决这个内存问题?【英文标题】:Scikit Learn implementation of DBSCAN for 0.7 million data points with 2 columns (Lat and Long) consumes 128GB+ RAM. How to fix this memory issue? 【发布时间】:2019-10-21 22:02:59 【问题描述】:在为 2 列(纬度和经度)的 70 万个数据点实施 scikit learn 的 DBSCAN 时,我们遇到了内存问题。
我们还尝试将 epsilon 值更改为较小的数字,并减少集群所需的最小点数。
import pandas as pd, numpy as np, matplotlib.pyplot as plt, time
from sklearn.cluster import DBSCAN
from sklearn import metrics
from geopy.distance import great_circle
from shapely.geometry import MultiPoint
%matplotlib inline
kms_per_radian = 6371.0088
df = pd.read_csv('data/xxxxxxxxx.csv', encoding='utf-8')
// represent points consistently as (lat, lon).
coords = df.as_matrix(columns=['lat', 'lon'])
// define epsilon as 1.5 kilometers, converted to radians for use by haversine.
epsilon = 1.5 / kms_per_radian
db = DBSCAN(eps=epsilon, min_samples=1, algorithm='ball_tree', metric='haversine').fit(np.radians(coords))
内核自动终止。请提出优化代码的方法。
【问题讨论】:
scikit-learn DBSCAN memory usage的可能重复 在这里找到答案:***.com/questions/16381577/… 【参考方案1】:DBScan 预先计算完整的 O(n^2) 距离矩阵。可能的解决方案是尝试并降低您的 eps 值。
【讨论】:
这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review以上是关于Scikit Learn 为 70 万个具有 2 列(纬度和经度)的数据点实施 DBSCAN 消耗 128GB+ RAM。如何解决这个内存问题?的主要内容,如果未能解决你的问题,请参考以下文章