비지도 학습(unsupervised learning)

- 레이블이 달린 데이터를 이용해 모델을 학습하는 과정 없이 데이터로부터 의미를 이끌어내는 통계적 기법.

- 데이터로부터 모델을 만드는 것이 목적이긴 하지만, 응답변수와 예측변수 사이의 구분이 없다.

 

< 비지도 학습의 목적 >

- 데이터의 의미 있는 그룹들을 찾기 위해 클러스터링(clustering)을 사용한다.

- 데이터의 변수들을 관리할 수 있을 만한 수준으로 차원을 줄이는 것(reducing the dimension).

- 변수와 레코드의 수가 아주 큰 상황이라면, 데이터 비지도 학습을 탐색적 데이터 분석의 연장으로 볼 수 있다.

 

< 비지도 학습과 예측 >

- 클러스터링은 특히 콜드스타트(cold-start) 문제에서 유용한 방법이다.

→ 패턴이 비슷한 데이터들을 분류하여 학습 과정을 더 빨리 시작할 수 있도록 도와준다.

 

- 빅데이터에서 어떤 작은 부모집단(subpopulation)이 전체 모집단을 잘 대표하지 못한다면, 미리 학습된 모델은 이 부모집단에 대해 좋은 성능을 보일 수 없을 것이다.

클러스터링을 사용하면 부모집단을 식별하고 레이블을 지정할 수 있다.

 

1. 주성분분석

- 주성분분석(PCA; principal components analysis)은 수치형 변수가 어떤 식으로 공변하는지 알아내는 기법이다.

용어 의미
주성분(principal component) 예측변수들의 선형결합
부하(loading) 예측변수들을 성분으로 변형할 때 사용되는 가중치
스크리그래프(screeplot) 성분들의 변동을 표시한 그림, 성분들의 상대적인 중요도를 보여준다.

 

- PCA의 아이디어는 다수의 수치형 예측변수들을 더 적은 수의 변수들의 집합으로 나타내는 것이다.

- 새로운 변수들은 원래 변수들에 가중치를 적용한 선형결합을 의미한다.

- 전체 변수들의 변동성을 거의 대부분 설명할 수 있는 적은 수의 변수들의 집합을 주성분이라고 하며, 이를 이용해 데이터의 차원을 줄일 수 있다.

 

1) 예제

두 변수 $X_1$과 $X_2$에 대해 두 주성분 $Z_i$($i$=1또는 2)이 있다고 하자.

 

$Z_i=w_{i,1}X_1 + w_{i,2}X_2$

 

- 가중치 $(w_{i,1},w_{i,2})$를 주성분의 부하라고 한다.

- $Z_1$은 전체 변동성을 가장 잘 설명하는 선형결합.

- $Z_2$는 나머지 변동성을 설명한다.(동시에 최악의 비팅을 보이는 선형 조합이기도 하다.)

 

- R에서는 princomp 함수를 이용해 주성분을 계산할 수 있다.

 

2) 주성분 계산

  1. 첫 번째 주성분을 구하기 위해 PCA는 전체 변동을 최대한 설명하기 위한 예측변수의 선형결합을 구한다.
  2. 이 선형결합은 첫 번째 예측변수 $Z_1$이 된다.
  3. 같은 변수들을 이용해 새로운 두 번째 변수 $Z_2$를 만들기 위해, 다른 가중치를 가지고 이 과정을 반복한다. 가중치는 $Z_1$과 $Z_2$가 서로 상관성이 없도록 결정한다.
  4. 원래 변수 $X_i$의 개수만큼 새로운 변수 $Z_i$를 구할 때까지 이 과정을 계속한다.
  5. 대부분의 변동을 설명하기 위해 필요한 만큼의 주성분을 선택해 남겨놓는다.
  6. 결과적으로 각 주성분에 대한 가중치 집합을 얻게 된다. 마지막 단계는 원래 데이터를 이 가중치들을 적용해 새로운 주성분으로 변형하는 것이다. 이렇게 얻은 새로운 값들을 예측변수들의 차원이 축소된 형태로 사용할 수 있다.

3) 주성분 해석

- 주성분의 상대적인 중요도를  표시해주는 스크리그래프 : screeplot 함수를 이용

- 상위 주성분들의 가중치를 표시하는 것 : ggplot 패키지와 함께 tidyr 패키지의 gather 함수를 사용.

 

· 주성분은 예측변수(수치형)들의 선형결합이다.
· 주성분들은 서로 간의 상관관계가 최소화되며 중복성이 줄어들도록 한다.
· 제한된 개수의 주성분들로도 결과 변수에서 대부분의 변동을 설명할 수 있다.
· 제한된 개수의 주성분들을 원래 예측변수를 대신하여 차원이 감소된 형태로 사용할 수 있다.

2. K 평균 클러스터링

- 클러스터링의 목적은 데이터로부터 유의미한 그룹들을 구하는 것이다.

