이상한 데이터를 제거하기 위해 DBSCAN을 사용하여 데이터를 클러스터링합니다. 계산은 scikit-learn에서 DBSCAN의 구현이 거의 1GB의 데이터를 처리 할 수 없기 때문에 매우 많은 메모리를 소비합니다. 문제가 이미 언급되었습니다. hereDBSCAN (대규모 매트릭스 계산)을 사용한 클러스터링 중 메모리 오류
다음 코드의 병목 현상은 매우 많은 메모리를 소비합니다 (매트릭스 크기 : 10mln x 10mln). DBSCAN의 계산을 최적화하는 방법이 있습니까?
간략한 연구에 따르면 매트릭스는 희박한 매트릭스로 축소되어야 계산이 가능합니다. 이 문제를 해결하는 방법을
내 아이디어 :
- 생성 및 스파 스 매트릭스를 계산 행렬의
- 계산 부품 파일에 저장하고 나중에
- 을 병합 데이터의 작은 부분 집합에 DBSCAN을 수행 및 ELKI 도구 자바에 결과를
- 스위치를 통합하고 사용
코드 :
import numpy as np
import pandas as pd
import sklearn
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import DBSCAN
# sample data
speed = np.random.uniform(0,25,1000000)
power = np.random.uniform(0,3000,1000000)
# create a dataframe
data_dict = {'speed': speed,
'power': power}
df = pd.DataFrame(data_dict)
# convert to matrix
df = df.as_matrix().astype("float64", copy = False)
X = data
# normalize data
X = StandardScaler().fit_transform(X)
# precompute matrix of distances
dist_matrix = sklearn.metrics.pairwise.euclidean_distances(X, X)
# perform DBSCAN clustering
db = DBSCAN(eps=0.1, min_samples=60, metric="precomputed", n_jobs=-1).fit(dist_matrix)
[scikit-learn DBSCAN 메모리 사용법] (https://stackoverflow.com/questions/16381577/scikit-learn-dbscan-memory-usage)의 가능한 복제본 –