[데이터사이언스기초] Data Clustering

 

데이터 클러스터링 (Data Clustering)

오늘은 머신러닝의 핵심 분야 중 하나인 데이터 클러스터링(Data Clustering)에 대해 알아보겠다. 데이터 클러스터링은 비슷한 특징을 가진 데이터들을 그룹으로 묶는 방법으로, 데이터 분석, 고객 세분화, 이상 탐지 등 다양한 분야에서 활용된다.

1. Clustering 이란?

Clustering은 유사한 특징을 가진 객체들을 동일한 그룹(cluster)으로 묶고, 서로 다른 그룹에 속한 객체들은 더욱 이질적인 특징을 갖도록 데이터를 분류하는 작업이다. 클러스터링은 데이터의 숨겨진 패턴이나 구조를 파악하는 데 유용하며, 데이터 기반 의사 결정에 중요한 정보를 제공한다.

1.1. Clustering in Scikit-learn

Scikit-learn은 다양한 클러스터링 알고리즘을 제공한다. 각 알고리즘은 다음 두 가지 변형으로 제공된다.

  • Class: fit 메서드를 구현하여 학습 데이터에 클러스터를 학습
  • Function: 학습 데이터가 주어지면 각 클러스터에 해당하는 정수 레이블 배열을 반환

Class의 경우, 학습 데이터에 대한 레이블은 labels_ 속성에서 확인할 수 있다. 모든 메서드는 (n_samples, n_features) 형태의 표준 데이터 행렬을 입력으로 받는다.

2. K-means Clustering (K-평균 클러스터링)

K-means Clustering은 데이터를 n개의 그룹으로 나누고, 각 그룹 내의 분산을 최소화하는 방식으로 동작한다. 이 알고리즘은 클러스터의 개수 k를 미리 지정해야 하며, 많은 수의 샘플에 대해 효율적으로 확장할 수 있어 다양한 분야에서 널리 사용된다.

2.1. K-means 알고리즘 작동 방식

  1. k개의 초기 중심점(centroid)을 임의로 선택
  2. 각 데이터 포인트를 가장 가까운 중심점에 할당
  3. 각 클러스터에 할당된 데이터 포인트들의 평균을 계산하여 중심점을 업데이트
  4. 2-3 단계를 중심점이 더 이상 변하지 않을 때까지 반복
K-means example

3. Hierarchical Clustering (계층적 클러스터링)

Hierarchical Clustering은 데이터 포인트들을 점진적으로 병합하거나 분할하여 계층적인 클러스터 구조를 생성하는 알고리즘이다. 이러한 계층 구조는 트리 형태의 덴드로그램(dendrogram)으로 시각화한다.

  • Agglomerative Clustering (병합 군집): 각 데이터 포인트를 개별 클러스터로 시작하여, 가장 유사한 클러스터들을 순차적으로 병합하는 방법
  • Divisive Clustering (분할 군집): 모든 데이터 포인트를 하나의 클러스터로 시작하여, 가장 이질적인 클러스터들을 순차적으로 분할하는 방법
Agglomerative clustering

3.1. Linkage Criteria (연결 기준)

계층적 군집 분석에서 어떤 방식으로 군집을 형성할지 결정하는 기준을 연결 기준(Linkage Criteria)이라고 한다. 연결 기준은 클러스터 간의 거리 또는 유사도를 측정하는 방법을 정의하며, 다양한 연결 기준에 따라 군집 결과가 달라질 수 있다.

