【기계 학습】K-means를 공부해 본다
K-means 클러스터링이란?
K-means는 클러스터링에 사용되는 교사 없는 학습 방법입니다.
K개의 클러스터로 분류하고 평균값을 중심으로 하기 때문에 K-means라고 합니다.
K-Means 알고리즘
1) 임의로 1~k개의 데이터 포인트를 클러스터의 무게 중심 $\mu_i$로 선택한다.
2) 나머지 모든 데이터 포인트를 1에서 선택한 가장 가까운 클러스터에 할당합니다.
3) 각 클러스터에서 평균값을 계산하고 $\mu_i$를 업데이트합니다.
4) 2~3을 무게 중심의 변경이 없어질 때까지 반복한다.
K의 결정방법(Elbow Method)
K-means에서는 클러스터 수 K를 지정해야합니다. K가 너무 많으면 과학을 배우거나 반대로 너무 적으면 본래 나누어야 할 데이터가 같은 클러스터에 들어 버릴 가능성도 있습니다. 그래서 최상의 K를 찾는 방법은 Elbow method입니다.
Elbow method 에서는 y축에 손실을 취해, x축에 클러스터수 K 를 취하는 아래와 같은 그래프를 그립니다. 이때 팔꿈치와 같이 구부러진 부분에 걸리는 K를 최적의 클러스터 수로 하므로, Elbow Method라고 불립니다.
scikit learn 에 K-Means
파라메터
매개변수
개요
값
기본
n_clusters
클러스터 수
int
8
init
초기 무게 중심 설정
'k-means', 'random', 데이터 포인트
'K-means++'(빨리 수렴하도록 자동으로 선택해 준다)
n_init
몇 번 무게 중심을 바꾸는가?
int
10
max_iter
반복 횟수
int
10
tol
수렴 허용치
float
1e-4
precompute_distance
거리를 행렬 또는 개별적으로 계산할지
'auto', bool
'자동'
random_state
무게 중심의 초기 값의 랜덤 방법
int, RandomState instance
None
n_jobs
각 런타임에 동시 처리 수
int
None
파이썬 실행 예
Elbow Method
from sklearn import datasets
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.cluster import KMeans
iris = datasets.load_iris()
X = iris.data[:, :2]
y = iris.target
from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters = i, init = 'k-means++', max_iter = 300, n_init = 10, random_state = 0)
kmeans.fit(X)
wcss.append(kmeans.inertia_)
plt.plot(range(1, 11), wcss)
plt.title('The elbow method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()
정확히 3정도가 팔꿈치에 해당하기 때문에 K=3으로 학습시킨다.
Predict
kmeans = KMeans(n_clusters = 3, init = 'k-means++', max_iter = 300, n_init = 10, random_state = 0)
y_kmeans = kmeans.fit_predict(X)
plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 100, c = 'red', label = 'Iris-setosa')
plt.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s = 100, c = 'blue', label = 'Iris-versicolour')
plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s = 100, c = 'green', label = 'Iris-virginica')
#Plotting the centroids of the clusters
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:,1], s = 100, c = 'yellow', label = 'Centroids')
plt.legend()
K-means의 장점과 단점
장점
1) 임의로 1~k개의 데이터 포인트를 클러스터의 무게 중심 $\mu_i$로 선택한다.
2) 나머지 모든 데이터 포인트를 1에서 선택한 가장 가까운 클러스터에 할당합니다.
3) 각 클러스터에서 평균값을 계산하고 $\mu_i$를 업데이트합니다.
4) 2~3을 무게 중심의 변경이 없어질 때까지 반복한다.
K의 결정방법(Elbow Method)
K-means에서는 클러스터 수 K를 지정해야합니다. K가 너무 많으면 과학을 배우거나 반대로 너무 적으면 본래 나누어야 할 데이터가 같은 클러스터에 들어 버릴 가능성도 있습니다. 그래서 최상의 K를 찾는 방법은 Elbow method입니다.
Elbow method 에서는 y축에 손실을 취해, x축에 클러스터수 K 를 취하는 아래와 같은 그래프를 그립니다. 이때 팔꿈치와 같이 구부러진 부분에 걸리는 K를 최적의 클러스터 수로 하므로, Elbow Method라고 불립니다.
scikit learn 에 K-Means
파라메터
매개변수
개요
값
기본
n_clusters
클러스터 수
int
8
init
초기 무게 중심 설정
'k-means', 'random', 데이터 포인트
'K-means++'(빨리 수렴하도록 자동으로 선택해 준다)
n_init
몇 번 무게 중심을 바꾸는가?
int
10
max_iter
반복 횟수
int
10
tol
수렴 허용치
float
1e-4
precompute_distance
거리를 행렬 또는 개별적으로 계산할지
'auto', bool
'자동'
random_state
무게 중심의 초기 값의 랜덤 방법
int, RandomState instance
None
n_jobs
각 런타임에 동시 처리 수
int
None
파이썬 실행 예
Elbow Method
from sklearn import datasets
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.cluster import KMeans
iris = datasets.load_iris()
X = iris.data[:, :2]
y = iris.target
from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters = i, init = 'k-means++', max_iter = 300, n_init = 10, random_state = 0)
kmeans.fit(X)
wcss.append(kmeans.inertia_)
plt.plot(range(1, 11), wcss)
plt.title('The elbow method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()
정확히 3정도가 팔꿈치에 해당하기 때문에 K=3으로 학습시킨다.
Predict
kmeans = KMeans(n_clusters = 3, init = 'k-means++', max_iter = 300, n_init = 10, random_state = 0)
y_kmeans = kmeans.fit_predict(X)
plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 100, c = 'red', label = 'Iris-setosa')
plt.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s = 100, c = 'blue', label = 'Iris-versicolour')
plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s = 100, c = 'green', label = 'Iris-virginica')
#Plotting the centroids of the clusters
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:,1], s = 100, c = 'yellow', label = 'Centroids')
plt.legend()
K-means의 장점과 단점
장점
파라메터
매개변수
개요
값
기본
n_clusters
클러스터 수
int
8
init
초기 무게 중심 설정
'k-means', 'random', 데이터 포인트
'K-means++'(빨리 수렴하도록 자동으로 선택해 준다)
n_init
몇 번 무게 중심을 바꾸는가?
int
10
max_iter
반복 횟수
int
10
tol
수렴 허용치
float
1e-4
precompute_distance
거리를 행렬 또는 개별적으로 계산할지
'auto', bool
'자동'
random_state
무게 중심의 초기 값의 랜덤 방법
int, RandomState instance
None
n_jobs
각 런타임에 동시 처리 수
int
None
파이썬 실행 예
Elbow Method
from sklearn import datasets
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.cluster import KMeans
iris = datasets.load_iris()
X = iris.data[:, :2]
y = iris.target
from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters = i, init = 'k-means++', max_iter = 300, n_init = 10, random_state = 0)
kmeans.fit(X)
wcss.append(kmeans.inertia_)
plt.plot(range(1, 11), wcss)
plt.title('The elbow method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()
정확히 3정도가 팔꿈치에 해당하기 때문에 K=3으로 학습시킨다.
Predict
kmeans = KMeans(n_clusters = 3, init = 'k-means++', max_iter = 300, n_init = 10, random_state = 0)
y_kmeans = kmeans.fit_predict(X)
plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 100, c = 'red', label = 'Iris-setosa')
plt.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s = 100, c = 'blue', label = 'Iris-versicolour')
plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s = 100, c = 'green', label = 'Iris-virginica')
#Plotting the centroids of the clusters
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:,1], s = 100, c = 'yellow', label = 'Centroids')
plt.legend()
K-means의 장점과 단점
장점
단점
Reference
이 문제에 관하여(【기계 학습】K-means를 공부해 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shuva/items/bcf700bd32ae2bbb63c7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)