Skip to content

Commit

Permalink
feat: clustering
Browse files Browse the repository at this point in the history
  • Loading branch information
2paperstar committed Dec 7, 2024
1 parent 725eac7 commit 9dae0ef
Showing 1 changed file with 251 additions and 3 deletions.
254 changes: 251 additions & 3 deletions content/posts/2024/12/06/unsupervised-learning/index.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "Unsupervised Learning"
date: 2024-12-06T15:38:57+09:00
tags: []
tags: [ISL]
featured_image: ""
description: ""
math: true
Expand Down Expand Up @@ -101,6 +101,254 @@ $n$개의 데이터 포인트와 가장 가까운 선이라는 특징이 있다.
## Proportion Variance Explained

각 component의 strength를 알기 위해서는 PVE를 계산하면 된다.
*total variance*
*total variance* 아래와 같이 계산된다.

> WIP
$$
\sum_{j=1}^p \text{Var}(X_j) =
\sum_{j=1}^p \frac 1 n \sum_{i=1}^n x_{ij}^2
$$

그러면 $m$번째의 principal component의 variance explained는

$$
Var(Z_m) = \frac 1 n \sum_{i=1}^n z_{im}^2
$$
이 된다.

여기에서 $\sum_{j=1}^p \text{Var}(X_j) = \sum_{m=1}^M \text{Var}(Z_m)$으로 나타난다.

그래서 $m$번째 principal component의 PVE는 0~1사이의 값으로 정의할 수 있다.

$$
\text{PVE}_ {m} = \frac{\text{Var}(Z_m)}{\sum_{j=1}^p \text{Var}(X_j)}
$$

또한 이와 같이 cumulative PVE 그래프를 그리기도 한다.

## Deciding How Many Principal Components to Use

cross-validation을 사용해서 결정하는 것은 불가능하다.
앞에서 PVE를 사용해 그린 `scree plot` 을 사용하게 되는데,
이 그래프를 눈으로 보면 뚝 떨어지는 지점이 있다.
이를 `elbow`라고 부르는데, 여기까지를 사용하면 된다.

# Matrix Completion and Missing Values

missing value가 있는 것은 흔한 경우이다.
linear regression이나 GLM은 모든 데이터를 요구하기 때문에
missing value는 학습에 방해가 되는 요소이다.
이것을 채워넣는 것은 recommender system과 같은
*prediction problem*이라고 볼 수 있다.
가장 단순한 방법은 *mean imputation*으로 평균값을 사용하는 것이고,
이는 다른 변수와의 상관관계를 무시하는 방식이다.
이렇게 결측치를 채워넣을 때 상관관계를 사용해야한다.
그리고 결측치는 랜덤하게 발생해서, 결측치가 있다는 사실 자체가 정보가 되지 않는다.
이를 principal component를 사용해서 접근할 것이다.

## Example: Movie Recommendations

고객X영화 matrix를 생각해보자.
각 고객은 영화를 보고서 평점을 남기게 되는데,
모든 고객이 모든 영화를 본게 아니기 때문에 결측치가 생긴다.
이때 recommender system은 결측치를 채워넣어서
고객이 높은 평점을 줄 것으로 예측하는 영화를 추천해준다.

## Matrix Approximation via Principal Components

matrix approximation:
$$
\underset{\bold{A} \in \mathbb{R}^{n \times M}, \bold{B} \in \mathbb{R}^{p \times M}}{\text{minimize}}
\left\\{
\sum_{j=1}^p
\sum_{i=1}^n
\left(
x_{ij} - \sum_{m=1}^M a_{im}b_{jm}
\right)^2
\right\\}
$$

$\bold{A}$는 $(i, m)$에 $a_{im}$ 엘리먼트를 갖는 $n \times M$ 행렬이고
$\bold{B}$는 $(j, m)$에 $b_{jm}$ 엘리먼트를 갖는 $p \times M$ 행렬이다.

$M$을 어떤 값을 사용하던지, $M$개의 *principal components*
위 matrix approximation의 답이 된다:
$\hat{a}_ {im} = z_{im}$, $\hat{b}_ {jm} = \phi_{jm}$

이것을 사용해서 결측치를 채워넣을 수 있다.

우선 위 식을 조금 변형할 것이다

$$
\underset{\bold{A} \in \mathbb{R}^{n \times M}, \bold{B} \in \mathbb{R}^{p \times M}}{\text{minimize}}
\left\\{
\sum_{(i, j) \in \mathcal{O}}
\left(
x_{ij} - \sum_{m=1}^M a_{im}b_{jm}
\right)^2
\right\\}
$$

