비지도 학습(Unsupervised Learning)은 머신러닝의 한 분야로, 레이블이 지정되지 않은 데이터에서 패턴이나 구조를 찾아내는 방법입니다. 지도 학습과는 달리, 비지도 학습에서는 알고리즘에 '정답'을 제공하지 않습니다. 대신, 알고리즘이 스스로 데이터의 특징과 관계를 파악하여 의미 있는 정보를 추출합니다.
### 주요 특징:
- 레이블이 없는 데이터 사용
- 데이터의 숨겨진 구조 발견
- 데이터 압축 및 차원 축소에 활용
- 이상치 탐지에 유용
1. **군집화(Clustering)**: 비슷한 특성을 가진 데이터를 그룹으로 묶음
- 예: 고객 세그먼테이션, 문서 분류
2. **차원 축소(Dimensionality Reduction)**: 데이터의 중요 특성을 유지하면서 차원을 줄임
- 예: 주성분 분석(PCA), t-SNE
3. **이상치 탐지(Anomaly Detection)**: 정상 패턴에서 벗어난 데이터 식별
- 예: 부정 거래 탐지, 네트워크 침입 감지
4. **연관 규칙 학습(Association Rule Learning)**: 데이터 항목 간의 관계 발견
- 예: 장바구니 분석, 추천 시스템
1. **데이터 수집 및 전처리**: 관련 데이터를 수집하고 정제
2. **알고리즘 선택**: 문제와 데이터에 적합한 비지도 학습 알고리즘 선택
3. **모델 학습**: 선택한 알고리즘을 데이터에 적용
4. **결과 해석**: 발견된 패턴이나 구조의 의미 분석
5. **모델 평가 및 튜닝**: 적절한 평가 지표를 사용해 모델 성능 평가 및 개선
K-평균(K-means) 알고리즘은 가장 널리 사용되는 군집화 알고리즘 중 하나입니다. 이 알고리즘은 데이터를 K개의 군집으로 나누는 것을 목표로 합니다.
### 알고리즘 단계:
1. K개의 초기 중심점(centroid) 선택
2. 각 데이터 포인트를 가장 가까운 중심점에 할당
3. 각 군집의 새로운 중심점 계산
4. 중심점이 변하지 않을 때까지 2-3단계 반복
### 장단점:
- 장점: 간단하고 빠름, 대용량 데이터에 적합
- 단점: 초기 중심점에 민감, 비선형 데이터에 취약
이제 8개의 영화에 대한 사용자 평점 데이터를 이용해 K-평균 군집화를 실습해보겠습니다.
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 영화 평점 데이터 (예시)
movies = ['영화A', '영화B', '영화C', '영화D', '영화E', '영화F', '영화G', '영화H']
ratings = np.array([
[4, 3, 5, 2, 1, 4, 3, 5], # 사용자 1
[5, 4, 2, 1, 3, 5, 4, 2], # 사용자 2
[3, 2, 4, 5, 1, 3, 2, 4], # 사용자 3
[2, 1, 3, 4, 5, 2, 1, 3], # 사용자 4
[1, 5, 2, 3, 4, 1, 5, 2] # 사용자 5
])
# K-평균 군집화 수행
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(ratings.T)
# 결과 시각화
plt.figure(figsize=(10, 6))
for i, movie in enumerate(movies):
plt.scatter(ratings[:, i].mean(), ratings[:, i].std(), c=[clusters[i]], cmap='viridis', s=100)
plt.annotate(movie, (ratings[:, i].mean(), ratings[:, i].std()), xytext=(5, 5), textcoords='offset points')
plt.xlabel('평균 평점')
plt.ylabel('평점 표준편차')
plt.title('영화 평점 군집화 결과')
plt.colorbar(ticks=range(3), label='군집')
plt.tight_layout()
plt.show()
# 군집화 결과 출력
for cluster in range(3):
print(f"군집 {cluster}: {', '.join([movies[i] for i in range(len(movies)) if clusters[i] == cluster])}")
```
이 코드는 각 영화의 평균 평점과 평점의 표준편차를 기준으로 영화들을 3개의 군집으로 나눕니다. 결과 그래프를 통해 비슷한 특성을 가진 영화들이 어떻게 그룹화되는지 시각적으로 확인할 수 있습니다.
## 결론
비지도 학습, 특히 K-평균 알고리즘을 활용한 군집화는 데이터에서 숨겨진 패턴을 발견하는 강력한 도구입니다. 이 실습을 통해 영화 평점 데이터를 분석하여 비슷한 특성을 가진 영화들을 그룹화하는 방법을 배웠습니다. 이러한 기법은 추천 시스템, 시장 세분화 등 다양한 분야에서 활용될 수 있습니다.