파이썬스터디

12.1 unsupervised learning (비지도 학습) : k-means 알고리즘

0v0k 2024. 11. 14. 19:55

지도학습 : 특징/입력과 해당 출력 또는 레이블이 있는 훈련 샘플을 사용해 지도학습으로 새 데이터에 대한 레이블을 예측했음.  X, Y가 주어짐. 

비지도 학습 : 특징만 있고 데이터 세트에 대한 해당 출력이나 레이블이 없음.  X만 주어짐. 

 

비지도 학습은 무엇을 학습하는가?

->표준적인 예가 클러스터링

 

(미리보기)

12.1 Clustering (군집화) : 유사한 샘플을 모아 같은 그룹으로 묶는 일 

< 목표 > : 데이터 포인트의 특징 간의 "유사성"을 기반으로 데이터를 그룹화할 수 있는 알고리즘을 개발하는 것.

 

12.2 Autoencoders (오토 인코더) : 원본 데이터의 압축 버전을 학습해 데이터에 대한 통찰력을 얻으려고 함.

같은 데이터 셋의 우수한 저차원 피처 표현을 찾는 것.

< 활용 사례 >

- 이러한 통찰은 데이터의 근본적인 변동 요인을 파악하는 데 도움이 됨. -> 과학적 발견에 도움이 됨.

- 효율적인 저장 또는 통신을 위한 데이터 압축, 지도 학습 전 데이터 전처리에 유용할 수 있음.

- 전처리-> 우수한 분류기(classifier) 또는 회귀 모델을 학습하는 데 필요한 데이터 양을 줄일 수 있음. 

 

 

12.1 Clustering (군집화) 

데이터 셋은 종종 여러 범주로 나눌 수 있음. 

데이터 셋에서 의미 있는 그룹을 자동으로 식별하는 문제를 군집화라고 부름.

==> 군집화를 통해 데이터를 효과적으로 해석하고, 각 그룹에 최적화된 결정을 내릴 수 있음. 

 

12.1.1 Clustering formalisms (군집화 형식)

데이터 포인트 x를 y에 매핑하는 과정이라 분류와 군집화는 비슷해보임. 하지만 다름

분류와 다른 점 : 군집화는 사전 라벨 없이 자동으로 데이터를 그룹화한다는 점에서 차별화됨.

군집화는 라벨이 있는 예제를 통해 학습하지 않기 때문에 비지도 학습 알고리즘의 한 예임.

 

의 데이터 공간에서 분포를 기반으로 데이터 포인트를 범주에 할당함.

 

 

- 클러스터 : 서로 가까운 데이터 포인트의 그룹. 다른 클러스터와는 멀리 떨어져 있어야 함. 

                   데이터가 클러스터링 되면 데이터셋이 여러 클러스터로 나뉘게 됨.

- 데이터 포인트 : 각 개별적인 관측치나 값. 

 

 

약 다섯 개의 데이터 포인트 집단이 있음. 이를 클러스터라고 부를 수 있음.

각 집단의 모든 데이터 포인트를 해당 클러스터에 할당한다고 가정하면, 우리는 근접한 포인트들이 같은 클러스터에 속하고, 멀리 떨어진 데이터 포인트들은 다른 클러스터에 할당되기를 원할 수 있음.

 

 

 

       <그림 12.1> 우리가 클러스팅하고자 하는 데이터 셋

 

군집화 알고리즘을 설계할 때 고려해야 할 세 가지 주요 사항

1. 데이터 포인트 간의 거리를 어떻게 측정할지? 근접함/멀리 떨어짐 기준은?

2. 몇 개의 클러스터를 찾아야 하는지?

3. 군집화의 품질을 어떻게 평가할 것인지?

 

12.1.2 k-means formulation (K-평균 공식화)

가장 일반적으로 사용되는 군집화 알고리즘 중 하나임.

<목표> : 클러스터 내부의 분산이 가능한 한 작아지도록 데이터 포인트를 K개의 클러스터에 할당하는 것.

