Unsupervised Learning-Clustering
Jun 15, 2020 21:13 · 794 words · 4 minute read
Intro
2020-1학기 김현중 교수님의 데이터마이닝 수업.
Explanation
Unsupervised learning은 타겟변수가 따로 정해져 있지 않다. 그렇기 때문에 마케팅에서 고객 세분화에 주로 이용이 된다. 군집화는 유사성보다 비유사성을 기준으로 하며 거리를 이용한다. 또한 주로 연속형 변수에 대해 사용되며 범주형의 경우에는 범주별 거리의 의미파악이 힘들기 때문에 잘 사용하지 않는다.(사용하더라도 지시변수로 바꿔서 이용하지만 훌륭한 분석은 아니다.)
Distance Measures
가장 대표적인 방식으로 Euclidean 방식이 있다. \[ \begin{array} d(x,y) = (\sum_{i=1}^p (x_i - y_i)^2)^\frac{1}{2} \end{array} \]
Minkowski 거리 \[ d(x,y) = (\sum_{i=1}^p (x_i - y_i)^m)^\frac{1}{m} \] Mahalanobis 거리 \[ d(x,y) = \sqrt{(x-y)^{'}S^{-1}(x-y)} \]
Mahalanobis 거리의 경우에는 점들의 분산을 고려하기 때문에 좋은 방식이다. 다른 거리들은 분산을 고려하지 않으므로 변수간 독립을 가정한다고 생각하면 된다. 여기서 \(S^(-1)\)는 공분산 행렬의 의미를 지닌다. 그렇지만 차원이 높은 경우 역행렬 계산이 힘든 단점이 있다.
Manhattan Distance \[ d_{Manhattan(X,Y)} = \sum_{i=1}^p |x_i - y_i| \]
해당 거리는 지도에서의 거리이며 직선거리가 아니라 실제거리(직각)를 나타내는데 유용하다.
Standardization
거리에 자료의 단위가 큰 영향을 미치기에, 표준화는 필수이다. 주로 평균0, 표준편차1을 만들어준다. 관측치 표준화와 변수 표준화 두개로 나뉘는데, 관측치 표준화의 예시로는 단위면적당 판매량이나 인구 10만명당 범죄수가 있다. 변수 표준화는 feature scaling을 의미한다.
Hierarchical Clustering
Distance matrix를 만드는 것이 생명이다. 이 때 군집의 수는 사용자가 임의로 설정해야한다. 군집의 수 N에 대해 N by N matrix D는 군집간 거리를 그 원소로 가진다. 이 때 D는 단계별로 행렬 사이즈가 줄어드는데, 가장 가까운 관계에 있는 두 군집을 하나의 행과 열로 합치면서 행렬의 크기가 작아진다. 따라서 이 프로세스를 Dendrogram으로 표현할 수 있다.
거리를 계산하는 기준은 크게 5가지가 있다. Single Linkage, Complete Linkage, Average Linakge, Centroid Method, Ward’s Method.
data("USArrests")
zUSArrests=scale(USArrests)
summary(zUSArrests)
## Murder Assault UrbanPop Rape
## Min. :-1.6044 Min. :-1.5090 Min. :-2.31714 Min. :-1.4874
## 1st Qu.:-0.8525 1st Qu.:-0.7411 1st Qu.:-0.76271 1st Qu.:-0.6574
## Median :-0.1235 Median :-0.1411 Median : 0.03178 Median :-0.1209
## Mean : 0.0000 Mean : 0.0000 Mean : 0.00000 Mean : 0.0000
## 3rd Qu.: 0.7949 3rd Qu.: 0.9388 3rd Qu.: 0.84354 3rd Qu.: 0.5277
## Max. : 2.2069 Max. : 1.9948 Max. : 1.75892 Max. : 2.6444
hc1 = hclust(dist(zUSArrests),method="average")
plot(hc1, hang = -1)
rect.hclust(hc1, k=5)
cluster <- cutree(hc1, k=5) #모델자체가 들어가야한다.
cent <- NULL
for(k in 1:5){
cent <- rbind(cent, colMeans(USArrests[cluster == k,]))
}
cent
## Murder Assault UrbanPop Rape
## [1,] 14.671429 251.28571 54.28571 21.685714
## [2,] 10.000000 263.00000 48.00000 44.500000
## [3,] 10.883333 256.91667 78.33333 32.250000
## [4,] 5.530435 129.43478 68.91304 17.786957
## [5,] 2.700000 65.14286 46.28571 9.885714
계층적 군집분석 장단점
군집의 수를 알 필요가 없으며 덴드로그램을 통한 시각화가 가능한 것이 장점이다. 하지만 계산속도가 느리다.
K-means Clustering
사전에 결정된 군집수 k에 기초한 클러스터링이다. EM Algorithm과 연결이 된다. Initialization 후 군집 내 평균찾는 것을 값이 수렴하거나 일정 수 이상의 iteration이 나올 때 까지 반복. 신속하게 계산이 가능하지만 초기 군집수 K를 결정하기 어려우며 군집결과의 해석이 용이하지 않을 수 있다.
K는 어떻게 결정해야하는가?
사후판단의 방식으로 Elbow point 혹은 Silhouette plot을 이용한다. PCA와 같은 차원 축소로 시각화를 하여 K를 결정할 수도 있고 혹은 하이브리드 방식으로 대용량 데이터를 sampling하여 계층정 군집분석을 통한 Dendogram 시각화로 결정할 수도 있다.
set.seed(1234)
kmc1 = kmeans(zUSArrests,4)
kmc1
## K-means clustering with 4 clusters of sizes 13, 13, 8, 16
##
## Cluster means:
## Murder Assault UrbanPop Rape
## 1 0.6950701 1.0394414 0.7226370 1.27693964
## 2 -0.9615407 -1.1066010 -0.9301069 -0.96676331
## 3 1.4118898 0.8743346 -0.8145211 0.01927104
## 4 -0.4894375 -0.3826001 0.5758298 -0.26165379
##
## Clustering vector:
## Alabama Alaska Arizona Arkansas California
## 3 1 1 3 1
## Colorado Connecticut Delaware Florida Georgia
## 1 4 4 1 3
## Hawaii Idaho Illinois Indiana Iowa
## 4 2 1 4 2
## Kansas Kentucky Louisiana Maine Maryland
## 4 2 3 2 1
## Massachusetts Michigan Minnesota Mississippi Missouri
## 4 1 2 3 1
## Montana Nebraska Nevada New Hampshire New Jersey
## 2 2 1 2 4
## New Mexico New York North Carolina North Dakota Ohio
## 1 1 3 2 4
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 4 4 4 4 3
## South Dakota Tennessee Texas Utah Vermont
## 2 3 1 4 2
## Virginia Washington West Virginia Wisconsin Wyoming
## 4 4 2 2 4
##
## Within cluster sum of squares by cluster:
## [1] 19.922437 11.952463 8.316061 16.212213
## (between_SS / total_SS = 71.2 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
pairs(zUSArrests, col=kmc1$cluster, pch=16)
#Elbow point
wss = 0
for (i in 1:10) {
wss[i] = sum(kmeans(zUSArrests, center=i)$withinss)
}
plot(1:10, wss, type='b', xlab="Number of Clusters", ylab="Within group sum of squares")
# Wss는 군집중심과 군집내 관찰값간의 거리제곱합을 의미
# wss는 데이터의 분산을 나타낸다.
K-medoid Clustering
조금 더 로버스트한 모형을 만들기 위하여, 군집 내 대표값을 평균이 아니라 중앙값으로 설정하는 방식이다.
Silhouette
실루엣 값은 각 데이터포인트별로 값이 나온다. i번째 데이터에 대해서 해당 데이터의 군집 내 개체들간의 거리, 그리고 타군집 개체들과의 거리를 계산하여 값을 도출한다.
Densely-based Clustering
데이터의 거리뿐만 아니라, 분산도 고려하는 방식이다. dbscan을 이용하며 Eps(반지름)를 파라미터로 결정해야 한다.