클러스터링 알고리즘-K- 평균 알고리즘
K- 평균 알고리즘 소개
K- 평균 클러스터링 알고리즘은 중심을 계산하고 최적의 중심을 찾을 때까지 반복합니다. 클러스터 수를 이미 알고 있다고 가정합니다. 그것은 또한 불린다flat clustering연산. 알고리즘에 의해 데이터에서 식별 된 클러스터의 수는 K- 평균에서 'K'로 표시됩니다.
이 알고리즘에서 데이터 포인트는 데이터 포인트와 중심 간의 거리 제곱의 합이 최소가되는 방식으로 클러스터에 할당됩니다. 클러스터 내의 변동이 적 으면 동일한 클러스터 내에서 더 유사한 데이터 포인트가 생성된다는 점을 이해해야합니다.
K- 평균 알고리즘 작동
다음 단계를 통해 K-Means 클러스터링 알고리즘의 작동을 이해할 수 있습니다.
Step 1 − 먼저,이 알고리즘에 의해 생성되어야하는 클러스터 수 K를 지정해야합니다.
Step 2− 다음으로 K 개의 데이터 포인트를 무작위로 선택하고 각 데이터 포인트를 클러스터에 할당합니다. 간단히 말해서 데이터 포인트 수를 기준으로 데이터를 분류합니다.
Step 3 − 이제 클러스터 중심을 계산합니다.
Step 4 − 다음으로 더 이상 변경되지 않는 클러스터에 데이터 포인트를 할당하는 최적의 중심을 찾을 때까지 다음을 계속 반복합니다.
4.1 − 먼저, 데이터 포인트와 중심 간의 거리 제곱의 합이 계산됩니다.
4.2 − 이제 각 데이터 포인트를 다른 클러스터 (중심)보다 가까운 클러스터에 할당해야합니다.
4.3 − 마지막으로 해당 클러스터의 모든 데이터 포인트의 평균을 취하여 클러스터의 중심을 계산합니다.
K- 평균은 다음과 같습니다. Expectation-Maximization문제를 해결하기위한 접근 방식. 예상 단계는 가장 가까운 클러스터에 데이터 포인트를 할당하는 데 사용되고 최대화 단계는 각 클러스터의 중심을 계산하는 데 사용됩니다.
K- 평균 알고리즘으로 작업하는 동안 다음 사항을 처리해야합니다.
K-Means를 포함한 클러스터링 알고리즘으로 작업하는 동안 이러한 알고리즘은 거리 기반 측정을 사용하여 데이터 포인트 간의 유사성을 결정하므로 데이터를 표준화하는 것이 좋습니다.
K- 평균의 반복적 인 특성과 중심의 무작위 초기화로 인해 K- 평균은 로컬 최적 값에 고정 될 수 있으며 전역 최적 값으로 수렴되지 않을 수 있습니다. 그렇기 때문에 중심의 다른 초기화를 사용하는 것이 좋습니다.
Python으로 구현
K-Means 클러스터링 알고리즘을 구현하는 다음 두 가지 예는 더 나은 이해에 도움이 될 것입니다.
예 1
k- 평균이 어떻게 작동하는지 이해하는 간단한 예입니다. 이 예에서는 먼저 4 개의 서로 다른 Blob을 포함하는 2D 데이터 세트를 생성하고 그 후에 k- 평균 알고리즘을 적용하여 결과를 확인합니다.
먼저 필요한 패키지를 가져 오는 것으로 시작합니다.
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
다음 코드는 4 개의 blob을 포함하는 2D를 생성합니다.
from sklearn.datasets.samples_generator import make_blobs
X, y_true = make_blobs(n_samples=400, centers=4, cluster_std=0.60, random_state=0)
다음으로, 다음 코드는 데이터 세트를 시각화하는 데 도움이됩니다.
plt.scatter(X[:, 0], X[:, 1], s=20);
plt.show()
다음으로, 클러스터 수를 제공하는 것과 함께 KMeans의 객체를 만들고 모델을 훈련시키고 다음과 같이 예측을 수행합니다.
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)
이제 다음 코드의 도움으로 k- 평균 Python 추정기가 선택한 클러스터의 중심을 플로팅하고 시각화 할 수 있습니다.
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=20, cmap='summer')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='blue', s=100, alpha=0.9);
plt.show()
예 2
간단한 숫자 데이터 세트에 K- 평균 클러스터링을 적용 할 다른 예로 이동하겠습니다. K-means는 원래 레이블 정보를 사용하지 않고 유사한 숫자를 식별하려고합니다.
먼저 필요한 패키지를 가져 오는 것으로 시작합니다.
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
다음으로 sklearn에서 숫자 데이터 세트를로드하고 객체를 만듭니다. 다음과 같이이 데이터 세트에서 행과 열의 수를 찾을 수도 있습니다.
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape
산출
(1797, 64)
위의 출력은이 데이터 세트에 64 개의 기능이있는 1797 개의 샘플이 있음을 보여줍니다.
위의 예제 1에서했던 것처럼 클러스터링을 수행 할 수 있습니다.
kmeans = KMeans(n_clusters=10, random_state=0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape
산출
(10, 64)
위의 출력은 K- 평균이 64 개의 기능을 가진 10 개의 클러스터를 생성했음을 보여줍니다.
fig, ax = plt.subplots(2, 5, figsize=(8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
axi.set(xticks=[], yticks=[])
axi.imshow(center, interpolation='nearest', cmap=plt.cm.binary)
산출
출력으로 k- 평균에 의해 학습 된 클러스터 중심을 보여주는 다음 이미지가 표시됩니다.
다음 코드 줄은 학습 된 클러스터 레이블을 발견 된 실제 레이블과 일치시킵니다.
from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
mask = (clusters == i)
labels[mask] = mode(digits.target[mask])[0]
다음으로 정확도를 다음과 같이 확인할 수 있습니다.
from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)
산출
0.7935447968836951
위의 출력은 정확도가 약 80 %임을 보여줍니다.
장점과 단점
장점
다음은 K- 평균 클러스터링 알고리즘의 몇 가지 장점입니다.
이해하고 구현하는 것은 매우 쉽습니다.
많은 수의 변수가있는 경우 K- 평균이 계층 적 클러스터링보다 빠릅니다.
중심을 재 계산하면 인스턴스가 클러스터를 변경할 수 있습니다.
계층 적 클러스터링에 비해 K- 평균으로 더 엄격한 클러스터가 형성됩니다.
단점
다음은 K-Means 클러스터링 알고리즘의 몇 가지 단점입니다.
클러스터의 수, 즉 k의 값을 예측하는 것은 약간 어렵습니다.
출력은 클러스터 수 (k 값)와 같은 초기 입력의 영향을 많이받습니다.
데이터 순서는 최종 출력에 큰 영향을 미칩니다.
크기 조정에 매우 민감합니다. 정규화 또는 표준화를 통해 데이터 크기를 다시 조정하면 출력이 완전히 변경됩니다.
클러스터의 기하학적 모양이 복잡한 경우 클러스터링 작업을 수행하는 것이 좋지 않습니다.
K- 평균 클러스터링 알고리즘의 응용
클러스터 분석의 주요 목표는 다음과 같습니다.
우리가 작업하는 데이터에서 의미있는 직관을 얻기 위해.
클러스터링 후 서로 다른 하위 그룹에 대해 서로 다른 모델이 구축 될 위치를 예측합니다.
위에서 언급 한 목표를 달성하기 위해 K- 평균 클러스터링이 충분히 잘 수행되고 있습니다. 다음 응용 프로그램에서 사용할 수 있습니다-
시장 세분화
문서 클러스터링
이미지 분할
이미지 압축
고객 세분화
동적 데이터에 대한 추세 분석