이전까지는 모델에 정답이 포함된 데이터를 넣어줬다면 여기부터는 정답이 없는 데이터를 학습시키는 비지도 학습을 한다.
약점: 2, 3번 과정에서 계산량이 많아 속도가 느림
개선방법
1. 차원축소를 한다.
2. 데이터를 선별해서 개수를 줄인다.
3. 대체 모델로 t-SNE(gpu가속을 사용함), GMM 등이 있다.(https://3months.tistory.com/154)
from sklearn import cluster
import numpy as np
X = np.array([[1, 4], [5, 1], [6, 4], [5, 3], [5, 1], [7, 3]])
kmeans = cluster.KMeans(n_clusters=2, random_state=0).fit(X)
print(kmeans.labels_)
kmeans.predict([[0, 1], [14, 5]])
n_clusters
는 K값, random_state
는 최초로 중심점을 찍는 랜덤시드이다.
kmeans.clusters_centers_
를 보면 중심점을 뽑아낼 수 있다.
kmeans.labels_
는 각 데이터들의 클러스터 번호를 출력한다.
근데 중심점을 처음에 잘못찍으면 군집화자체가 이상해지는 경우가 있는데
cluster.KMeans()
안에 init='k-means++'
라는 속성이 숨어있어서 그렇게 안된다. init='random'
이라고 넣어보면 한번 확인해볼 수 있다.
근데 데이터를 분류할 때 k를 어떻게 설정해야할까?