본문 바로가기

ML with SckitLearn

K-Means 알고리즘의 원리와 이해 한판에 배워보기

반응형

K-Means 클러스터링은 머신러닝에서는 가장 대중적인 비지도학습(Unsupervised) 클러스터링 방법 중 하나입니다.

 

각 데이타그룹의 중심점에 대표되는 K숫자를 정의하는 것으로 각 클러스터의 중심점을 대표하는 중심점을 찾는 방법입니다. 이 중심점이 바로 Centroid입니다. Python에서 K-Means가 작동하는 방법에 대해 알아보겠습니다.

 

실전에서도 바로 사용이 가능합니다.

 

1. K-Means 알고리즘 작동 방식

데이터를 처리하기 위해 K-Means 알고리즘은 모든 클러스터의 데이타를 무작위로 선택하여 중심점이 되는 데이타를 구한 후 반복 계산을 통해 중심 위치를 최적화하는 방식을 취합니다.

 

이 중심점이 안정화되었다고 하면 더이상 클러스터링을 할 수 없다고 판단하고 다른 중심점을 임의적으로 선정해 이 순서를 무한 반복해나갔니다.

 

2. K-Means 알고리즘 예제

Step1. Import LIbrary

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
  • 데이타를 읽고 쓰기 위한 Pandas

  • 효율적인 계산을 수행하기 위해 Numpy

  • Data를 비쥬얼로 표현하기 위한 matplotlib

 

Step2. Random Data 생성

X= -2*np.random.rand(100,2)
X1 = 1+2*np.random.rand(50,2)
X[50:100, :] = X1
plt.scatter(X[:, 0], X[:, 1], s=50, c='b')
plt.show()

random으로 100개와 50개의 데이타 그룹을 생성하고 2개 그룹으로 분류합니다.  Two-Dimentioal Space를 이용하여 데이타가 분포되어 있는 내용을 확인합니다.

 

Step3. Scikit-Learn으로 K-Means를 선언하고 데이타 연결

from sklearn.cluster import KMeans
# Kmean = KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300, n_clusters=2, n_init=10, n_jobs=1, precompute_distances='auto',random_state=None, tol=0.0001, verbose=0)
Kmean = KMeans(n_clusters=2)
Kmean.fit(X)

 

Data를 처리하기 위해 Scikit-Learn의 Kmeans Library를 사용합니다. 여러가지 Option을 사용할 수 있으나 여기서는 단순하게 c_clusters만 사용하여 2개의 Cluster로 나누겠습니다.

 

Step4. 중심점(centroid)과 그래프 표시

print(Kmean.cluster_centers_)
print(Kmean.cluster_centers_[0])
plt.scatter(X[ : , 0], X[ : , 1], s =50, c='b')
plt.scatter(Kmean.cluster_centers_[0][0], Kmean.cluster_centers_[0][1], s=200, c='g', marker='s')
plt.scatter(Kmean.cluster_centers_[1][0], Kmean.cluster_centers_[1][1], s=200, c='r', marker='s')
plt.show()

2개 그룹의 중심점은 Kmean.cluster_centers_로 알 수 있으며 Arrary형식으로 되어 있어 X, Y좌표를 넣어주면 됩니다.

 

Step5. 알고리즘의 테스트

print(Kmean.labels_)

각 데이타가 어느 그룹에 Cluster가 되어 있는지 보기 위해 Kmean.labels_를 사용합니다.  

 

도움이 되셨나요. 감사합니다.

반응형