클러스터 수를 알 수없는 비지도 클러스터링
3 차원의 큰 벡터 세트가 있습니다. 특정 클러스터의 모든 벡터가 임계 값 "T"보다 작은 서로 상관 유클리드 거리를 갖도록 유클리드 거리를 기반으로 이들을 클러스터링해야합니다.
얼마나 많은 클러스터가 존재하는지 모르겠습니다. 마지막에는 유클리드 거리가 공간의 벡터와 함께 "T"보다 작지 않기 때문에 클러스터의 일부가 아닌 벡터가 적합한 수 있습니다.
여기에 어떤 기존 알고리즘 /
계층 적 클러스터링을 사용할 수 있습니다 . 다소 기본적인 접근 방식으로 구현이 가능합니다. 예를 들어 Python의 scipy에 포함 되어 있습니다 .
예를 들어 다음 펼쳐를 참조하십시오.
import matplotlib.pyplot as plt
import numpy
import scipy.cluster.hierarchy as hcluster
# generate 3 clusters of each around 100 points and one orphan point
N=100
data = numpy.random.randn(3*N,2)
data[:N] += 5
data[-N:] += 10
data[-1:] -= 20
# clustering
thresh = 1.5
clusters = hcluster.fclusterdata(data, thresh, criterion="distance")
# plotting
plt.scatter(*numpy.transpose(data), c=clusters)
plt.axis("equal")
title = "threshold: %f, number of clusters: %d" % (thresh, len(set(clusters)))
plt.title(title)
plt.show()
다음 이미지와 결과를 생성합니다.
매개 변수로 주어진 임계 값은 점 / 군집이 다른 군집에 병합 여부를 결정하는 기준이 거리되는 값입니다. 사용되는 거리 측정법도 있습니다.
클러스터 내 / 내부 유사성을 계산하는 방법에는 다양한 방법이 있습니다. 예를 들어 가장 가까운 점 사이의 거리, 가장 먼 점 사이의 거리, 클러스터 중심까지의 거리 등이 있습니다. 대신 방법 중 일부는 scipys 계층 적 클러스터링 모듈 ( single / complete / average ... linkage ) 에서 지원 됩니다. 귀하의 게시물에 따르면 완전한 연결 을 사용하고 싶을 것 입니다.
이 접근 방식은 다른 클러스터의 유사성 기준, 즉 거리 임계 값을 선호하지 않는 경우 (단일 포인트) 클러스터도 허용합니다.
더 나은 성능을 제공하는 다른 알고리즘이 많은 상황에서 관련성이 있습니다. 다른 답변 / 댓글이 제안했듯이 DBSCAN 알고리즘을 상상 볼 수도 있습니다.
- https://en.wikipedia.org/wiki/DBSCAN
- http://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html
- http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html#sklearn.cluster.DBSCAN
이들 및 기타 클러스터링 알고리즘에 대한 멋진 개요를 살펴이 데모 페이지 (Python의 scikit-learn 라이브러리)를 참조하십시오.
해당 장소에서 복사 한 이미지 :
보시다시피 각 알고리즘은 고려해야 할 클러스터의 수와 모양에 대해 몇 가지 가정을합니다. 알고리즘에 의해 부과 된 암시 적 가정 또는 매개 변수화에 의해 지정된 명시 적 가정.
moooeeeep의 대답은 계층 적 클러스터링을 사용하는 것이 좋습니다. 클러스터링의 임계 값 을 선택 하는 방법에 대해 자세히 설명하고 싶었습니다 .
한 가지 방법은 서로 다른 임계 값 t1 , t2 , t3 , ...을 기반으로 클러스터링 을 계산 한 다음 클러스터링의 "품질"에 대한 메트릭을 계산하는 것입니다. 전제는 최적 의 클러스터 수를 사용하는 클러스터링 의 품질이 품질 메트릭의 최대 값을 갖는다는 것입니다.
내가 과거에 사용한 좋은 품질 메트릭의 예는 Calinski-Harabasz입니다. 간단히 말해서, 평균 클러스터 간 거리를 계산하고이를 클러스터 내 거리로 나눕니다. 최적의 클러스터링 할당에는 서로 가장 많이 분리 된 클러스터와 "가장 단단한"클러스터가 있습니다.
그런데 계층 적 클러스터링을 사용할 필요가 없습니다. k- 평균 과 같은 것을 사용 하여 각 k 에 대해 미리 계산 한 다음 Calinski-Harabasz 점수가 가장 높은 k 를 선택할 수도 있습니다.
참고 문헌이 더 필요한지 알려 주시면 제 하드 디스크를 샅샅이 뒤져서 몇 가지 서류를 드리겠습니다.
DBSCAN 알고리즘을 확인하십시오 . 벡터의 로컬 밀도를 기반으로 클러스터링됩니다. 즉, ε 거리 이상 떨어져서 는 안되며 클러스터 수를 자동으로 결정할 수 있습니다. 또한 특이 치, 즉 ε- 이웃 수가 충분 하지 않은 점을 클러스터의 일부가 아닌 것으로 간주합니다. Wikipedia 페이지는 몇 가지 구현으로 연결됩니다.
큰 데이터 세트와 잘 작동하는 OPTICS를 사용하십시오 .
OPTICS : DBSCAN과 한 주문 관련이있는 클러스터링 구조를 구축하기 위해 클러스터링하는 핵심 샘플을 찾아 클러스터합니다 1 . DBSCAN과 달리 변형되는 반경에 대한 클러스터 계층을 유지합니다. DBSCAN의 현재 sklearn 구현보다 큰 데이터 세트에서 사용하는 것이 적합합니다.
from sklearn.cluster import OPTICS
db = DBSCAN(eps=3, min_samples=30).fit(X)
요구 사항에 따라 eps, min_samples 를 미세 조정 하십시오.
참고 URL : https://stackoverflow.com/questions/10136470/unsupervised-clustering-with-unknown-number-of-clusters
'ProgramingTip' 카테고리의 다른 글
Gradle : '11 .0.2 '에서 Java 버전을 확인할 수 없습니다. (0) | 2020.11.08 |
---|---|
`git add .`와`git add -u`의 차이점은 무엇입니까? (0) | 2020.11.08 |
pip로 git 하위 디렉토리에서 어떻게합니까? (0) | 2020.11.08 |
메모장 ++ (v6.5)에서 탭 너비를 늘리려면 어떻게해야해야합니까? (0) | 2020.11.08 |
Nuget 통합 대 업데이트 (0) | 2020.11.08 |