-
[분석/통계] 비지도학습 - 군집(K-MEANS, 병합군집)Study/Statistics 2019. 5. 28. 18:26
군집(clustering)이란?
데이터셋을 그룹으로 묶어서 나누는 작업
클러스터(그룹) 내 동질 클러스터 간 이질
K-평균군집(K-MEANS)
데이터의 어떤 영역을 대표하는 클러스터 중심을 찾기
알고리즘
1. 데이터 포인트를 가까운 클러스터 중심에 할당
2. 클러스터에 할당된 데이터 포인트들의 평균으로 클러스터 중심 다시 지정
3. 1,2 반복
4. 더이상 데이터 포인트에 변화가 없을 때 종료
* 중간에 있어서 계속 왔다 갔다하는 경우엔 최대 시행횟수를 정해줘 종료시키기
* 유의할 점 : 초기화 과정에서 임의로 선택된 점에 클러스터 레이블이 붙기 때문에, 클러스터 레이블 번호 자체에 대한 의미는 존재하지 않고, 알고리즘을 시행할 때마다 다른 레이블 번호가 부여될 수 있어 확인을 해봐야 함
k-평균군집 실패
군집을 동글동글한 모양으로 만들어서 => 모여있는 모양이 동글한 모양이 아니면 잘 안나뉨
모든 클러스터의 반경이 똑같다고 가정해서 클러스터 중심 사이의 정확히 중간에 경계를 그림
=> 밀도(모여있는 정도)가 다른 경우 잘 안나뉨
1. 밀도가 다른 클러스터
서로 모여있는 정도가 다른 경우
클러스터0과 클러스터1은 중심에서 멀리 떨어진 포인트도 포함함
2. 원형이 아닌 클러스터
대각선 모양으로 3개가 선택되어야 하지만 떨어져있는 것이 같은 클러스터로 묶임
3. 복잡한 모양의 클러스터
곡선 2개로 선택되어야 하지만 원형모양으로 잘못 클러스터링함
k-평균군집 실패 극복 방법
복잡한 형태의 경우 클러스터를 여러개로 만들어 합쳐 구분할 수 있음
장점
이해하기 쉽고 구현이 쉽고 비교적 구현이 빨라 많이 사용됨
대용량 데이터셋에서도 잘 작동
단점
무작위 초기화를 사용해 난수 초깃값에 따라 알고리즘 출력이 달라짐
클러스터의 모양을 가정하고 있어 활용 범위가 제한적
클러스터의 개수를 지정해줘야함
pca nmf k-means 차이 비교
PCA 데이터에서 분산이 가장 큰 방향을 찾으려함
데이터 포인트를 어떤 성분의 합으로 표현
NMF 데이터의 극단 또는 일부분에 상응되는 중첩할 수 있는 성분을 찾음
데이터 포인트를 어떤 성분의 합으로 표현
K-means 클러스터 중심으로 각 데이터 포인트를 표현
각 데이터 포인트가 클러스터 중심(하나의 성분)으로 표현 됨
=> 백터 양자화(vector quantization, 각 포인트가 하나의 성분으로 분해됨)
병합군집
각 포인트를 하나의 클러스터로 지정하고, 가장 비슷한 두 클러스터를 합쳐나가는 알고리즘
알고리즘
1. 각 포인트를 하나의 클러스터로 지정
2. 가장 비슷한(가까운) 두 클러스터를 합침
3. 2반복 두 클러스터씩 계속 합치기
4. 종료조건을 만족하면 종료
이미 병합된 클러스터와 합쳐야 되는 경우
1. 모든 클러스터 내 분산을 가장 작게 증가시키는 두 클러스터 합치기
크기가 비교적 비슷한 클러스터가 만들어짐
python skit-learn에서는 ward옵션
2. 클러스터 포인트 사이의 평균 거리가 가장 짧은 두 클러스터 합치기
python skit-learn에서는 average옵션
3. 클러스터 포인트 사이의 최대 거리가 가장 짧은 두 클러스터 합치기
python skit-learn에서는 complete옵션
종료조건
python skit-learn에서는 클러스터 개수로 지정된 개수의 클러스터가 남을 때까지 비슷한 클러스터를 합침
시각화
어떤 과정으로 클러스터들이 합쳐지는 지 알 수 있음
클러스터 간 거리가 얼마나 되는지 알 수 있음
몇 개의 클러스터를 사용해야하는지 알 수 있음
장점
k-means의 단점을 극복함{
무작위 초기화를 사용해 난수 초깃값에 따라 알고리즘 출력이 달라짐 => 무작위 초기화를 사용하지 않음, 그냥 가까운!
클러스터의 모양을 가정하고 있어 활용 범위가 제한적 => 클러스터의 모양과는 상관없이 가까운걸로 구분
클러스터의 개수를 지정해줘야함 => 덴드로그램을 보면 몇 개의 클러스터를 사용할 지 알 수 있음
}
단점
복잡한 모양일 땐 구분하기 어려움
DBSCAN
KNN이랑 비슷한 개념
데이터가 붐비는 지역의 포인트를 찾아 밀집 지역이 한 클러스터를 구성해 비교적 비어있는 지역을 경계로 다른 클러스터와 구분
밀집 지역(dense region) : 데이터가 많아 붐비는 지역
핵심 샘플(=핵심 포인트) : 밀집 지역에 있는 포인트, 한 데이터 포인트에서 eps 거리 안에 데이터가 min_samples 개수만큼 들어있는 경우
알고리즘
1. 무작위로 포인트 선택
2. 포인트에서 eps 거리안의 모든 포인트를 찾음
eps 거리 안에 있는 포인트 수가 min_samples보다 적은 경우 : 잡음으로 레이블(클래스에 속하지 않는 포인트 )
eps 거리 안에 있는 포인트 수가 min_samples보다 많은 경우 : 핵심 샘플로 새로운 클러스트 레이블 할당
3. 핵심샘플의 eps 거리 안에 있는 모든 이웃에 핵심샘플의 클러스트 레이블 할당
4. eps 거리 안에 더 이상 핵심 샘플이 없을 때까지 반복
장점
클러스터의 개수를 지정할 필요가 없음
복잡한 모양에서도 구분할 수 있음
어떤 클래스에도 속하지 않은 포인트를 구분할 수 있음
큰 데이터셋에도 적용 가능
단점
병합군집이나 k-means보다 느림
'Study > Statistics' 카테고리의 다른 글
[분석/통계] 그리드 서치 (0) 2019.05.29 [분석/통계] 교차검증 (0) 2019.05.29 [분석/통계] 데이터 전처리와 스케일 조정 방법 (0) 2019.05.28 [지도학습] 의사결정나무/랜덤포레스트/그래디언트 부스팅 (4) 2019.05.24 [지도학습] KNN (0) 2019.05.23