2013-04-09 7 views
2

scikit-learn에서 DBSCAN 구현을 이해하려고하는데 문제가 있습니다. Python의 DBSCAN : 예기치 않은 결과

X = [[0,0],[0,1],[1,1],[1,2],[2,2],[5,0],[5,1],[5,2],[8,0],[10,0]] 

그럼 제가
D = distance.squareform(distance.pdist(X)) 

D

각 지점과 다른 모든 간의 거리 행렬을 반환 제공된 예에서와 같이 D를 계산한다 : 여기 내 데이터 샘플이다. 대각 내가 같이 DBSCAN 실행할이어서 따라서 항상 0

있다 : I는 물론 문서를 이해하면,

db = DBSCAN(eps=1.1, min_samples=2).fit(D) 

eps = 1.1 수단 작거나 1.1 같음 클러스터에서 고려 될 것이다 거리 요점 (핵심). 두번째 점은 제 1 및 제 1의 거리가 의미

>>> D[1] 
array([ 1.  , 0.  , 1.  , 1.41421356, 
    2.23606798, 5.09901951, 5.  , 5.09901951, 
    8.06225775, 10.04987562]) 

:

D[1]는 다음 반환한다. 그래서 클러스터를 구축 할 것을 기대하지만 ...

>>> db.core_sample_indices_ 
[] 

즉, 코어가 발견되지 않았습니까? 다음은 다른 2 개의 출력입니다.

왜 클러스터가 있습니까?

답변

4

은 거리 매트릭스가 데이터 자체라고 가정합니다..

참조 : 일반적으로 DBSCAN의 전체 거리 행렬을 계산하지 않지만 더 빠른 이웃 검색을 위해 데이터 인덱스를 사용합니다. 1 분 구글에서 판단

, 이후 추가 metric="precomputed" 고려해

피트 (X)

X : 시료 간의 거리, 또는 피쳐 배열의 배열. 메트릭이 '사전 계산 됨'이 아니면 배열은 형상 배열로 처리됩니다.

+0

scikit-learn의 DBSCAN 구현은 인덱스 구조를 사용하지 않으므로 2 차 시간이 걸립니다. 그러나 당신은'metric = "precomputed"에 대해 옳다. 그래서 +1. –

+0

감사합니다. 오류를 찾으려고했지만 정확한 위치를 모르는 경우 검색하기가 쉽지 않습니다. 내가 쓴 것처럼, 나는 문서를 잘 이해하지 못했다. 감사! – otmezger