목적 함수(손실 함수 + 정규화)를 최소화하는 방식으로 공식화될 수 있음을 보여줌.

x(i)의 클러스터 할당을 {1,2,....,k}의 집합y(i)로 나타냄.

-> y(i)=1은 데이터 포인트 x(i)가 클러스터 번호 1에 할당된다는 것을 의미.

k-means 목적함수

n: 전체 데이터 포인트의 수 / K : 클러스터의 수 / x(i) : 데이터 포인트 i / y(i) : 데이터 포인트 x(i)가 속한 클러스터 번호 (1~K) / M(j) : 클러스터 j의 중심 (해당 클러스터에 속한 데이터들의 평균) / 1(y(i)=j) : 지시함수, 데이터 포인트 x(i)가 클러스터 j에 속하면 1, 아니면 0 

 

목적함수는 각 데이터 포인트마다, 클러스터 중심과의 거리의 제곱을 계산 -> 모든 데이터 포인트에 대해 이 값 합산 -> 총 합산된 값 작을수록 데이터 포인트들이 클러스터 중심에 가깝게 모여 있다는 뜻. -> 목적함수 값 최소화하면 각 클러스터 내부의 데이터들이 서로 가깝게 모이게 됨. 

 

클러스터 내 데이터 포인트의 분산을 측정해 이를 최소화하는 방식으로 정의됨. 각 클러스터의 평균을 사용해 계산됨. 

M(j)는 클러스터 j에 속한 모든 데이터 포인트의 평균, 1(y(i)=j) 는 지시함수로, 조건이 참일 때(y(j)=j)는 1의 값, 거짓일 때(y(i)=j) 0의 값 가짐. 

특정 데이터 포인트 x(i)가 클러스터 j에 속하면 1 반환, 그렇지 않으면 0을 반환해 해당 데이터가 해당 클러스터에 속하는지 여부를 나타내는 역할. 

우리는 모든 k개의 클러스터의 분산을 합산해 전체 손실을 얻음. 

 

<과정>

1. 초기화 : 임의로 K개의 클러스터 중심 M(1), M(2), ... , M(k)선택.

2. 클러스터 할당 : 각 데이터 포인트 x(i)에 대해 모든 클러스터 중심과의 거리 계산 -> 가장 가까운 클러스터 중심을 찾아 y(i)로 할당

3. 클러스터 중심 업데이트 : 각 클러스터에 대해, 해당 클러스터에 속한 모든 데이터 포인트의 평균 계산-> 새로운 클러스터 중심 M(j)를 업데이트.

4. 반복 : 2와 3번 단계를 목적함수의 값이 더이상 크게 변하지 않을 때까지 반복.

 

12.1.3 k-means 알고리즘

k-means 알고리즘은 다음 두 단계를 번갈아 수행하며 손실을 최소화한다.

초기 클러스터 할당이 주어졌을 때 : 

1. 각 클러스터의 모든 데이터의 평균을 계산하고 이를 "클러스터 평균"으로 할당

2. 각 데이터 포인트를 가장 가까운 클러스터 평균이 있는 클러스터로 재할당

k 평균 알고리즘 실행한 첫 세 단계. 

x는 클러스터 평균.

 

각각의 데이터가 가장 가까운 클러스터 평균으로 재할당될 때마다 k-means 손실은 감소하거나 동일하게 유지됨.

매번 클러스터 평균을 재계산할 때 손실도 감소하거나 동일하게 유지됨. 

전체적으로 클러스터링은 계속 개선되어 목적에 따라 더 나은 결과를 얻으며 이는 개선이 멈출 때까지 지속됨.

클러스터 할당과 평균 업데이트 단계 4번 반복한 후, k-means 알고리즘은 개선이 멈추고 최종은 아래 그림처럼.

 

 

 

<- 안정적인 클러스터링 결과!

 

 

 

 

 

 

 

k-means 알고리즘

