DBSCAN
과 같은 클러스터링 알고리즘을 사용하고 있습니다.sklearn : 포인트에서 가장 가까운 클러스터까지의 거리
-1
이라는 '클러스터'는 어떤 클러스터에도 속하지 않는 점을 반환합니다. 이 점에 대해이 점이 얼마나 비정상인지에 대한 척도와 같은 것을 얻기 위해 가장 가까운 클러스터까지의 거리를 결정하고 싶습니다. 이것이 가능한가? 또는 이러한 종류의 메트릭에 대한 대안이 있습니까?
DBSCAN
과 같은 클러스터링 알고리즘을 사용하고 있습니다.sklearn : 포인트에서 가장 가까운 클러스터까지의 거리
-1
이라는 '클러스터'는 어떤 클러스터에도 속하지 않는 점을 반환합니다. 이 점에 대해이 점이 얼마나 비정상인지에 대한 척도와 같은 것을 얻기 위해 가장 가까운 클러스터까지의 거리를 결정하고 싶습니다. 이것이 가능한가? 또는 이러한 종류의 메트릭에 대한 대안이 있습니까?
답변은 선택한 연결 전략에 따라 달라집니다. 나는 단 결합의 예를 들어 줄 것이다.
먼저 데이터의 거리 행렬을 구성 할 수 있습니다.
for point in unclustered_points:
distances = []
for cluster in clusters:
distance = dist_matrix[point, cluster].min() # Single linkage
distances.append(distance)
print("The cluster for {} is {}".format(point, cluster)
편집 :
from sklearn.metrics.pairwise import pairwise_distances
dist_matrix = pairwise_distances(X)
그런 다음 가장 가까운 클러스터 추출하는 것이 가 작동을하지만, O (N^2) Anony - 무스에 의해 언급 한 바와 같이합니다. 핵심 포인트를 고려하면 작업을 줄일 수 있기 때문에 더 좋은 아이디어입니다. 또한, 그것은 중력 연동과 다소 유사합니다.
필요하지 않은 많은 거리를 계산하므로 매우 느립니다. 또한 O (n²) 메모리를 사용하므로 더 큰 데이터 세트에서는 작동하지 않습니다. –
DBSCAN의 직감에 더 가까워 지려면 코어 점을 고려해야합니다.
가장 가까운 이웃 검색 자에 핵심 지점을 넣습니다. 그런 다음 모든 잡음 지점을 검색하고 가장 가까운 지점의 클러스터 레이블을 사용하십시오.
클러스터와의 거리를 어떻게 측정 하시겠습니까? 여러 가지 옵션이 있습니다. 단일 연결은 클러스터까지의 거리가 가장 가까운 멤버까지의 거리라고 말합니다. 완벽한 연계 (linkage)는 가장 멀리있는 회원과의 거리라는 것입니다. 평균적인 연계가 있습니다, 와드의 연계 ... 무엇할까요? –
첫 번째 직관은 "단일 연결"은 좋은 척도로 들리고 내가 생각한 것입니다. 그러나 다른 측정 항목이 있다는 것을 알면 좋을 것입니다. 감사합니다. – ScientiaEtVeritas
제대로 이해했다면, 잡음이 많은 지점과 클러스터의 가장 가까운 지점 사이의 거리를 결정하고 싶습니다 (단일 연결을 사용했기 때문에). 그렇다면 [sklearn.metrics.pairwise.euclidean_distances] (http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.euclidean_distances.)에서 시끄러운 점과 클러스터 점 사이의 유클리드 거리를 계산할 수 있습니다. html). 유클리드 거리는 DBSCAN에서 사용되는 가장 일반적인 거리 메트릭이기 때문에 잘 작동해야합니다. – umutto