대표적인 연결 기준에는 다음과 같은 것들이 있다.

  • Ward Linkage: 군집 내 분산(variance)의 증가량을 최소화하는 방식으로 군집을 병합한다. 군집 간의 거리가 가까울수록, 그리고 군집의 크기가 작을수록 병합될 가능성이 높다.
  • Complete Linkage (Maximum Linkage): 두 군집에서 가장 먼 데이터 포인트 사이의 거리를 기준으로 군집 간의 거리를 측정한다. 즉, 두 군집 사이의 최대 거리를 최소화하는 방식으로 군집을 병합한다.
  • Average Linkage: 두 군집에 속한 모든 데이터 포인트 쌍 사이의 평균 거리를 기준으로 군집 간의 거리를 측정한다. 즉, 두 군집 사이의 평균 거리를 최소화하는 방식으로 군집을 병합한다.
  • Single Linkage: 두 군집에서 가장 가까운 데이터 포인트 사이의 거리를 기준으로 군집 간의 거리를 측정한다. 즉, 두 군집 사이의 최소 거리를 최소화하는 방식으로 군집을 병합한다.

각 연결 기준은 장단점을 가지고 있으며, 데이터의 특성과 분석 목적에 따라 적절한 연결 기준을 선택해야 한다. 예를 들어, Ward Linkage는 크기가 비슷하고 조밀한 군집을 형성하는 경향이 있으며, Single Linkage는 길게 늘어진 형태의 군집을 형성하는 경향이 있다.

4. Clustering Performance Evaluation (클러스터링 성능 평가)

클러스터링 알고리즘의 성능을 평가하는 것은 지도 학습의 정확도나 Precision, Recall과는 다르다. 클러스터링은 정답 레이블이 없는 비지도 학습이기 때문에, 클러스터 레이블의 절대적인 값을 고려하지 않고 평가해야 한다.

4.1. Rand Index (랜드 지수)

Rand Index(랜드 지수)는 실제 클래스 할당 정보(labels_true)와 클러스터링 알고리즘의 할당 정보(labels_pred)를 비교하여 두 할당 간의 유사도를 측정하는 함수이다. 이때, 순열(permutation)은 무시된다. Rand Index는 0과 1 사이의 값을 가지며, 1에 가까울수록 두 할당이 유사함을 나타낸다.

랜드 지수는 True Positive(TP), False Positive(FP), True Negative(TN), False Negative(FN)의 개념을 사용하여 계산된다.

  • TP (True Positive): 실제로 같은 클래스에 속하고, 클러스터링 결과도 같은 클러스터에 속하는 경우
  • FP (False Positive): 실제로 다른 클래스에 속하지만, 클러스터링 결과 같은 클러스터에 속하는 경우
  • TN (True Negative): 실제로 다른 클래스에 속하고, 클러스터링 결과도 다른 클러스터에 속하는 경우
  • FN (False Negative): 실제로 같은 클래스에 속하지만, 클러스터링 결과 다른 클러스터에 속하는 경우
RI = (TP + TN) / (TP + FP + TN + FN)

예시

다음과 같은 데이터가 있다고 가정해 보자.

데이터 포인트실제 클래스클러스터링 결과
A11
B21
C22
D32
E32

이 경우, TP = (D,E), FP = (A,B),(C,D),(C,E), TN = (A,C),(A,D),(A,E),(B,D),(B,E), FN = (B,C)이므로 랜드 지수는 다음과 같이 계산된다. (분모는 조합을 이용해서 간단히 구할 수도 있다)

RI = (1 + 5) / (1 + 3 + 5 + 1) = 0.6

조정 랜드 지수 (Adjusted Rand Index) 예시

랜드 지수는 클러스터링 결과를 평가하는 데 유용한 지표이지만, 다음과 같은 한계점을 가지고 있다.

  • 클러스터 레이블의 순열(permutation)을 고려하지 않는다. 즉, 클러스터 레이블이 다르게 할당되어도 클러스터 구성이 동일하다면 랜드 지수는 1다.
  • 우연의 일치에 민감하다. 특히 클러스터의 수가 많을 경우, 우연히 일치하는 경우가 발생할 가능성이 높아져 랜드 지수가 높게 나올 수 있다.

