K-Means 클러스터링은 기계 학습이나 데이터 과학의 클러스터링 문제를 해결하는 데 사용되는 비지도 학습 알고리즘입니다. 이 주제에서는 K-평균 클러스터링 알고리즘이 무엇인지, 알고리즘이 어떻게 작동하는지, 그리고 k-평균 클러스터링의 Python 구현에 대해 알아봅니다.
K-평균 알고리즘이란 무엇입니까?
K-평균 클러스터링은 비지도 학습 알고리즘 , 라벨이 지정되지 않은 데이터 세트를 다른 클러스터로 그룹화합니다. 여기서 K는 프로세스에서 생성되어야 하는 사전 정의된 클러스터의 수를 정의합니다. K=2이면 클러스터가 2개가 되고, K=3이면 클러스터가 3개가 되는 식입니다.
각 데이터세트가 유사한 속성을 가진 하나의 그룹에만 속하도록 레이블이 지정되지 않은 데이터세트를 k개의 서로 다른 클러스터로 나누는 반복 알고리즘입니다.
이를 통해 데이터를 여러 그룹으로 클러스터링할 수 있으며, 교육을 받을 필요 없이 레이블이 지정되지 않은 데이터세트에서 그룹 범주를 자체적으로 검색할 수 있는 편리한 방법이 있습니다.
이는 각 클러스터가 중심과 연결되는 중심 기반 알고리즘입니다. 이 알고리즘의 주요 목표는 데이터 포인트와 해당 클러스터 사이의 거리의 합을 최소화하는 것입니다.
알고리즘은 레이블이 지정되지 않은 데이터 세트를 입력으로 사용하고 데이터 세트를 k개의 클러스터로 나누고 최상의 클러스터를 찾지 못할 때까지 프로세스를 반복합니다. 이 알고리즘에서는 k 값이 미리 결정되어야 합니다.
k-평균 클러스터링 알고리즘은 주로 두 가지 작업을 수행합니다.
- 반복 프로세스를 통해 K개의 중심점 또는 중심에 대한 최상의 값을 결정합니다.
- 각 데이터 포인트를 가장 가까운 k-중심에 할당합니다. 특정 k-중심에 가까운 데이터 포인트는 클러스터를 생성합니다.
따라서 각 클러스터에는 몇 가지 공통점이 있는 데이터 포인트가 있으며 다른 클러스터와 떨어져 있습니다.
아래 다이어그램은 K-평균 클러스터링 알고리즘의 작동을 설명합니다.
K-평균 알고리즘은 어떻게 작동하나요?
K-Means 알고리즘의 작동은 아래 단계로 설명됩니다.
1 단계: 클러스터 수를 결정하려면 숫자 K를 선택합니다.
2 단계: 무작위 K 점 또는 중심을 선택합니다. (입력 데이터 세트와 다를 수 있습니다).
3단계: 각 데이터 포인트를 가장 가까운 중심에 할당하면 사전 정의된 K 클러스터가 형성됩니다.
4단계: 분산을 계산하고 각 클러스터의 새 중심을 배치합니다.
5단계: 세 번째 단계를 반복합니다. 이는 각 데이터 포인트를 각 클러스터의 가장 가까운 새 중심에 다시 할당하는 것을 의미합니다.
6단계: 재할당이 발생하면 4단계로 이동하고 그렇지 않으면 FINISH로 이동합니다.
7단계 : 모델이 준비되었습니다.
시각적 플롯을 고려하여 위 단계를 이해해 보겠습니다.
두 개의 변수 M1과 M2가 있다고 가정합니다. 이 두 변수의 x-y 축 산점도는 다음과 같습니다.
- 데이터 세트를 식별하고 이를 다른 클러스터에 배치하기 위해 클러스터 수 k개, 즉 K=2를 사용하겠습니다. 이는 여기서 이러한 데이터 세트를 두 개의 서로 다른 클러스터로 그룹화하려고 한다는 의미입니다.
- 클러스터를 형성하려면 임의의 k개 점이나 중심을 선택해야 합니다. 이러한 포인트는 데이터 세트의 포인트이거나 다른 포인트일 수 있습니다. 따라서 여기서는 아래 두 포인트를 k 포인트로 선택합니다. 이는 데이터 세트의 일부가 아닙니다. 아래 이미지를 고려하십시오.
- 이제 산점도의 각 데이터 포인트를 가장 가까운 K 포인트 또는 중심에 할당하겠습니다. 우리는 두 점 사이의 거리를 계산하기 위해 연구한 몇 가지 수학을 적용하여 이를 계산할 것입니다. 그래서 우리는 두 중심 사이에 중앙값을 그릴 것입니다. 아래 이미지를 고려하십시오.
위 이미지에서 선의 왼쪽 지점은 K1 또는 파란색 중심에 가깝고 선 오른쪽의 지점은 노란색 중심에 가깝다는 것이 분명합니다. 명확한 시각화를 위해 파란색과 노란색으로 색상을 지정하겠습니다.
- 가장 가까운 클러스터를 찾아야 하므로 다음을 선택하여 프로세스를 반복합니다. 새로운 중심 . 새 중심을 선택하기 위해 이러한 중심의 무게 중심을 계산하고 아래와 같이 새 중심을 찾습니다.
- 다음으로 각 데이터 포인트를 새 중심에 다시 할당합니다. 이를 위해 중앙선을 찾는 동일한 과정을 반복합니다. 중앙값은 아래 이미지와 같습니다.
위 이미지에서 볼 수 있듯이 노란색 점 하나는 선의 왼쪽에 있고 두 개의 파란색 점은 선 오른쪽에 있습니다. 따라서 이 세 점은 새로운 중심에 할당됩니다.
재할당이 이루어졌으므로 다시 4단계로 이동하여 새로운 중심 또는 K-포인트를 찾습니다.
- 중심의 무게 중심을 찾는 과정을 반복하므로 새 중심은 아래 이미지와 같습니다.
- 새로운 중심을 얻었으므로 다시 중앙선을 그리고 데이터 포인트를 다시 할당합니다. 따라서 이미지는 다음과 같습니다.
- 위 이미지에서 볼 수 있습니다. 선의 양쪽에 서로 다른 데이터 포인트가 없습니다. 이는 모델이 형성되었음을 의미합니다. 아래 이미지를 고려하십시오.
모델이 준비되었으므로 이제 가정된 중심을 제거할 수 있으며 두 개의 최종 클러스터는 아래 이미지와 같습니다.
K-평균 클러스터링에서 'K개의 클러스터 수' 값을 선택하는 방법은 무엇입니까?
K-평균 클러스터링 알고리즘의 성능은 알고리즘이 형성하는 매우 효율적인 클러스터에 따라 달라집니다. 그러나 최적의 클러스터 수를 선택하는 것은 큰 작업입니다. 최적의 클러스터 수를 찾는 몇 가지 방법이 있지만 여기서는 클러스터 수 또는 K 값을 찾는 가장 적절한 방법을 논의합니다. 방법은 다음과 같습니다.
팔꿈치 방법
Elbow 방법은 최적의 클러스터 수를 찾는 가장 널리 사용되는 방법 중 하나입니다. 이 방법은 WCSS 값의 개념을 사용합니다. WCSS 약자 클러스터 내 제곱합 내 , 클러스터 내의 전체 변형을 정의합니다. WCSS 값(3개 클러스터에 대해)을 계산하는 공식은 다음과 같습니다.
WCSS= ∑피나는 Cluster1에 있다거리(P나씨1)2+∑피나는 Cluster2에 있다거리(P나씨2)2+∑피나는 Cluster3에 있다거리(P나씨삼)2위의 WCSS 수식에서,
∑피나는 Cluster1에 있다거리(P나씨1)2: 각 데이터 포인트와 클러스터 내 중심 사이의 거리의 제곱의 합이며 다른 두 항에 대해서도 동일합니다.
데이터 포인트와 중심 사이의 거리를 측정하려면 유클리드 거리나 맨해튼 거리와 같은 방법을 사용할 수 있습니다.
클러스터의 최적 값을 찾기 위해 팔꿈치 방법은 다음 단계를 따릅니다.
- 다양한 K 값(1-10 범위)에 대해 지정된 데이터세트에서 K-평균 클러스터링을 실행합니다.
- K의 각 값에 대해 WCSS 값을 계산합니다.
- 계산된 WCSS 값과 클러스터 K 수 사이의 곡선을 그립니다.
- 구부러진 날카로운 지점이나 플롯의 지점이 팔처럼 보이면 해당 지점이 K의 가장 좋은 값으로 간주됩니다.
그래프에서 팔꿈치 모양으로 급격하게 굽은 모습을 보여 엘보우법이라고 합니다. 팔꿈치 방법에 대한 그래프는 아래 이미지와 같습니다.
참고: 주어진 데이터 포인트와 동일한 클러스터 수를 선택할 수 있습니다. 데이터 포인트와 동일한 클러스터 수를 선택하면 WCSS 값은 0이 되고 이것이 플롯의 끝점이 됩니다.
K-평균 클러스터링 알고리즘의 Python 구현
위 섹션에서는 K-평균 알고리즘에 대해 논의했습니다. 이제 K-평균 알고리즘을 사용하여 어떻게 구현할 수 있는지 살펴보겠습니다. 파이썬 .
구현하기 전에 여기서 어떤 유형의 문제를 해결할 것인지 이해해 봅시다. 그래서 우리는 다음과 같은 데이터 세트를 가지고 있습니다. 쇼핑몰_고객 , 쇼핑몰을 방문하고 그곳에서 소비한 고객의 데이터입니다.
주어진 데이터 세트에서 우리는 Customer_Id, 성별, 연령, 연소득($) 및 지출 점수 (고객이 쇼핑몰에서 지출한 금액을 계산한 값으로, 값이 높을수록 고객이 지출한 금액이 더 많습니다.) 이 데이터 세트에서 일부 패턴을 계산해야 합니다. 이는 비지도 방식이므로 정확히 무엇을 계산해야 할지 알 수 없습니다.
자바 xor
구현을 위해 따라야 할 단계는 다음과 같습니다.
1단계: 데이터 전처리 단계
첫 번째 단계는 회귀 및 분류의 이전 주제에서 했던 것처럼 데이터 사전 처리입니다. 그러나 클러스터링 문제의 경우 다른 모델과 다릅니다. 그것에 대해 논의해 봅시다:
이전 주제에서와 마찬가지로 먼저 데이터 전처리의 일부인 모델용 라이브러리를 가져옵니다. 코드는 아래와 같습니다:
# importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
위의 코드에서는 멍청하다 우리는 수학 계산을 수행하기 위해 가져왔습니다. matplotlib 그래프를 그리는 것입니다. 팬더 데이터세트를 관리하기 위한 것입니다.
다음으로 사용해야 하는 데이터 세트를 가져옵니다. 여기서는 Mall_Customer_data.csv 데이터 세트를 사용하고 있습니다. 아래 코드를 사용하여 가져올 수 있습니다.
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
위의 코드 줄을 실행하면 Spyder IDE에서 데이터 세트를 얻을 수 있습니다. 데이터 세트는 아래 이미지와 같습니다.
위의 데이터세트에서 몇 가지 패턴을 찾아야 합니다.
여기서는 클러스터링 문제이므로 데이터 전처리 단계에 종속 변수가 필요하지 않으며 무엇을 결정해야 할지 전혀 모릅니다. 따라서 우리는 기능 매트릭스에 대한 코드 한 줄을 추가할 것입니다.
x = dataset.iloc[:, [3, 4]].values
보시다시피 3개만 추출하고 있습니다.rd그리고 4일특징. 모델을 시각화하려면 2D 플롯이 필요하고 customer_id와 같은 일부 기능은 필요하지 않기 때문입니다.
2단계: 엘보우 방법을 사용하여 최적의 클러스터 수 찾기
두 번째 단계에서는 클러스터링 문제에 대한 최적의 클러스터 수를 찾으려고 노력할 것입니다. 따라서 위에서 설명한 대로 여기서는 이 목적을 위해 팔꿈치 방법을 사용하겠습니다.
우리가 알고 있듯이 Elbow 방법은 WCSS 개념을 사용하여 Y축에 WCSS 값을, X축에 클러스터 수를 표시하여 플롯을 그립니다. 따라서 우리는 1부터 10까지의 다양한 k 값에 대한 WCSS 값을 계산할 것입니다. 아래는 이에 대한 코드입니다:
#finding optimal number of clusters using the elbow method from sklearn.cluster import KMeans wcss_list= [] #Initializing the list for the values of WCSS #Using for loop for iterations from 1 to 10. for i in range(1, 11): kmeans = KMeans(n_clusters=i, init='k-means++', random_state= 42) kmeans.fit(x) wcss_list.append(kmeans.inertia_) mtp.plot(range(1, 11), wcss_list) mtp.title('The Elobw Method Graph') mtp.xlabel('Number of clusters(k)') mtp.ylabel('wcss_list') mtp.show()
위의 코드에서 볼 수 있듯이, 우리는 KMeans Sklearn 수업. 클러스터 라이브러리를 사용하여 클러스터를 형성합니다.
다음으로 우리는 wcss_list 변수는 1에서 10까지의 다양한 k 값에 대해 계산된 wcss 값을 포함하는 데 사용되는 빈 목록을 초기화합니다.
그 후, 1에서 10까지의 다양한 k 값에 대한 반복을 위해 for 루프를 초기화했습니다. Python의 for 루프에서는 아웃바운드 제한을 제외하므로 10을 포함하려면 11로 간주됩니다.일값.
코드의 나머지 부분은 이전 주제에서 했던 것과 유사합니다. 모델을 기능 매트릭스에 맞춘 다음 클러스터 수와 WCSS 사이에 그래프를 그렸습니다.
산출: 위의 코드를 실행하면 다음과 같은 결과가 출력됩니다.
위의 플롯에서 팔꿈치 지점이 다음 위치에 있음을 알 수 있습니다. 5. 따라서 여기의 클러스터 수는 5가 됩니다.
3단계: 훈련 데이터 세트에서 K-평균 알고리즘 훈련
클러스터 수를 확보했으므로 이제 데이터 세트에서 모델을 훈련할 수 있습니다.
모델을 훈련하기 위해 위 섹션에서 사용한 것과 동일한 두 줄의 코드를 사용하지만 여기서는 i를 사용하는 대신 5개의 클러스터를 형성해야 한다는 것을 알고 있으므로 5줄을 사용합니다. 코드는 아래와 같습니다:
#training the K-means model on a dataset kmeans = KMeans(n_clusters=5, init='k-means++', random_state= 42) y_predict= kmeans.fit_predict(x)
첫 번째 줄은 KMeans 클래스의 객체를 생성하는 위와 동일합니다.
코드의 두 번째 줄에서는 종속 변수를 만들었습니다. y_예측 모델을 훈련시킵니다.
위의 코드 줄을 실행하면 y_predict 변수를 얻을 수 있습니다. 우리는 그것을 아래에서 확인할 수 있습니다 변수 탐색기 Spyder IDE의 옵션입니다. 이제 y_predict 값을 원래 데이터 세트와 비교할 수 있습니다. 아래 이미지를 고려하십시오.
위 이미지에서 이제 CustomerID 1이 클러스터에 속해 있음을 알 수 있습니다.
3(인덱스는 0부터 시작하므로 2는 3으로 간주됩니다), 2는 클러스터 4에 속합니다.
4단계: 클러스터 시각화
마지막 단계는 클러스터를 시각화하는 것입니다. 모델에 5개의 클러스터가 있으므로 각 클러스터를 하나씩 시각화하겠습니다.
클러스터를 시각화하려면 matplotlib의 mtp.scatter() 함수를 사용하여 산점도를 사용합니다.
#visulaizing the clusters mtp.scatter(x[y_predict == 0, 0], x[y_predict == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') #for first cluster mtp.scatter(x[y_predict == 1, 0], x[y_predict == 1, 1], s = 100, c = 'green', label = 'Cluster 2') #for second cluster mtp.scatter(x[y_predict== 2, 0], x[y_predict == 2, 1], s = 100, c = 'red', label = 'Cluster 3') #for third cluster mtp.scatter(x[y_predict == 3, 0], x[y_predict == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') #for fourth cluster mtp.scatter(x[y_predict == 4, 0], x[y_predict == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') #for fifth cluster mtp.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroid') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show()
위 코드 줄에서 우리는 1부터 5까지의 각 클러스터에 대한 코드를 작성했습니다. mtp.scatter의 첫 번째 좌표, 즉 x[y_predict == 0, 0]는 행렬을 표시하기 위한 x 값을 포함합니다. 특징 값이며 y_predict의 범위는 0에서 1입니다.
산출:
출력 이미지에는 서로 다른 색상의 5개 클러스터가 명확하게 표시됩니다. 클러스터는 데이터세트의 두 매개변수 사이에 형성됩니다. 고객의 연간 수입과 지출. 요구 사항이나 선택에 따라 색상과 라벨을 변경할 수 있습니다. 또한 위의 패턴에서 다음과 같은 몇 가지 사항을 관찰할 수 있습니다.
- Cluster2는 고객의 소득이 높지만 지출이 낮다는 것을 보여줍니다. 따라서 고객을 다음과 같이 분류할 수 있습니다. 주의 깊은 .
- Cluster3은 소득도 낮고 지출도 낮아 합리적으로 분류할 수 있습니다.
- Cluster4는 저소득 고객과 매우 높은 지출 고객을 보여 주므로 다음과 같이 분류할 수 있습니다. 경솔한 .
- Cluster5는 소득과 지출이 높은 고객을 보여 타겟으로 분류할 수 있으며, 이러한 고객은 쇼핑몰 소유자에게 가장 수익성이 높은 고객이 될 수 있습니다.