비지도학습
비지도학습(Unsupervised Learning)이란?
- 학습 데이터로 정답(lable)이 없는 데이터가 주어지는 학습 방식
- 주어지는 데이터가 어떻게 구성되어 있는지 스스로 알아냄
- 군집화(클러스터링, clustering), 차원 축소(dimensionality reduction), 생성 모델(generative model) 등을 모두 포괄한다
클러스터링(1) K-means
- 군집화: 명백한 분류 기준이 없는 상황에서 데이터를 분석하여 가까운(유사한) 것들끼리 묶어주는 것
- K-means 알고리즘
- k 값이 주어질 때 데이터들을 k개의 클러스터로 묶는 알고리즘
- 대표적인 클러스터링 기법 중 하나
K-means 알고리즘의 적용
- 유클리드 거리(Euclidian distance)
- L2 Distance라고도 부른다
- K-mean 알고리즘의 순서
- 원하는 클러스터의 수(K)를 결정한다
- K개의 중심점(centroid)를 무작위 선정한다. 이들은 각각의 클러스터를 대표한다.
- 나머지 점들은 중심점들과의 유클리드 거리를 계산한 후, 가장 가까운 거리를 가지는 중심점의 클러스터에 속하게 한다.
- K개 클러스터의 중심점을 재조정한다. 특정 클러스터에 속하는 모든 점들의 평균값이 해당 클러스터 다음 iteration의 중심점이 된다.[1]
- 조정된 중심점과 다른 모든 점들 사이의 유클리드 거리를 계산한 후, 가장 가까운 클러스터에 재배정한다.
- 4번과 5번 과정을 반복 수행한다. 반복 횟수는 사용자가 적절히 조정한다. 특정 iteration 이상이 되면 수렴하게 된다.
- K-means 알고리즘이 잘 동작하지 않는 경우
- 군집의 개수(K값)을 알거나 예측하기 어려운 경우
- 유클리드 거리를 기반으로 하기 때문에 데이터의 분포에 따라 군집화가 성공적으로 수행되지 않는 경우가 있음
- 원형으로 분포된 데이터
- 초승달 모양의 데이터
- 대각선 모양의 데이터
사용법
1 2 3 4
from sklearn.cluster import KMeans # 모듈 import kmeans_cluster = KMeans(n_clusters=K) # 클러스터 수가 K개인 k-means 알고리즘 적용 kmeans_cluster.fit(data) # data에 대하여 K-means iteration 수행
클러스터링(2) DBSCAN
DBSCAN(Density Based Spatial Clustering of Applications with Noise)
- 밀도(density) 기반의 군집 알고리즘
- 군집의 개수를 사전에 지정하지 않아도 됨
- 밀도가 높은 클러스터를 군집화하는 방법이기 때문에 불특정한 형태의 군집도 찾을 수 있음
- DBSCAN 시각화
- 단점
- 데이터 수가 많을수록 알고리즘 수행 시간이 급격하게 늘어난다
- 데이터 분포에 맞는 epsilon과 minPts의 지정이 필요하다
DBSCAN의 변수와 용어
- epsilon: 클러스터의 반경
- minPts: 클러스터를 이루는 개체의 최솟값
- core point: 반경 epsilon 내에 minPts 개 이상의 점이 존재하는 중심점
- border point: 군집의 중심이 되지는 못하지만, 군집에 속하는 점
- noise point: 군집에 포함되지 못하는 점
DBSCAN 알고리즘의 순서
- 임의의 점 p를 설정하고, p 주변 epsilon에 포함된 점의 개수를 센다.
- 해당 epsilon에 minPts개 이상의 점이 포함되어 있으면 점 p를 core point로 간주하고 하나의 클러스터로 묶는다
- 해당 원에 minPts개 미만의 점이 포함되어 있다면 pass한다
- 모든 점에 대해 1번부터 3번까지의 과정을 반복한다. 새로운 core point가 된 점 p’가 기존 클러스터에 속한다면 두 개의 클러스터를 하나의 클러스터로 묶는다.
- 모든 점에 대해 클러스터링 과정을 끝내고 클러스터에 속하지 못하는 점이 있다면 noise point로 간주한다. 특정 클러스터에 속하지만 core point가 아닌 점들은 border point라고 한다.
사용법
1 2 3 4 5
from sklean.cluster import DBSCAN # 모듈 import epsilon, minPts = 0.2, 3 # 과정에서 사용할 epsilon, minPts값 설정 circle_dbscan = DBSCAN(eps=epsilon, min_samples=minPts) #DBSCAN setting circle_dbscan.fit(data) # data에 대하여 DBSCAN 수행
차원 축소(1) PCA
- 주성분분석(PCA)
- 데이터 분포의 주성분을 찾아주는 방법
- 주성분: 데이터의 분산이 가장 큰 방향벡터
- 데이터들의 분산을 최대로 보존하면서 서로 직교하는 기저(basis)[2]들을 찾아 고차원 공간을 저차원 공간으로 사영(projection)
- 가장 분산이 긴 축을 첫 기저로 잡고 그 기저에 직교하는 축 중 가장 분산이 큰 값을 다음 기저로 잡는다
- 이렇게 찾은 가장 중요한 기저를 주성분방향, pc축이라고 한다
- 기존 feature를 선택하는 것이 아닌 선형 결합하는 방식
- 주로 선형적인 데이터의 분포를 가지고 있을 때 정보가 잘 보존됨
- 데이터 분포의 주성분을 찾아주는 방법
차원 축소(2) T-SNE
- T-SNE(T-Stochastic Neighbor Embedding)
- 시각화에 많이 쓰임
- 데이터 간 상대적 거리를 보존해 시각화했을 때 숫자들 사이의 경계가 뚜렷함
- 정보 손실량에 주목하지 않아 저차원 축이 아무런 물리적 의미가 없기 때문에 시각화에만 유리하다
정리 및 요약
장점 | 단점 | |
---|---|---|
K-means | - 군집의 수(K)가 주어졌을 때 빠른 시간에 유클리드 거리 기반으로 군집화 수행 - 알고리즘이 단순하며 이해하기 쉬움 | - 초기 중심점이 어떻게 주어지느냐에 따라 결과값이 달라짐 -전체 거리 평균값에 영향을 주어 outlier에 민감 |
DBSCAN | - 밀도 기반의 군집화 알고리즘으로 outlier에 강건 - K-means와 달리 초기 중심점 및 K값을 설정할 필요가 없음 | - 데이터의 수가 많아질수록 K-means 알고리즘에 비해 오랜 시간이 소요됨 - epsilon, minPts 등 초기에 설정해 주어야 하는 변수 존재 |
PCA | - 데이터 분포의 분산을 최대한 유지한 채로 feature의 차원을 줄이는 차원 축소 알고리즘 - 상관관계가 적은 feature를 최대한 배제하고 분산이 최대가 되는 서로 직교하는 기저들을 기준으로 데이터를 나타내기 때문에 raw data 를 사용하는 것보다 정확하고 간결하게 데이터 표현 | 단순히 변환된 축이 최대분산 방향과 정렬되도록 좌표 회전을 수행하는 것이기 때문에 최대분산 방향이 feature의 구분을 좋게 한다는 보장이 없음 |
T-SNE | - 차원축소 전후 데이터의 상대적 거리를 유지하므로 시각화 결과가 우수 | 차원 축소 과정에서 좌표축의 물리적 의미를 무시하므로 시각화 이외의 다른 분석용도로는 사용하기 어려움 |
[1]: 이때의 중심점은 실제로 존재하는 데이터가 아니어도 상관없다.
[2]: 새로운 좌표계 역할을 할 수 있는 벡터의 모음. 우리가 사용하는 좌표값은 기저의 선형결합이다. 예를 들면 (1,1)이라는 좌표는 x방향 1, y방향 1의 선형결합이다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.