$\mathcal{O}$는 관측된 데이터($n \times p$)에서의 index set $(i, j)$이다.

없는 데이터 $x_{ij}$를 $\hat{x}_ {ij} = \sum_{m=1}^M \hat{a}_ {im} \hat{b}_{jm}$로 채워넣을 수 있다.
또, 데이터가 다 채워지면 (approximately하게) M principal component score와 loading을 계산한다.

### Iterative Algorithm

1. Initialize: mean imputation으로 채워넣은 data matrix $\tilde{X}$를 만든다.
2. Repeat: 아래 방법을 3번이 감소하지 않을 때까지 반복한다.
1. $\tilde{X}$의 principal components를 계산해서 다음 식을 최적화 한다. $\underset{\bold{A \in \mathbb{R}^{n \times M}}, \bold{B \in \mathbb{R}^{p \times M}}}{\text{minimize}}\left\\{ \sum_{(i, j) \in \mathcal{O}} (\tilde{x}_ {ij} - \sum_{m=1}^M a_{im}b_{jm})^2 \right\\}$
2. 없는 데이터 $(i, j) \notin \mathcal{O}$에 대해 $\tilde{x}_ {ij} \larr \sum_{m=1}^M \hat{a}_ {im}\hat{b}_ {jm}$로 설정한다.
3. $\sum_{(i, j) \in \mathcal{O}} \left(x_{ij} - \sum_{m=1}^M \hat{a}_ {im} \hat{b}_ {jm} \right)^2$
3. missing entries인 $\tilde{x}_{ij}$, $(i, j) \notin \mathcal{O}$를 얻는다.

### Example: USArrests

USArrests에서 랜덤하게 데이터를 골라 결측치로 만든 다음에
$M=1$로 matrix completion을 수행했을 때
원래 값과 imputed된 값의 correlation이 0.63으로 나왔다.

USArrest는 $p=4$로, 결측값을 채워넣기에는 작은 변수들이 있기 때문에
하나의 observation당 최대 하나의 값만 지워지게 하였고,
$M=1$을 사용했다고 한다.
보통은 이 알고리즘을 사용하기 위해서 사용할 $M$ 값을 선택해야한다.
$M$을 선택하는 방법은 결측치가 없는 데이터에서 랜덤하게 값을 삭제 한 다음
$M$값을 바꿔가면서 가장 잘 복원된 $M$을 선택할 수 있다.

# Clustering

Clustering은 subgroup, cluster를 찾는 문제이다.
데이터를 별개의 그룹으로 분리하여 각 그룹 내의 데이터가 비슷한 것을 찾는다.
이를 가능하게 하기 위해서는 두가지의 observation이 *similar*한지
*different*한지의 정도를 정의해야한다.
또, 이런 것을 정의하기 위해서는 domain-specific한 지식이 필요하다.

## PCA vs Clustering

PCA는 데이터를 잘 설명하는 low-dimensional representation을 찾는 것이고,
Clustering은 homogeneous한 그룹을 찾는 것이다.

## Clustering for Market Segmentation

많은 수의 수치(median house income, occupation, distance from nearest urban area, ...), 사람이 있다고 가정,
이 사람들을 여러 그룹으로 나누는 것이 목표이다.
이때 두가지의 방법이 있다.

- K-means clustering: 정해진 숫자의 cluster로 관측치를 분류하는 것
- hierarchical clustering: cluster의 수를 정하지 않고, *dendrogram*이라는 tree모양의 분류를
한 다음 적절한 수의 cluster를 선택하는 것

## K-means Clustering