- K 평균(k-means)은 최초로 개발된 클러스터링 기법이다. 알고리즘이 상대적으로 간단하고 데이터 크기가 커져도 손쉽게 사용할 수 있다는 점에서 아직도 널리 사용되고 있다.

용어 의미
군집(cluster) 서로 유사한 레코드들의 집합
클러스터 평균(cluster mean) 한 클러스터 안에 속한 레코드들의 평균 벡터 변수
K 클러스터의 개수

- K 평균은 데이터를 K개의 클러스터로 나눈다. 이때 할당된 클러스터의 평균과 포함된 데이터들의 거리 제곱합이 최소가 되도록 한다. 이것을 클러스터 내 제곱합 또는 클러스터 내 SS라고 한다.

 

1) 예제

- 변수가 $x, y$ 두 개이고 레코드가 $n$개인 데이터가 있다고 하자. $K=4$, 즉 4개의 클러스터로 데이터를 분할하고 싶다고 가정하자.

- 클러스터 $k$에 $n_k$개의 레코드가 들어 있다고 할 때, 클러스터의 중심 $(\bar{x_i}, \bar{y_i})$는 클러스터 내에 존재하는 점들의 평균을 의미한다.

 

$\bar{x_k}=\frac{1}{n_k}\sum_{i\in클러스터 k}{x_i}\bar{y_k}$

$=\frac{1}{n_k}\sum_{i\in클러스터 k}{y_i}$

 

- 클러스터 내부의 제곱합은 아래와 같다.

$SS_k=\sum_{i\in클러스터k}(x_i-\bar{x_k})^2+(y_i-\bar{y_k})^2$

 

- K 평균은 4개의 모든 클러스터의 내부 제곱합$(SS_1+SS_2+SS_3+SS_4)$이 최소가 되도록 레코드들을 클러스터에 할당하는 방법이다.

- R에서 K 평균 클러스터링을 실행하려면 kmeans 함수를 사용한다.

 

2) K 평균 알고리즘

- 일반적으로 K 평균은 $p$개의 변수 $X_1,\cdot\cdot\cdot,X_p$를 갖는 데이터에 적용될 수 있다. K 평균은 정확한 해를 계산하기는 매우 어려우므로, 휴리스틱한 방법을 통해 국소 최적화된 해를 효과적으로 계산한다.

 

- 사용자가 미리 정해준 K 값과 클러스터 평균의 초기값을 가지고 알고리즘을 시작하며, 아래 과정을 반복한다.

  1. 각 레코드를 거리가 가장 가까운 평균을 갖는 클러스터에 할당한다.
  2. 새로 할당된 레코드들을 가지고 새로운 클러스터 평균을 계산한다.

- 각 레코드에 대한 클러스터 할당이 더 이상 변화하지 않을 때 알고리즘이 수렴했다고 볼 수 있다.

- 첫 번째 단계에서 클러스터 평균의 초기값을 설정할 필요가 있다. 보통은 각 레코드를 K개의 클러스터들 가운데 하나에 랜덤하게 할당한 후 그렇게 얻은 클러스터들의 평균을 사용한다.

 

3) 클러스터 해석

- kmeans에서 가장 중요한 출력은 클러스터의 크기와 클러스터 평균이다.

- 클러스터 크기는 비교적 균일하다. 유난히 균형이 맞지 않는 클러스터가 존재한다면 이는 멀리 떨어진 특잇점들이 있거나 아니면 어떤 레코드 그룹이 나머지 데이터로부터 아주 멀리 떨어져 있다는 것을 의미한다.

 

4) 클러스터 개수 선정

* 팔꿈치 방법(elbow method)

- 언제 클러스터 세트가 데이터의 분산의 '대부분'을 설명하는지를 알려준다.

- 새로운 클러스터를 더 추가하면 분산에 대한 기여도가 상대적으로 작아진다. 이는 누적 분산이 가파르게 상승한 다음 어느 순간 평평하게 되는 지점을 의미한다.

 

※ 일반적으로 클러스터의 개수를 정확히 얻는 완벽한 방법은 없다.

 

· 사용자가 원하는 클러스터 개수 K를 선택한다.
· K 평균 알고리즘은 더 이상 클러스터가 변하지 않을 때까지 반복해서 클러스터 평균이 가장 가까운 클러스터에 레코드를 할당한다.
· 실무적인 고려 사항을 활용해 K를 선택하는 것이 가장 일반적이다. 통계적으로 최적의 클러스터 개수를 구하는 방법은 없다.

< 참고자료 >
1. Peter Brucs & Andrew Brucs(2018). 데이터 과학을 위한 통계. 한빛미디어. 이용준 옮김.

'공부 > 데이터 과학을 위한 통계(한빛미디어)' 카테고리의 다른 글

18. 비지도학습(2)  (0) 2021.02.01
16. 통계적 머신러닝(2)  (0) 2021.01.11
15. 통계적 머신러닝(1)  (0) 2021.01.07
14. 분류(2)  (0) 2021.01.05
13. 분류(1)  (0) 2021.01.01

+ Recent posts