외로운 Nova의 작업실
비지도학습 - 군집화 본문
- 군집화
군집화는 비지도학습의 일종으로 데이터의 특징만으로 비슷한 데이터들끼리 모아 군집된 클래스로 분류합니다. 예를 들어, 한교실에 있는 학생들의 키 값만 가지고. 키큰 그룹, 키 작은 그룹으로 나누고 싶을때 사용하는 알고리즘이 바로 군집화입니다.
- K 평균 알고리즘
K 평균 알고리즘은 간단하면서도 강력한 군집화 알고리즘입니다. 기본적으로 다음과 같은 순서로 진행됩니다.
1. 데이터 준비
2. 몇개의 클래스로 분류할 것 인지 설정
3. 클러스터의 최초 중심 설정
4. 데이터를 가장 가까운 클러스터로 지정
5. 클러스터 중심을 클러스터에 속한 데이터들의 가운데 위치로 변경
6. 클러스터의 중심이 바뀌지 않을때 까지 4번 5번과정을 반복 수행
예를 들어 학생들의 키와 몸무게 데이터로 키크고 건장한 체격, 키크고 왜소한 체격, 키작은 체격으로 나누어보겠습니다.
첫번째는 몇개의 클래스로 분류할 것인지 정해야합니다. 저희는 3개로 할 것입니다. 그리고 최초의 클러스터 중심을 설정해야합니다. 그 방법에는 아래와 같은 3가지 방식이 있습니다.
1. 무작위 설정 : 무작위로 처음으로 클러스터 중심을 설정합니다.
2. 최초 중심값 부여 : 최초 중심값을 구체적으로 지정해주는 방법입니다.
3. Kmean++ : 최초 데이터 포인터 지점을 첫번째 클러스터 중심으로 설정하고 그 다음 가장 먼 데이터 포인트를 다음 클러스터 중심으로 설정하는 방법입니다. 아래는 Kmean++ 알고리즘을 설명한 그림입니다.
이제 초기의 클러스터 중심을 설정했다면 각 데이터 포인트를 클러스터로 소속시켜줍니다.
모든 데이터 포인트를 클러스터에 소속시켯다면 클러스터 중심을 데이터 포인트의 중심으로 옮겨줍니다.
그리고 아까 했던 4번의 과정 5번의 과정을 반복해줍니다. 클러스터의 중심이 바뀌지않을때까지 입니다.
- 실습
실제로 세 그룹을 분류하는 예제를 직접 실습해보겠습니다. 먼저 데이터를 만들어주겠습니다.
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
df = pd.DataFrame(columns=['height', 'weight'])
df.loc[0] = [185,60]
df.loc[1] = [180,60]
df.loc[2] = [185,70]
df.loc[3] = [165,63]
df.loc[4] = [155,68]
df.loc[5] = [170,75]
df.loc[6] = [175,80]
데이터를 시각화 해보겠습니다.
sns.lmplot('height', 'weight',
data=df, fit_reg=False,
scatter_kws={"s": 200})
이제 군집화해줍니다.
data_points = df.values
kmeans = KMeans(n_clusters=3).fit(data_points)
#군집의 중심 확인
kmeans.cluster_centers_
#군집 소속 데이터 저장
df['cluster_id'] = kmeans.labels_
#시각화
sns.lmplot('height', 'weight', data=df, fit_reg=False,
scatter_kws={"s": 150},
hue="cluster_id")
'AI > machine-learning' 카테고리의 다른 글
비지도 학습 - 로지스틱 회귀 (0) | 2023.11.07 |
---|---|
비지도학습 - 선형 회귀 (1) | 2023.11.06 |
앙상블 기법 (0) | 2023.11.03 |
지도 학습 - 나이브 베이즈 (0) | 2023.11.02 |
지도 학습 - 의사결정 트리 (1) | 2023.10.31 |