$C_1, \dots, C_K$를 각 클러스터의 index set이라고 하자.
- $C_1 \cup \dots \cup C_K = \\{1, \dots, n\\}$
- $C_k \cap C_{k'} = \emptyset \text{ for all } k \neq k'$

*좋은* 클러스터링이란, *within-cluster variation*이 가장 작은 것을 의미한다.
$C_k$의 *within-cluster variation* $\text{WCV}(C_k)$는
각 클러스터 내에서 관측값이 얼마나 다른지를 측정하는 값이다.
그럼 K-means clustering은 아래와 같이 정의할 수 있다.

$$
\underset{C_1, \dots, C_K}{\text{minimize}} \left\\{
\sum_{k=1}^K \text{WCV}(C_k)
\right\\}
$$

말로 설명하면, K개의 cluster로 분리를 하고 싶은데, *within-cluster variation*
총합이 가장 작게 만들고 싶다는 것이다.

### Euclidean Distance based WCV

Euclidean distance를 사용해서 WCV를 정의하면

$$
\text{WCV}(C_k) = \frac 1 {| C_k |}
\sum_{i, i' \in C_k}
\sum_{j=1}^p
(x_{ij} - x_{i'j})^2
$$
이고, $|C_k|$는 $C_k$에 속한 observation의 수이다.

그래서 K-means clustering은 아래와 같이 정의할 수 있다.

$$
\underset{C_1, \dots, C_K}{\text{minimize}} \left\\{
\sum_{k=1}^K
\frac 1 {| C_k |}
\sum_{i, i' \in C_k}
\sum_{j=1}^p
(x_{ij} - x_{i'j})^2
\right\\}
$$

1. observation들을 랜덤하게 K개의 그룹으로 나눈다.
각 observation에 랜덤하게 1에서 K의 숫자를 부여한다는 것이다.
2. cluster가 변동되지 않을 까지 반복한다.
1. 각 K cluster에 대해서 *centroid*를 계산한다.
$k$번째 cluster의 centroid는 그 클러스터 내의 $p$ feature의 평균값이다.
2. 각 observation을 가장 가까운 centroid를 가진 cluster로 할당한다.
이때 가까운 centroid는 Euclidean distance로 계산한다.

iteration을 반복할 때마다 항상 WCV의 값을 줄어들게 보장 되어있다.

$$
\frac 1 {| C _ k |}
\sum _ {i, i' \in C _ k}
\sum _ {j=1}^p
(x _ {ij} - x _ {i'j})^2 =
2 \sum _ {i \in C _ k}
(x _ {ij} - \bar{x} _ {kj})^2 \\\\
\text{ where }
\bar{x} _ {kj} = \frac 1 {| C _ k |}
\sum _ {i \in C _ k} x _ {ij}
$$

즉, $\bar{x} _ {kj}$는 $k$번째 cluster의 $j$번째 feature의 평균값, centroid이기
때문에, cluster에 있는 observation들이 centroid에 가까워 질수록
WCV가 줄어드는 것이다.

하지만 K-means Clustering이 global minimum을 찾는 것은 보장되어 있지 않다.

## Hierarchical Clustering

K-means clustering이 K값을 요구하는 것과 달리, hierarchical clustering은
K값을 요구하지 않는다.
여기에서는 *bottom-up*, 또는 *agglomerative*방식의 hierarchical clustering을 다룬다.
즉, dendrogram은 마지막 leaves로부터 합쳐지면서 root로 가는 방식이다.

### Algorithm

- 각 지점이 그 자신만의 cluster로 시작한다.
- 가장 가까운 두 cluster를 합친다.
- 위 과정을 반복한다.
- 하나의 cluster로 마무리 된다.
- dendrogram을 만든다.

dendrogram을 만든 후에는 tree를 적절하게 잘라서 여러개의 cluster를 만들 수 있다.

여기에서 "가장 가까운"을 정의해야한다.
두 클러스터 사이에서 *linkage*를 정의하는 것이다.

| Linkage | Definition |
| -------- | -------------------------------------------------------------- |
| Complete | 가장 먼 두 observation 사이의 거리 |
| Single | 가장 가까운 두 observation 사이의 거리 |
| Average | 모든 observation 사이의 평균 거리 |
| Centroid | 두 클러스터의 centroid 사이의 거리. 잘못된 결과가 나올 수 있음 |
| (Ward) | 두 클러스터를 합쳐서 WCV가 가장 적게 증가하는 것 |

지금까지는 Euclidean distance를 사용했지만, 다른 distance metric을 사용할 수도 있다.
바로 *correlation-based distance*이다.
일반적으로 correlation은 변수 사이 (predictor 사이)의 관계를 측정하지만,
여기에서는 관측값 사이
$X=(x_1, \dots, x_p), X\prime = (x\prime_1, \dots, x\prime_p)$의 관계를 측정한다.

## Practical issue

- 변수의 Scaling이 문제가 될 수 있다. 변수를 standardize하면 해결가능하다
- hierarchical clustering에서는
- 어떤 dissimilarity measure를 사용할 것인가
- 어떤 linkage를 사용할 것인가
- 얼마나 많은 cluster를 고를 것인가
- clustering을 하기 위해서 어떤 feature들을 사용할 것인가

0 comments on commit 9dae0ef

Please sign in to comment.