4,5번째 줄 : n개의 데이터 포인트에 대한 for 루프는 각 데이터 포인트를 가장 가까운 클러스터 중심에 할당.

6,7번째 줄 : k개의 클러스터에 대한 for 루프는 현재 할당된 데이터 포인트들의 평균을 계산해 클러스터 중심을 업데이트.

손실이 최소값에 도달하면 9번째 줄 break문을 통해 알고리즘 멈춤.

클러스터를 스스로 찾아내 그룹을 형성

 

12.1.4 Using gradient descent to minimize k-means objective (k-means 목적 함수를 최소화하기 위한 경사하강법 사용)

경사하강법을 사용해 k-means의 목적 함수를 최적화 할 수 있음. 

 

<- 목적함수를 μ 에 대한 미분 가능한 함수로 작성.

 

 

 

 

L(μ)는 데이터 포인트가 가장 가까운 클러스터 평균에 할당될 때 k-means 손실의 값.

 

<- μ에 대해 미분한 경사를 사용해 클러스터 할당이 최적일 때 손실이 최소가 되는 μ의 값을 찾을 수 있음.

최적화된 μ값을 기준으로 각 데이터 포인트를 가장 가까운 클러스터 평균에 할당해 최적의 클러스터 할당을 얻음.

* k-means 알고리즘과 유사하게 지역 최적화에 도달하지만, 목표 함수가 볼록하지 않으므로 전역 최적화에 도달하지 않을 수 있음. 

지역 최적화 : 초기값에 따라 얻어지는 비교적 좋은 결과 / 전역 최적화 : 모든 가능한 클러스터링 중 가장 좋은 결과

 

12.1.5 Importance of initialization (초기화의 중요성)

k-means 알고리즘은 처음에 무작위로 k 설정함. 이 때 초기 중심이 서로 멀리 떨어지지 않고 한 곳에 집중되어 있다면, 초기 중심에 가까운 데이터 포인트들은 특정 클러스터로 몰리게 됨. 반대로 초기 중심이 이상한 위치에 잡히면, 실제 비슷한 데이터 포인트들이 서로 다른 클러스터에 배정될 수 있음. 결국 비효율적인 클러스터링 생성할 수 있음.

 

왼 : 안좋은 초기화 / 오 : 잘 된 초기화

안좋은 초기화 이유 :

노란색, 빨간색 클러스터 중심이 실제로는 하나의 큰 클러스터가 되어야 할 부분에 서로 가까운 위치에 설정되어있음

-> 노란색으로 가야 할 데이터가 빨간색으로 가게될 수 있음.

잘 된 초기화 이유 : 

초기 클러스터 중심이 데이터 밀집된 부분의 중심에 가깝게  설정되어 있어서 데이터 뭉치가 하나의 클러스터로 안정적으로 수렴함. 

 

해결 방법 :

1. k-means ++ 초기화 : 초기 중심을 단순히 무작위로 선택하는 것이 아니라, 서로 멀리 떨어진 위치에 있도록 선택-> 클러스터들이 초기에 적절히 떨어져 있어 최종 결과가 더 안정적임. 

2. 반복실행 : k-means 알고리즘을 여러 번 실행하되, 매번 다른 무작위 초기값을 사용하고, 최종적으로 가장 낮은 손실을 가진 클러스터링 결과를 선택. 

 

12.1.6 Importance of k(k의 중요성)

클러스터링 알고리즘에서 중요한 결정 중 하나는 찾고자 하는 클러스터의 수인 k다.

k는 k-means 알고리즘에서 하이퍼파라미터임. 

하이퍼 파라미터 : 사용자가 직접 설정해야 하는 값. ↔ 파라미터 : 모델이 학습을 통해 데이터에서 자동으로 찾는 값. 선형 회귀 모델에서 가중치, 절편이 파라미터임. 

 

k=5일 때 k=4일 때보다 하나 더 나눠짐.

k값 ↑ =클러스터 ↑ =클러스터 내부 분산 ↓ =목적함수 값 일반적으로 ↓ 

