본문 바로가기

Python

Python에서 Jupyter Notebook을 통해 머신러닝하기 : Clustering편

K-평균 군집화(K-means Clustering)를 이용한 비지도 학습 구현

K-평균 군집화는 데이터를 K개의 군집으로 나누는 비지도 학습 알고리즘입니다. 이 알고리즘은 각 군집의 중심을 기준으로 데이터 포인트들을 가장 가까운 군집에 할당하는 방식으로 작동합니다. 이번 포스트에서는 scikit-learn 라이브러리를 사용하여 K-means를 구현하고, 아이리스(Iris) 데이터셋에 적용해보겠습니다.

 

1. 필요한 라이브러리 임포트

먼저 필요한 라이브러리들을 임포트합니다.

 

 

2. 데이터 준비

아이리스 데이터셋을 로드하고 특성(X)과 타겟(y)으로 분리합니다.

 

 

3-1. 데이터 전처리

인코딩 (Encoding)

  • 필요 여부: 불필요
  • 이유: 아이리스 데이터셋의 특성은 이미 숫자형 데이터입니다. 타겟 변수는 이미 숫자로 인코딩되어 있습니다.

 

피처 스케일링 (Feature Scaling)

  • 필요 여부: 필요
  • 이유: K-means는 거리 기반 알고리즘이므로 특성들의 스케일이 다르면 군집화에 영향을 줄 수 있습니다.

 

 

4. 모델링 및 학습

K-means 모델을 초기화하고 학습시킵니다. 여기서는 군집의 수를 3으로 설정합니다.

 

 

 

5. 군집 할당 및 평가

각 데이터 포인트에 군집을 할당하고 결과를 시각화합니다.

 

6. 최적의 군집 수 찾기 (엘보우 방법)


최적의 군집 수를 찾기 위해 엘보우 방법을 사용합니다.

엘보우 메소드(예시)

 

결론

K-means 군집화는 데이터를 자연스럽게 그룹화하는 데 유용한 비지도 학습 알고리즘입니다. 이 예제에서는 아이리스 데이터셋을 3개의 군집으로 나누었습니다.

K-means의 장단점

장점:

  • 구현이 간단하고 이해하기 쉽습니다.
  • 대규모 데이터셋에도 비교적 빠르게 적용할 수 있습니다.
  • 군집의 특성을 쉽게 해석할 수 있습니다.

단점:

  • 초기 중심점 선택에 따라 결과가 달라질 수 있습니다.
  • 군집의 수(K)를 사전에 지정해야 합니다.
  • 구형이 아닌 복잡한 형태의 군집을 잘 찾지 못할 수 있습니다.
  • 이상치에 민감할 수 있습니다.

K-means는 데이터 세그먼테이션, 고객 분류, 이미지 압축 등 다양한 분야에서 활용됩니다. 그러나 최적의 군집 수를 결정하는 것이 중요하며, 엘보우 방법이나 실루엣 분석 등을 통해 이를 결정할 수 있습니다.