인공지능/Machine Learning

[Machine Learning] K- 평균 군집 K-Means Clustering

건휘맨 2024. 4. 16. 11:15

Unsupervised Learning 은 y 값이 없고 x 만 필요

 

kmeans() : 비슷한 특징을 갖는 것들끼리 n개의 그룹을 만들어 분류

from sklearn.cluster import KMeans

# 변수에 저장하여 사용
>>> kmeans = KMeans(n_clusters= 3, random_state=10)
# n_clusters = 그룹의 갯수 지정
# n_clusters 의 default 값은 8

>>> y_pred = kmeans.fit_predict(X) # 학습 x, 바로 예측

# 그룹 1인 그룹 사람들에게 푸시를 보낼 것이다. 이 그룹의 데이터를 가져와라.

>>> df.loc[df['Group'] == 1, ]

 

WCSS = 적절한 그룹의 개수 기준 확립

>>> wcss = []
>>> for i in range(1,10+1):
        kmeans = KMeans(n_clusters=i, random_state=10)
        kmeans.fit(X)
        wcss.append(kmeans.inertia_)

>>> wcss
[308862.06,
 212889.442455243,
 143391.59236035674,
 104414.67534220166,
 75399.61541401484,
 58348.64136331505,
 51167.19736842105,
 45324.85021951262,
 40811.455768566826,
 37141.48254409704]

 

Cluster 간의 거리의 합을 나타내는 inertia가 급격히 떨어지는 구간이 생기는데
이 지점의 K 값을 군집의 개수로 사용
inertia_속성으로 확인할 수 있다.

 

# hyper parameters => 사람이 결정해 줘야하는 파라미터 => 5

>>> kmeans = KMeans(n_clusters=5, random_state=1)

>>> y_pred = kmeans.fit_predict(X)

>>> y_pred
array([3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
       3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
       3, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
       4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
       4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
       4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 0, 2, 4, 2, 0, 2, 0, 2,
       0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 4, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2,
       0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2,
       0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2,
       0, 2])