2017-03-26 4 views
0

와 다차원 클러스터링 다음과 같이 내가 데이터 세트를 상상해 : 파이썬은 임계 값

[{"x":20, "y":50, "attributeA":90, "attributeB":3849}, 
{"x":34, "y":20, "attributeA":86, "attributeB":5000}, 
etc. 

이 외에 무리 이상의 다른 속성이있을 수 있습니다 - 이것은 단지 예입니다. 내가 궁금해하는 점은, 링크 된 것으로 간주되는 특정 변수에 대해 주어진 점과 다음 점 사이의 최대 간격을 제어하는 ​​모든 요소를 ​​기반으로 이러한 점을 클러스터링하는 방법입니다. (유클리드 거리가 10 포인트 이내 여야합니다 (예 : 5 포인트 내에서 attributeA, attributeB)

파이썬에서이를 수행하는 방법에 대한 아이디어가 있습니까? 위에서 암시했듯이 x와 y를 별개의 특성으로 비교하는 것뿐만 아니라 가능한 경우 유클리드 거리를 사용하여 두 점 사이의 거리를 비교하고 싶습니다. 나머지 애트리뷰트의 경우 모든 단일 차원 비교가 될 것입니다.


편집 : 모든 경우 그냥, 어떤 알고리즘이 서로 (또는 좀 더 효율적인 방법)으로 모든 개체를 비교하기 위해, 기본적으로 내가 찾고 있어요이 이해가되지 않습니다 경우에 일부 선명도를 추가 객체 A의 속성과 유클리드 거리가 객체 B와 비교할 때 지정된 임계 값 내에 있으면이 두 객체는 ​​유사하고 링크 된 것으로 간주됩니다. 연결된 모든 클러스터가 반환 될 때까지이 절차가 계속됩니다. 일부 클러스터는 조건은 다른 클러스터의 임의의 지점과 유사해야 클러스터가 분리됩니다.

답변

1

가장 간단한 방법은 이진 "연결성"매트릭스를 만드는 것입니다.

a[i,j]을 조건이 충만하면 정확하게 0으로 설정하고 그렇지 않으면 1로 설정하십시오.

그런 다음이 매트릭스에서 완전한 연결을 통해 계층 적 응집 형 클러스터링을 실행하십시오. 임계 값을 충족시키기 위해 모든 클러스터에 모든 객체 쌍이 필요하지 않은 경우 다른 연결을 사용할 수도 있습니다.

이것은 가장 좋은 해결책은 아닙니다. 다른 거리 매트릭스는 O (n²) 메모리와 시간이 필요하고 O (n³) 클러스터링도 필요하지만 구현하기가 가장 쉽습니다. 파이썬 코드에서 거리 매트릭스를 계산하는 것은 모든 루프를 피할 수없고 예를 들어 numpy는 대부분의 작업을 수행합니다. 확장 성을 향상 시키려면 DBSCAN과 데이터 색인을 고려해야합니다.

3 개의 서로 다른 임계 값을 가중치로 대체하면 연속 거리를 얻을 수 있습니다. 심지어 메트릭입니다. 그런 다음 데이터 색인을 사용하고 OPTICS를 시험해 볼 수 있습니다.

+0

감사합니다. 정말 도움이됩니다. 가중치로부터 연속 거리를 가진 DBSCAN을 사용하는 것에 대한 아이디어는 꽤 흥미 롭습니다. 절대적으로 동일해야하는 하나의 속성 (또는 여러 속성)이있는 경우 어떻게 작동할까요? (문자열 속성은 두 점에서 동일해야합니다. 연결될 것으로 간주되는 점), 가중치 아이디어로 어떻게 작동할까요? 나는 가장 간단한 방법은 각각의 다른 문자열 특성에 대한 별도의 그룹으로 내 포인트를 분할하는 것이라고 생각 하겠지만 ... 만약 그것이 평등해야 여러 속성이 작동하지 않는 것 같아요. – abagshaw

+0

그런 다음 무한 거리를 주거나 Generalized DBSCAN을 사용할 수 있습니다. Sander, Jörg, et al. "공간 데이터베이스의 밀도 기반 클러스터링 : 알고리즘 GDBSCAN 및 그 응용" 데이터 마이닝 및 지식 발견 2.2 (1998) : 169-194. 그러나 ** 데이터 분할은 효율성 때문에 좋은 생각이며, 여러 필수 속성이 동일해야합니다. –