K-Means Clustering
K-Means Clustering은 비지도 학습 알고리즘으로, 데이터를 그룹화(클러스터링)하는데 사용된다.
K-Means Clustering 순서
- 데이터 준비: 우리는 각 데이터 포인트의 위치를 나타내는 좌표를 갖고 있다..
- K 설정: K-Means Clustering을 시작하기 전에 클러스터의 수 K를 정해야 한다. 여기서는 우리가 2개의 그룹으로 나누고 싶다고 가정한다.
- 중심 초기화: 무작위로 두 개의 점(중심)을 선택하여 각각의 그룹의 중심점으로 설정한다.
- 할당 단계: 각 데이터 포인트를 가장 가까운 중심에 할당한다. 이를 위해 일반적으로 유클리드 거리 등의 거리 측정 방법을 사용한다.
- 갱신 단계: 각 그룹의 중심을 해당 그룹에 속한 데이터 포인트들의 평균으로 업데이트한다.
- 반복: 할당 및 갱신 단계를 반복하여 중심이 더 이상 변하지 않을 때까지 반복한다.
- 수렴: 중심이 더 이상 변하지 않으면 알고리즘이 수렴되었다고 간주하고 종료한다.
k 개의 그룹을 만든다. 즉, 비슷한 특징을 갖는 것들끼리 묶는것
WCSS: 클러스터 내 제곱합을 나타낸다. K-Means Clustering에서는 클러스터의 중심과 각 데이터 포인트 사이의 거리를 측정하여 이 값을 최소화하는 방향으로 클러스터를 형성한다.
Elbow Method
- 여러 개의 클러스터 수(K)에 대해 K-Means 알고리즘을 실행하고, 각각의 클러스터링 결과에 대한 WCSS 값을 계산한다.
- 클러스터 수(K)를 x축으로, 해당 클러스터링 결과의 WCSS 값을 y축으로 하여 그래프를 그린다.
- 그래프를 통해 WCSS 값이 감소하다가 어느 시점부터 급격하게 감소하는 지점이 나타난다. 이 지점이 "엘보우(elbow)" 지점이라고 불리며, 이 지점에서의 클러스터 수를 선택한다.
이제 코드로 작성해보자
1.na가 있는지 확인
df.isna().sum() 했을때 모두 0이 나와 na 없음
2.X데이터 분리
Unsupervised이므로 X데이터만 분리한다.
X = df.iloc[ : , 1: ]
3.Label Encoding
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
X['Genre'] = encoder.fit_transform(X['Genre'])
# 피쳐스케일링을 하지 않아도 된다.
4.KMeans 사용하기
from sklearn.cluster import KMeans
wcss = []
for i in range(1,10+1):
kmeans = KMeans(n_clusters = i,random_state = 10)
#KMeans 객체를 생성
kmeans.fit(X)
# KMeans 알고리즘을 사용하여 데이터 X를 클러스터링
wcss.append(kmeans.inertia_)
# 클러스터링 결과의 WCSS 값을 wcss 리스트에 추
5.엘보우 메소드 확인하기
import matplotlib.pyplot as plt
plt.plot(wcss)
plt.show()
6.Group화 하기
엘보우 메소드 확인하고 클러스터를 5로 정하였다.
kmeans에 X를 학습시키고 그룹화된 컬럼을 Group에 저장했다.
kmeans = KMeans(n_clusters=5, random_state=1)
y_pred = kmeans.fit_predict(X)
df['Group'] = y_pred
'Machine Learning' 카테고리의 다른 글
[Machine Learning]머신러닝Unsupervised의Hierarchical Clustering (0) | 2024.04.16 |
---|---|
[Machine Learning]머신러닝의 Decision Tree 알고리즘 (0) | 2024.04.16 |
[Machine Learning]머신러닝의 Support Vector Machine(SVM)알고리즘 (0) | 2024.04.15 |
[Machine Learning]머신러닝의 KNN 알고리즘(K-Nearest Neighbor) (0) | 2024.04.15 |
[Machine Learning]머신러닝의Confusion Matrix 및accuracy_score 사용 (0) | 2024.04.15 |