이러한 한계점을 보완하기 위해 조정 랜드 지수(Adjusted Rand Index, ARI)가 제안되었다. 조정 랜드 지수는 우연의 일치에 의한 영향을 보정하여 클러스터링 결과를 더욱 정확하게 평가할 수 있도록 한다. ARI는 -1과 1 사이의 값을 가지며, 1에 가까울수록 클러스터링 결과가 실제 정답 클래스와 더 유사함을 나타낸다. ARI가 0이면 클러스터링 결과가 무작위 할당과 유사함을 의미하며, ARI가 음수이면 클러스터링 결과가 무작위 할당보다 더 나쁨을 의미한다.

예시

먼저, 주어진 labels_truelabels_pred로부터 contingency table을 만들어 보자.

123
1110
2012

Contingency table은 실제 클래스와 예측 클래스 간의 빈도를 나타내는 표이다. 위 표에서 행은 실제 클래스를, 열은 예측 클래스를 나타낸다. 예를 들어, (1, 1) 성분은 실제 클래스가 1이고 예측 클래스도 1인 데이터 포인트의 개수를 나타낸다.

Adjusted Rand Index

다음으로, 위 식을 나눠보자. aIndex와 bIndex는 다음과 같이 계산된다.

aIndex = [Σ (ni choose 2)]

bIndex = [Σ (nj choose 2)]

여기서 ni는 contingency table의 i번째 행의 합, nj는 contingency table의 j번째 열의 합, n은 전체 데이터 포인트의 수이다.

  • 행 : n1 = 2, n2 = 3
  • 열 : n1 = 1, n2 = 2, n3 = 2

따라서 aIndex = [(2 choose 2) + (3 choose 2)] = 4, bIndex = [(1 choose 2) + (2 choose 2) + (2 choose 2)] = 2이다.

마지막으로, ARI를 계산해보면 다음과 같다.

ARI = (1 - aIndex*bIndex/(n choose 2)) / (1/2(aIndex + bIndex)-(aIndex*bIndex)/(n choose 2)) = (1- 0.8) / (3 - 0.8)

따라서 주어진 데이터에 대한 ARI는 0.09이다.

마무리

이번 포스팅에서는 데이터 클러스터링의 개념과 K-means, 계층적 클러스터링 알고리즘, 그리고 클러스터링 성능 평가 방법에 대해 알아보았다. 클러스터링은 데이터의 숨겨진 패턴을 발견하고 유용한 정보를 추출하는 강력한 도구다. 다음 포스팅에서는 차원 축소(Dimensionality Reduction)에 대해 알아보겠다.

추천글 : 
[데이터사이언스기초] Data Visualization - 불확실성의 시각화와 회귀/상관 분석
(https://hyeonb.blogspot.com/2024/06/data-visualization_3.html)
[데이터사이언스기초] Introduction to Machine learning
(https://hyeonb.blogspot.com/2024/06/introduction-to-machine-learning.html)
[데이터사이언스기초] Machine learning process
(https://hyeonb.blogspot.com/2024/06/machine-learning-process.html)

hyeon_B

안녕하세요! AI 기술을 이용해 더 나은 세상을 만들어 나가고 싶은 과기원생 Hyeon이라고 합니다. 저는 앞으로 인공지능 시대에는 지식을 '활용'하는 능력이 중요해질 것이라고 생각합니다. 대부분의 일들은 인공지능이 뛰어난 모습을 보이지만, 인공지능은 데이터로 부터 연관관계를 학습하기 때문에 지식들을 새로 통합해서 활용하는 능력이 부족합니다. 인공지능이 뉴턴 전에 만들어졌다면 사과가 떨어지는 이유에 대답하지 못했을 것이고, 아인슈타인 전에 만들어졌다면 중력이 어떻게 생기는지 설명하지 못했을 것입니다. 따라서 앞으로 우리는 '본질'을 탐구하고 그 본질로부터 다른 곳에 적용하며 인공지능을 현명하게 활용해야 할 것입니다. 함께 인공지능 시대를 준비합시다!

댓글 쓰기

다음 이전

POST ADS1

POST ADS 2