홈
topics
클러스터링
클러스터링은 유사성 또는 패턴을 기반으로 하여 서로 다른 객체, 데이터 포인트, 관측 결과를 그룹 또는 클러스터로 구성하고 분류하는 비지도 기계 학습 알고리즘입니다. 데이터 세트의 초기 탐색부터 진행 중인 프로세스에 대한 모니터링에 이르기까지, 머신 러닝에서 클러스터링을 사용하는 방법은 다양합니다. 기저에 있는 추세, 패턴, 이상값을 이해하려면, 이를 탐색 데이터 분석에서 새 데이터 세트와 함께 사용할 수 있습니다. 또는 더 큰 데이터 세트를 여러 데이터 세트로 분할하거나 차원 축소를 사용하여 줄여야 할 수도 있습니다. 이 경우 클러스터링이 전처리 과정에서 이루어질 수 있습니다. 클러스터의 예로는 음악 장르, 다양한 사용자 그룹, 시장 세분화의 주요 세그먼트, 서버 클러스터의 네트워크 트래픽 유형, 소셜 네트워크의 친구 그룹, 그 밖의 다양한 범주가 있습니다. 클러스터링 프로세스는 데이터에서 하나의 기능만 사용할 수도, 데이터에 있는 모든 기능을 사용할 수도 있습니다.
클러스터링은 데이터에서 자연스러운 그룹화를 찾아서, 어떤 범주가 존재할 수 있고 해당 범주를 정의하는 요소는 무엇인지 파악하는 것으로 생각할 수 있습니다. 클러스터를 사용하면 데이터 포인트들 사이의 기저에 깔린 관계를 알아내 여러 범주들이 어떤 특징이나 특성을 공유하는지 확인할 수 있습니다. 사용된 클러스터링 알고리즘에 따라 데이터에서 이상값을 제거하거나 이상값이라고 지정할 수 있습니다. 또한 클러스터링은, 클러스터에 포함되어 있지 않거나 연관 관계가 약해서 데이터 생성 과정에서의 이상치라고 볼 수도 있는 데이터 포인트를 감지하기 때문에 이상치 탐지에 유용합니다.
클러스터링은 데이터 차원의 수를 줄여서 방대한 데이터 세트의 복잡성을 줄이는 데에도 사용할 수 있습니다. 범주가 두 개 또는 세 개의 기능으로만 정의되는 경우, 관련 없는 기능을 제거하거나 PCA와 같은 차원 축소 기술을 사용할 수 있습니다. 클러스터링은 데이터 세트의 시각화를 만들어 데이터의 창발적 속성과 클러스터 간의 밀도 및 관계를 확인하는 데에도 매우 유용합니다.
클러스터링 알고리즘은 각 데이터 포인트가 하나의 클러스터에만 속해있고 이진 값(클러스터에 속하거나 속하지 않거나)을 가지는 하드 클러스터링을 수행하거나, 각 데이터 포인트가 식별된 클러스터 각각에 속할 확률이 주어지는 소프트 클러스터링을 수행하는 것으로 구별되기도 합니다. 최고의 클러스터링 프로세스를 하나만 꼽을 수는 없기 때문에 각자의 필요와 작업 중인 데이터에 가장 적합한 접근 방식을 택해야 합니다.
AI 채택을 가로막는 장벽, 특히 AI 거버넌스 및 위험 관리 솔루션의 부족에 대해 알아보세요.
클러스터를 정의하는 방법은 여러 가지입니다. 그래서 클러스터링 알고리즘은 매우 다양합니다. 인풋 데이터의 크기, 데이터의 차원, 범주의 엄밀성, 데이터 세트 내 클러스터 수에 따라 모델 유형마다 알맞은 접근 방식이 다양하게 있습니다. 어떤 알고리즘이 한 데이터 세트에서는 아주 적합하지만 다른 데이터 세트에서는 매우 부적합할 수도 있습니다. 이 섹션에서는 클러스터링에 일반적으로 사용되는 다섯 가지 접근 방식을 알아봅니다. 스펙트럼 클러스터링 또는 평균 이동 클러스터링 등의 다른 기술은 이 문서에서 다루지 않습니다.
중심점 기반 클러스터링은 중심점들 사이의 거리에 따라 데이터 세트를 유사한 그룹으로 분할하거나 가르는 클러스터링 유형입니다. 각 클러스터의 중심점 또는 중심은, 데이터에 따라 클러스터에 있는 모든 점의 평균 또는 중앙값입니다.
일반적으로 사용되는 중심점 기반 클러스터링 기술 중 하나는 k-평균 클러스터링 알고리즘입니다. K-평균은 각 클러스터의 중심이 중심점까지의 거리 측정(가장 일반적으로 유클리드 거리)을 사용하여 클러스터를 정의한다고 가정합니다. 클러스터를 초기화하기 위해서는 예상되는 클러스터들을 제공합니다. 이것이 K-평균에서 'K'를 나타내며, 알고리즘은 데이터에서 해당 숫자와 일치하는 적정한 클러스터를 찾으려고 시도합니다. 주어진 데이터 세트에서의 최적의 k 클러스터는 각 포인트와 할당된 클러스터 중심점 사이의 총 거리를 반복적으로 최소화하여 식별합니다.
K-평균은 하드 클러스터링 방식으로, 각 데이터 포인트가 별도의 클러스터에 할당되며 클러스터 멤버십과 관련된 확률이 없습니다. K-평균은 클러스터들의 크기가 거의 동일하고 데이터 전체에 걸쳐 유의미한 이상값이나 밀도 변화가 없을 때 잘 작동합니다. 데이터가 고차원이거나 클러스터의 크기 또는 밀도 차이가 크면 K-평균이 제대로 작동하지 않을 가능성이 높습니다. 또한 K-평균은 클러스터 내 모든 값의 평균값을 기반으로 중심값을 설정하기 때문에 이상값에 특히 민감하며, 이에 따라 그러한 이상값을 포함하도록 과적합을 허용합니다.
K-평균에 대한 또 다른 중심점 기반 접근 방식으로는 K-중앙값이 있습니다. 중앙값은 데이터 세트 또는 데이터 세트 내의 클러스터를 대표하는 객체로, 클러스터에 있는 다른 객체와의 거리 합이 최소값입니다. 임의의 중심을 그래프의 중심으로하는 대신, 알고리즘이 개별 데이터 포인트를 클러스터의 중앙값 또는 중심으로 사용하여 클러스터를 만듭니다. K-중앙값 알고리즘은 임의의 중심점이 아니라 현존하는 데이터 포인트를 사용하기 때문에 이상값에 덜 민감합니다.
연결 기반 클러스터링이라고도 하는 계층적 클러스터링은 속성의 근접성과 연결성을 기반으로 데이터 포인트를 그룹화합니다. 이는 모든 차원에 걸쳐 데이터 포인트들이 서로에 얼마나 가까운지에 따라 클러스터를 결정합니다. 가까이 있는 객체들일수록 멀리 있는 객체들보다 서로 밀접하게 관련되어 있다는 개념을 바탕으로 하며 k-평균과 달리 클러스터 수를 미리 지정할 필요가 없습니다. 대신, 클러스터링 알고리즘이 각 계층적 수준에서 클러스터의 그래프 네트워크를 만듭니다. 이 네트워크는 계층적이기 때문에, 그 안에서 지정된 노드에는 부모 노드가 하나뿐이지만 자식 노드는 여러 개일 수 있습니다. 덴드로그램 형식으로 계층적 클러스터 그래프를 그리면 발견된 클러스터와 그 안에 존재할 수 있는 계층 구조를 시각화해서 요약하고 구성할 수 있습니다.
계층적 클러스터 분석을 위한 두 가지 방식:
병합: 병합 클러스터링에서의 상향식 접근 방식은 개별 데이터 포인트에서 출발합니다. 현재 계층 수준에서 모든 클러스터의 근접 행렬을 계산하고 클러스터들을 연속적으로 병합하여 트리 형태의 구조를 만드는 것입니다. 모든 클러스터가 클러스터 간 유사성이 없거나 낮은 상태의 클러스터 수준이 하나 생성되고 나면, 알고리즘이 새로 생성된 클러스터 세트로 이동하여 계층적 그래프 맨 위에 하나의 루트 노드가 있을 때까지 과정을 반복합니다. 이 클러스터들을 서로 병합하는 방법에 대해서는 다양한 선택지가 있으며, 클러스터링의 품질과 효율성 측면에서 균형점을 조율할 수 있습니다. 단일 연결 클러스터링에서는 두 클러스터에 있는 데이터 포인트 쌍 사이의 최단 거리가 유사성 측정으로 사용됩니다. 모든 쌍 연결에서는 모든 데이터 포인트 쌍의 평균이 사용되는 반면, 샘플 연결에서는 두 클러스터에 있는 데이터 포인트의 샘플링을 사용해 평균 거리를 계산합니다. 중심점 연결에서는 중심점들 사이의 거리를 사용합니다. 병합 방식이 까다로운 것은, 더 큰 클러스터가 자연스럽게 다른 지점과 더 가까운 거리를 갖는 쪽으로 편향되어 점점 더 커지면서 더 많은 데이터 포인트를 해당 클러스터로 끌어들이는 연쇄적 현상을 보일 수 있기 때문입니다. 계층 구조를 구성하는 분할 방식보다 속도가 훨씬 느린 것 또한 병합 방식의 단점입니다.
분할: 분할 계층 클러스터링 방법은 하향식 접근 방식을 통해 데이터 포인트를 트리 형태의 구조로 연속적으로 분할합니다. 우선 K-평균 같은 평면 클러스터링 방법을 사용하여 데이터 세트를 클러스터들로 분할하고 평면 클러스터링 방법을 사용하여 오차제곱합(SSE)이 가장 큰 클러스터를 추가로 분할합니다. 개별 노드 또는 최소 SSE에 도달하면 알고리즘이 중지됩니다. 분할 방식을 사용하면 트리의 계층 구조와 여러 클러스터의 균형 수준 측면에서 유연성을 높일 수 있습니다. 여러 노드의 깊이 측면에서 트리가 완벽하게 균형을 이루거나, 트리에서 모든 가지의 차수가 정확히 2일 필요는 없습니다. 이렇게 하면 노드 깊이와 노드 가중치(노드에서의 데이터 포인트 수)의 균형을 다양하게 조정할 수 있는 트리 구조를 구성할 수 있습니다. 분할형 계층적 클러스터는 특히 개별 데이터 포인트까지 트리를 구성할 필요가 없는 데이터인 경우에 병합 계층적 클러스터보다 속도를 높일 수 있습니다.
확률적 클러스터링이라고도 불리는 분포 기반 클러스터링은 확률 분포를 기반으로 데이터 요소를 그룹화합니다. 이는 클러스터 중심을 생성하는 데이터의 각 차원에 대해 정규 분포를 생성하는 프로세스가 있다고 가정하는 방식입니다. 유클리드 거리나 맨해튼 거리와 같은 거리 메트릭을 사용하지 않는다는 것이 중심점 기반 클러스터링과의 차이점입니다. 분포 기반 접근 방식은 그 대신 각 차원에 걸쳐 나타나는 잘 정의된 분포를 찾습니다. 클러스터 평균은 각 차원에 걸친 가우스 분포의 평균입니다. 분포 기반 클러스터링은 클러스터를 찾기 위해 각 차원에서 분포를 여러 번 적합시켜야 하기 때문에 클러스터링에 대한 모델 기반 접근 방식입니다. 이 경우 대규모 데이터 세트를 다룰 때 연산 비용이 많이 들 수 있습니다.
분포 기반 클러스터링에 일반적으로 사용되는 접근 방식 중 하나는, 기대값 최대화를 통해 가우스 혼합 모델(GMM)을 만드는 것입니다. GMM이라는 이름이 붙은 것은, 흔히 정규 분포라고 부르는 가우스 분포에 의해 각 클러스터가 정의된다는 가정이 있기 때문입니다.
두 개의 서로 다른 정규 분포로 정의되는 별도의 클러스터 두 개, 즉 A와 B가 있는 데이터 세트가 하나는 X축을 따라, 다른 하나는 Y축을 따라 있다고 가정합시다. 기대값 최대화는 각 축의 두 분포가 무엇인지 무작위로 추측하기 시작하고, 다음의 두 단계를 번갈아 가며 개선을 반복합니다.
기대값: 각 데이터 요소를 각 클러스터에 할당하고 클러스터 A와 클러스터 B에서 데이터 포인트가 생성될 확률을 계산합니다.
최대화: 각 데이터 포인트가 클러스터에 있을 가능성에 따라 각 클러스터, 가중 평균 위치 및 분산-공분산 행렬을 정의하는 매개 변수를 업데이트합니다. 그런 다음 방정식이 각 클러스터에 대해 관측된 분포에 수렴할 때까지 기대값 단계를 반복합니다.
각 데이터 포인트에 클러스터와 연관될 확률이 주어집니다. 즉, 기대값 최대화를 통한 클러스터링은 소프트 클러스터링 방식이며 특정 포인트가 둘 이상의 클러스터와 연관될 확률이 있습니다. 이런 확률이 타당해지는 상황으로는 노래 한 곡에서 포크 느낌과 록 느낌이 함께 나고, 한 사람이 스페인어로 된 드라마를 선호하지만 가끔은 영어로 된 방송도 시청하는 경우가 있을 수 있습니다.
밀도 기반 클러스터링은 포인트들이 집중된 영역, 비어 있거나 희소하게 분산된 영역을 탐지하는 방식입니다. K-평균 같은 중심점 접근 방식, 기대값 최대화 같은 분포 기반 접근 방식과 다르게 밀도 기반 클러스터링은 임의의 형태의 클러스터를 탐지할 수 있습니다. 클러스터들이 특정 위치나 분포를 중심으로 정의되지 않은 경우 이 방식이 매우 유용할 수 있습니다. K-평균 및 계층적 클러스터링 등의 다른 클러스터링 알고리즘과 달리, 밀도 기반 알고리즘은 데이터에서 모든 형태, 크기, 밀도의 클러스터를 찾을 수 있습니다. 밀도 기반 클러스터링은 클러스터에 속한 데이터 포인트와 노이즈로 지정해야 하는 데이터 포인트도 구별할 수 있습니다. 밀도 기반 클러스터링은 노이즈나 이상치가 있는 데이터 세트를 사용하거나 데이터 내의 클러스터 수에 대한 사전 지식이 없는 경우에 특히 유용합니다.
DBSCAN은 밀도 기반 클러스터링 방식에 사용하는 클러스터링 알고리즘의 예입니다. 이는 밀도 기반 공간 클러스터링 방식을 사용하여, 공간 중심점을 중심으로 사용자가 전달한 밀도를 가진 클러스터를 만듭니다. 중심점 바로 주위의 영역을 이웃이라고 하며, DBSCAN은 지정된 밀도를 가진 클러스터의 이웃을 정의하도록 시도합니다. 각 클러스터에 대해 DBSCAN은 세 가지 데이터 포인트 유형을 정의합니다.
핵심 포인트: 어떤 데이터 포인트 주변에 사용자가 지정한 최소 포인트 수 이상의 포인트가 포함되어 있으면, 이 데이터 포인트는 핵심 포인트입니다.
경계 포인트: 어떤 데이터 포인트 주변에 사용자가 지정한 최소 포인트 수보다 적은 포인트가 포함되어 있지만, 그 포인트 이웃에 핵심 포인트가 포함되어 있으면 이 데이터 포인트는 경계 포인트입니다.
이상값: 핵심 포인트도, 경계 포인트도 아닌 데이터 포인트는 이상값이며 본질적으로 '다른' 클래스입니다.
HDBSCAN은 DBSCAN의 변형이며, 매개 변수를 설정할 필요가 없어서 원래 형태보다 훨씬 유연합니다. HDBSCAN은 데이터의 노이즈와 이상값에 덜 민감합니다. 또한 DBSCAN은 경우에 따라 밀도가 균일하지 않은 클러스터를 식별하는 데 문제가 있을 수 있는데, 이는 HDBSCAN을 만드는 주된 동기가 되었습니다. 그래서 다양한 밀도의 클러스터를 훨씬 효과적으로 처리합니다.
격자 기반 클러스터링 알고리즘은 앞의 네 가지 방법만큼 자주 사용되지는 않지만, 다른 클러스터링 알고리즘이 제대로 작동하지 않는 고차원 클러스터링에 유용할 수 있습니다. 이 방식에서 알고리즘은 고차원 데이터 세트를 셀로 분할합니다. 각 셀에는 셀 ID라는 고유 식별자가 할당되며 셀 내에 있는 모든 데이터 요소는 동일한 클러스터에 속한 것으로 간주됩니다.
격자 기반 클러스터링은 많은 클러스터링 방법에서 보편적으로 사용되는 절차인 인접 이웃 검색에 필요한 시간을 줄여주기 때문에 방대한 다차원 데이터 세트를 분석하는 데 효율적인 알고리즘입니다.
널리 사용되는 격자 기반 클러스터링 알고리즘 중 하나인 STING은, 통계정보 그리드(STATISTICAL INFORMATION Grid)의 약자입니다. STING에서는 공간 영역이 직사각형 셀과 서로 다른 해상도 수준의 여러 수준의 셀로 나뉩니다. 상위 셀은 여러 개의 하위 셀로 나뉩니다. STING은 데이터 세트가 매우 큰 빅데이터 시나리오에서 클러스터를 연산하는 데 매우 효율적일 수 있습니다. 반복 과정을 통해 데이터 세트를 더 세밀한 격자로 분할하고 해당 격자 내의 포인트 수를 평가하기 때문입니다. STING의 단점은 클러스터의 경계가 수평 또는 수직으로 정의되어야 하고, 알고리즘은 직사각형이 아닌 클러스터 경계를 감지할 수 없다는 것입니다.
고차원 데이터에서 특히 효과적인 또 다른 격자 기반 알고리즘으로는 CLIQUE(Clustering In Quest) 알고리즘이 있습니다. CLIQUE에는 클러스터링에 대한 격자 기반 접근 방식과 밀도 기반 접근 방식이 결합되어 있습니다. 이 알고리즘은 데이터 공간을 격자로 나누고, 격자 셀 내 포인트의 상대 밀도를 비교하여 밀도가 비슷한 부분공간들을 병합합니다. 이 방식은 관심 있는 모든 부분공간에서 밀도 높은 유닛을 찾은 다음, 유사한 클러스터들을 함께 연결해야 하는지 여부를 측정합니다. 이는 CLIQUE가 고차원 데이터에서 임의적인 형태의 클러스터를 탐지할 수 있음을 의미합니다.
클러스터 분석에는 여러 가지 평가 메트릭이 있으며 클러스터링 알고리즘의 유형과 관련 데이터 세트에 따라 적절한 메트릭이 달라집니다. 평가 메트릭은 크게 외재적 메트릭과 내재적 메트릭으로 나눌 수 있습니다.
내재적 측정 방식은 데이터 세트 안에 있는 정보만 사용하는 클러스터 분석을 위한 평가 메트릭입니다. 라벨이 지정되지 않은 데이터를 다룰 때 유용하며, 분석 품질은 전적으로 데이터 포인트들 간의 관계를 기반으로 합니다. 데이터에 대한 사전 지식이나 라벨이 없는 경우에 이 방식을 사용할 수 있습니다. 일반적인 내재적 측정 방식은 다음과 같습니다.
실루엣 점수: 자체 클러스터 및 다른 모든 클러스터에 대한 데이터 포인트 각각의 유사성과 차이점을 측정하는 메트릭입니다. 메트릭 값의 범위는 -1부터 +1까지입니다. 값이 높으면 객체가 자체 클러스터와 크게 일치하고, 인접 클러스터와는 별로 일치하지 않는다는 의미입니다.
데이비스-볼딘 지수: 클러스터 내 거리와 클러스터 간 거리의 비율을 계산하는 메트릭입니다. 인덱스 점수가 낮을수록 클러스터링 성능이 향상됩니다.
칼린스키—하라바즈 지수: 분산 비율 기준이라고도 하며, 클러스터 간 분산과 클러스터 내 분산의 비율을 측정합니다. 칼린스키-하라바즈 비율이 높다는 것은 클러스터가 더 잘 정의되어 있다는 뜻입니다.
이러한 평가 메트릭은 다양한 클러스터링 알고리즘과 모델의 성능을 비교하고, 클러스터링 매개변수를 최적화하며, 클러스터링 결과의 정확성과 품질을 검증하는 데 유용합니다.
외재적 메트릭은 실제 값이나 외부 정보를 사용하여 클러스터링 알고리즘의 성능의 타당성을 평가합니다. 이를 위해서는 각 데이터 포인트가 속한 클래스나 클러스터를 확인하는 일종의 라벨 데이터가 필요합니다. 이 경우 분류 정확도에 자주 사용되는 메트릭에 클러스터링 분석의 정확도를 비교할 수 있습니다. 일반적인 외재적 메트릭은 다음과 같습니다.
F-점수(또는 F-측정): 제안된 클러스터링을 실제 값과 비교할 때 정밀도와 재현율을 확인하여 클러스터링 알고리즘의 정확도를 판단합니다. F 점수는 높을수록 좋습니다.
순도: 정확한 클래스나 클러스터에 올바르게 할당된 데이터 포인트의 비율을 측정하는 메트릭입니다. 순도 측정 값은 높을수록 좋습니다.
랜드 지수: 클러스터링 알고리즘에서 실제 라벨과 예측된 라벨 간의 유사성을 측정한 것이며, 범위는 0에서 1까지입니다. 값이 클수록 클러스터링 성능이 우수하다는 뜻입니다.
정보의 분산(또는 공유 정보 거리): 두 클러스터링 간에 손실된 정보와 얻은 정보의 양을 측정합니다. 실제 값 클러스터링과 알고리즘 생성 클러스터링, 또는 서로 다른 클러스터링 사이를 측정할 수 있습니다. 값이 작을수록 두 클러스터링 결과 사이의 거리가 짧아서 바람직합니다.
데이터 마이닝 또는 탐색적 데이터 분석에 클러스터링을 활용하는 응용 분야가 많이 있으며, 여기에서는 이 분석 유형의 중요성을 이해하기 위해 응용 영역의 일부 예시만 살펴봅니다.
클러스터링은 클러스터 분석에 의해 정의된 클러스터링 구조에 포함되지 않은 데이터 포인트를 측정하여 이상 활동을 발견하는 데 유용합니다. 작거나 매우 희소한 클러스터에 속한 데이터 포인트, 할당된 클러스터에서 멀리 떨어져 있는 데이터 포인트는 이상 활동으로 간주될 수 있습니다. 기대값 최대화와 같은 밀도 기반 방법을 사용해 밀집된 영역의 데이터 요소를 정상으로, 저밀도 영역의 데이터 요소를 이상 활동으로 식별합니다.
어떤 고객 페르소나 또는 시장의 하위 집합이 존재할 수 있는지 이해하려고 할 때, 클러스터링을 고객 세분화에 효과적으로 활용할 수 있습니다. 예를 들면 인구 통계 데이터를 고객 행동 데이터와 결합하여, 어떤 종류의 특성과 구매 패턴이 가장 자주 연관되어 있는지 찾을 수 있습니다.
이미지에는 픽셀이 다양한 방식으로 클러스터링되어 있을 수 있습니다. 이는 이미지를 여러 섹션으로 잘라 배경으로부터 전경을 분할하거나, 색상과 밝기의 유사성을 사용하여 객체를 탐지하거나, 추가 처리를 위해 이미지를 필요한 영역으로 분할하는 데 도움이 됩니다. 이미지의 경우, 클러스터링 방법은 이미지에서 픽셀을 처리하고 클러스터를 나타내는 이미지 내 영역을 정의합니다.
클러스터링 분석은 여러 가지 방식으로 문서를 처리하는 데 유용합니다. 유사성을 기준으로 문서를 그룹화하여 어느 문서들끼리 가장 유사한지 표시할 수 있습니다. 이때 문서 길이, 단어 빈도 분포, 문서의 주요 특징을 정량화하는 그 밖의 방법을 기준으로 활용합니다. 또 다른 일반적인 사용 사례는 키워드 빈도, 문장 길이, 용어 분포를 기반으로 문서의 섹션 클러스터를 분석하는 것입니다. 이는 문서를 요약하거나 추가 분석을 위해 문서를 더 작은 데이터 세트로 나눌 때 유용합니다.
클러스터링에 대해 자세히 알아볼 수 있는 글들을 추가로 소개합니다.
합성 데이터를 생성하고 해당 데이터에서 다양한 클러스터링 알고리즘의 성능을 비교합니다.
watsonx.ai에서 IBM Watson Studio Jupyter Notebooks를 사용하여 R로 K-평균 클러스터링을 수행하기 위한 기본을 알아봅니다.
비지도 머신 러닝이라고도 하는 비지도 학습은 머신 러닝 알고리즘을 사용하여 라벨이 지정되지 않은 데이터 세트를 분석하고 클러스터링합니다.
덴드로그램 시각화를 통해 최적의 클러스터 수 찾기