계층적 클러스터링 : k-means를 넘어서는 중요한 클러스터링 방법 중 하나. 트리구조 발견에 유용함.

→ 처음에 데이터를 대략적으로 나누고, 트리 구조의 최상위에서 시작해 아래로 내려가면서 점점 더 세부적으로 데이터를 나누고 클러스팅함.

 

12.1.7 k-means in feature space (특성 공간에서의 k-means)

클러스터링 알고리즘은 데이터 포인트들 간의 유사성 개념을 기반으로 데이터를 그룹화하기 때문에, 거리 측정 방식을 정의해야함. 

k-means 알고리즘은 유클리드 거리를 사용. 

유클리드 거리

 

<- 유클리드 거리, 이를 제곱한 값이 손실 함수로 사용.

 

더 흔한 방법 : 유클리드 거리를 특성 공간에서 측정하는 것. 데이터에서 더 좋은 특성표현인 ϕ(x)를 정의한 후, 특성 공간에서 k-means 적용할 수 있음.

 

 

-> 특성 공간에서 데이터 포인트와 클러스터 중심 사이의 유사성을 측정하고, 각 데이터가 가장 가까운 클러스터로 할당되도록 함. 

 

-> 원래 데이터 공간에서보다 더 의미있는 클러스터링 할 수 있음. = 데이터의 중요한 특징이나 패턴 반영해 클러스터링 할 수 있음.

 

 


k-means 알고리즘 : 데이터를 k개의 클러스터로 나누는 비지도 학습 기법.

데이터 포인트를 가장 가까운 클러스터에 할당해 클러스터 내부의 분산을 최소화하는 것이 목적.

초기 클러스터 중심을 무작위로 선택하는데, 이 초기화가 결과에 큰 영향을 미침. -> k-means++ 방법 사용

적절한 클러스터 수(k)선택이 중요. 

클러스터링은 데이터 시각화, 해석에 도움이 됨. 예측 모델 전처리 단계에도 유용하게 사용. 

 

++)추가
적정한 k값을 찾는 방법

1. 엘보우 기법 (Elbow Method)

SSE : 클러스터 중심 간의 거리를 측정한 후 제곱하여 모든 클러스터에 대한 제곱 오차를 합산한 값.

클러스터 수가 증가함에 따라 SSE의 감소율이 급격히 줄어드는 지점을 찾아야함

클러스터 개수를 두고 비교한 그래프를 통해 엘보우 포인트 찾기

SSE값이 급격한 경사도를 보이다가 완만한 경사를 보이는 부분이 엘보우 포인트임

엘보우 지점을 군집 수로 선택하는 기법을 통해 최적의 k값을 선택할 수 있음

k=4

 

2. 실루엣 기법 (Silhouette Method)

군집이 효율적으로 잘 분리되었는지에 초점

실루엣 지수는 동일 클러스터 내 데이터 뭉쳐있고(응집도), 다른 클러스터 간의 걸리가 멀다면(분리도) 높은 값을 가짐

실루엣 계수는 -1~1사이값을 가짐

클러스터 개수가 최적화 되어있으면 실루엣 계수는 1에 가까워짐

실루엣 계수 구하는 방법

a : 동일 클러스터 내 데이터 포인트 i와 같은 클러스터에 속한 다른 모든 점까지의 평균 거리(클러스터 간 응집도)

b : 데이터 포인트 i와 다른 클러스터의 평균 거리 중 가장 가까운 클러스터 까지의 거리 (클러스터 간 분리도)

max는 a와 b중 더 큰 값을 선택해서 실루엣 계수를 계산

a<b : 클러스터링 잘 된 경우 / a>b : 클러스터링 잘못된 경우 (i가 다른 클러스터에 가까운 데이터이므로)

i는 1부터 n까지 실루엣 계수를 구하고, 실루엣 계수의 평균을 구함! 

k=4일 때 실루엣 계수 0.699로 1에 제일 가까움.