K-means Clustering(K-평균 군집화)은 비지도 학습의 클러스터링 모델 중 하나이다. 우선 클러스터란 비슷한 특성을 가진 데이터들끼리 묶는 것을 의미한다. 비슷한 특성은 가까운 위치로 해석할 수 있다.
위의 그림을 보면 거리가 가까운 데이터들끼리 같은 색으로 칠해져있어서 Cluster(군집)을 이루고 있다. Clustering은 이처럼 데이터들이 주어졌을 때 이들을 군집으로 grouping 해주는 것을 의미한다.
이제 K-means Clustering이라는 용어를 하나하나 뜯어보자. Centroid란 각 군집들의 중심이다.
K-means Clustering에서 k는 클러스터의 개수를 의미한다. 위의 사진에서 k값은 3인 것이다. means는 centroid를 뜻한다. 합쳐보면, K-means Clustering은 k개의 centroid를 이용해서 k개의 cluster를 만들어주는 모델이다. 비슷한 특성을 가지는 데이터들끼리 묶어서 패턴을 찾는다고 볼 수 있다.
https://www.youtube.com/watch?v=9TR54u08IGU
위 영상에서 잘 설명하였다. 10분이 좀 넘는 영상이지만 참고 보면 참고할만하다.
데이터의 수가 n개일 때
으로 대략적인 k값을 구할 수 있다.
클러스터의 수(k)를 계속 증가시키며 정확도가 향상되지 않을 때 멈추는 방법이다.
KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
n_clusters=2, n_init=10, n_jobs=None, precompute_distances='auto',
random_state=None, tol=0.0001, verbose=0)
from sklearn.cluster import KMeans
kmean = KMeans(n_clusters=2)
kmean.fit(X_train, y_train)
y_kmean_predict = kmean.predict(X_test)
print("K-means Clustering Accuracy: {0:.4f}".format(accuracy_score(y_kmean_predict, y_test)))
위의 코드를 사용했을 때 iris에서 다른 모델을 사용했을 때보다 낮은 정확도인 0.73을 보였다...