1. Kmeans
1-1. 개념
•
K개의 평균으로부터 거리를 계산하고,
•
가까운 평균으로 묶어
•
cluster를 나누는 방식
1-2. 절차
•
클러스터 개수 지정(K)
•
그룹의 중심 점(mean)이 무작위로 선택
•
임의로 선택된 중심 점과 각 점 간의 거리를 계산 → 가장 가까운 중심점의 그룹으로 선택됨
•
선택된 그룹의 점들을 기준으로 중심점을 계산해서 찾고
•
위 3 ~ 4단계를 반복(중심점의 변화가 거의 없을 때까지)
1-3. 문법
•
n_clusters : k 개수
•
n_init
◦
옵션
▪
초기값 무작위 지정
▪
지정된 회수만큼 수행
▪
‘auto’ : 데이터 크기와 군집 수에 맞게 적절하게 지정(default)
•
학습과 예측 모두 x만
◦
예측 결과는 지정한 클러스트 개수 내에서 구분
# 학습
model = KMeans(n_clusters=2)
model.fit(x)
# 예측
pred = model.predict(x)
Python
복사
1-4. 적정 K값 찾기
클러스터 개수를 어떻게 지정하는 것이 좋을지 결정해 줄 수 있는 기준을 알아본다.
1-4-1. inertia
군집화가 된 후, 각 중심점에서 군집의 데이터 간의 거리를 합산한 값
아무래도 K 가 적절할수록 군집의 중심점과 각 군집별 데이터들간의 거리는 줄어들 것이다.
값이 작을수록 군집화가 잘됐다고 볼 수 있다.
→ 클러스터 개수(K)를 증가시키면서
→ Inertia value 값의 변화가 거의 없는 구간의 K값을 찾는다(Elbow Method)
→ 시각화로 확인(Elbow Method 지점을 확인한다!)
1-4-2. 실루엣 점수
클러스터링 결과의 품질 측정 지표다.
•
-1 ~ 1 사이의 값을 가진다.
◦
1에 근접 : 클러스터간 거리는 멀고, 클러스터내 거리는 가깝다(좋음)
◦
0에 근접 : 클러스터간 거리와 클러스터내 거리 비슷(클러스터가 중첩)
◦
-1에 근접 : 클러스터링 결과가 부적절
•
실루엣 점수를 구하려면 적어도 K ≥ 2 여야 한다.
→ k 개수를 증가시키면서
→ 실루엣 점수가 1에 근접하는 구간의 k값을 확인한다.
→ 시각화로 확인
보통 적정 KMeans 함수에서 적절한 K값을 찾아나갈 때 inertia 값과 실루엣 점수를 모두 살펴보고 적절한 값을 정하는 것이 일반적이다.
1-5. Kmeans 단점
•
중심점에서의 거리로 군집화를 하기 때문에 데이터가 원형 형태로 있는 경우에만 군집이 잘 형성된다.
•
이런 단점을 보완한 알고리즘이 DBSCAN 모델이다.
2. DBSCAN
연쇄적으로 근처의 데이터들을 클러스터 안에 포함시키는 특징이 있다.
•
데이터의 분포가 덩어리 형태가 아니어도 군집을 만들 수 있다.
•
연쇄적으로 묶을 반경(epsilon)을 수동으로 정해줘야 한다.
2-1. 절차
•
임의의 한 점으로부터 시작
•
반경 범위내(epsilon)에 최소 포인트 수(n)가 존재하는지 확인
•
존재한다면 각 포인트를 중심으로 다시 원을 그어 최소 포인트 수 확인
•
위의 2 ~ 3을 반복수행
•
존재하지 않으면, 군집에 포함되지 않는 점으로 이동해 1 ~ 4를 반복수행
•
어느 군집에도 포함되지 않는 점은 이상치로 간주
2-2. 적정 epsilon, n 찾기
•
KNN 알고리즘으로부터
◦
각 점과 근처 n개 점과의 평균 거리 계산
◦
거리 순으로 정렬해 그래프 그리기
◦
급격히 멀어지기 시작하는 거리 구간을 찾아 eps 값으로 적용(Elbow method)
◦
시각화로 확인