logo

K는 클러스터링을 의미합니다 - 소개

K-평균 클러스터링 이다 비지도 기계 학습 라벨이 지정되지 않은 데이터 세트를 다른 클러스터로 그룹화하는 알고리즘입니다. 이 기사에서는 구현과 함께 k 평균 클러스터링의 기본 사항과 작동 방식을 살펴보는 것을 목표로 합니다.

내용의 테이블



K-평균 클러스터링이란 무엇입니까?

비지도 기계 학습 레이블이 없고 분류되지 않은 데이터를 사용하도록 컴퓨터를 가르치고 알고리즘이 감독 없이 해당 데이터에 대해 작동할 수 있도록 하는 프로세스입니다. 이전의 데이터 교육 없이 이 경우 기계의 작업은 정렬되지 않은 데이터를 유사성, 패턴 및 변형에 따라 구성하는 것입니다.

K는 클러스터링을 의미하며 클러스터 중심으로부터의 거리에 따라 K 클러스터 중 하나에 데이터 포인트를 할당합니다. 공간에 클러스터 중심을 무작위로 할당하는 것으로 시작됩니다. 그런 다음 각 데이터 포인트는 클러스터 중심으로부터의 거리를 기준으로 클러스터 중 하나에 할당됩니다. 클러스터 중 하나에 각 포인트를 할당한 후 새 클러스터 중심이 할당됩니다. 이 프로세스는 좋은 클러스터를 찾을 때까지 반복적으로 실행됩니다. 분석에서는 클러스터의 수가 사전에 주어지고 그룹 중 하나에 포인트를 넣어야 한다고 가정합니다.

어떤 경우에는 K가 명확하게 정의되지 않아 최적의 K 개수를 생각해야 합니다. K는 클러스터링이 가장 잘 수행되는 데이터가 잘 분리되어 있음을 의미합니다. 데이터 포인트가 겹치는 경우 이 클러스터링은 적합하지 않습니다. K 평균은 다른 클러스터링 기술에 비해 더 빠릅니다. 이는 데이터 포인트 간의 강력한 결합을 제공합니다. K는 클러스터가 클러스터 품질에 관한 명확한 정보를 제공하지 않음을 의미합니다. 클러스터 중심의 초기 할당이 다르면 클러스터가 달라질 수 있습니다. 또한 K Means 알고리즘은 잡음에 민감합니다. 로컬 최소값에 갇혀 있을 수도 있습니다.



k-평균 클러스터링의 목적은 무엇입니까?

목표는 클러스터링 인구를 나누거나 세트 데이터 포인트를 여러 그룹으로 나누어 각 그룹 내의 데이터 포인트가 더 많아지도록 합니다. 유사한 다른 그룹 내의 데이터 포인트와는 다릅니다. 이는 본질적으로 서로 얼마나 유사하고 다른지에 따라 사물을 그룹화하는 것입니다.

k-평균 클러스터링은 어떻게 작동하나요?

특정 기능이 포함된 항목의 데이터 세트와 이러한 기능에 대한 값(예: 벡터)이 제공됩니다. 작업은 해당 항목을 그룹으로 분류하는 것입니다. 이를 달성하기 위해 비지도 학습 알고리즘인 K-means 알고리즘을 사용하겠습니다. 알고리즘 이름의 'K'는 항목을 분류하려는 그룹/클러스터 수를 나타냅니다.

(항목을 n차원 공간의 점으로 생각하면 도움이 됩니다.) 알고리즘은 항목을 k개 그룹 또는 유사성 클러스터로 분류합니다. 유사성을 계산하기 위해 유클리드 거리를 측정값으로 사용합니다.



알고리즘은 다음과 같이 작동합니다.

  1. 먼저, 평균 또는 군집 중심이라고 불리는 k개 점을 무작위로 초기화합니다.
  2. 각 항목을 가장 가까운 평균으로 분류하고 지금까지 해당 클러스터에 분류된 항목의 평균인 평균 좌표를 업데이트합니다.
  3. 주어진 반복 횟수만큼 프로세스를 반복하고 마지막에는 클러스터를 얻습니다.

위에서 언급한 포인트는 해당 포인트에 분류된 항목의 평균값이므로 평균이라고 합니다. 이러한 수단을 초기화하려면 많은 옵션이 있습니다. 직관적인 방법은 데이터 세트의 무작위 항목에서 평균을 초기화하는 것입니다. 또 다른 방법은 데이터 세트 경계 사이의 무작위 값으로 평균을 초기화하는 것입니다(특징의 경우). 엑스, 항목의 값이 [0,3]에 있으면 다음 값으로 평균을 초기화합니다. 엑스 [0,3]에서).

위의 의사코드 알고리즘은 다음과 같습니다.

Initialize k means with random values -->주어진 반복 횟수에 대해: --> 항목 반복: --> 각 평균과 항목의 유클리드 거리를 계산하여 항목에 가장 가까운 평균을 찾습니다. --> 항목을 평균에 할당 --> 평균 업데이트 해당 클러스터에 있는 항목의 평균으로 이동>

Python에서 K-Means 클러스터링 구현

실시예 1

필요한 라이브러리 가져오기

우리는 수입하고 있습니다 넘피 통계 계산을 위해, Matplotlib 음모를 꾸미다 그래프, 및 sklearn.datasets의 make_blobs.

파이썬3


np 도트



import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.datasets>import> make_blobs>

>

>

make_blobs를 사용하여 사용자 정의 데이터 세트를 생성하고 플롯합니다.

파이썬3




X,y>=> make_blobs(n_samples>=> 500>,n_features>=> 2>,centers>=> 3>,random_state>=> 23>)> fig>=> plt.figure(>0>)> plt.grid(>True>)> plt.scatter(X[:,>0>],X[:,>1>])> plt.show()>

>

>

산출 :

클러스터링 데이터세트 - Geeksforgeeks

클러스터링 데이터 세트

임의의 중심을 초기화합니다.

이 코드는 K-평균 클러스터링을 위해 3개의 클러스터를 초기화합니다. 무작위 시드를 설정하고 지정된 범위 내에서 무작위 클러스터 중심을 생성하고 빈 클러스터를 생성합니다. 목록 각 클러스터의 포인트 수입니다.

파이썬3




k>=> 3> clusters>=> {}> np.random.seed(>23>)> for> idx>in> range>(k):> >center>=> 2>*>(>2>*>np.random.random((X.shape[>1>],))>->1>)> >points>=> []> >cluster>=> {> >'center'> : center,> >'points'> : []> >}> > >clusters[idx]>=> cluster> > clusters>

>

>

산출:

{0: {'center': array([0.06919154, 1.78785042]), 'points': []},  1: {'center': array([ 1.06183904, -0.87041662]), 'points': []},  2: {'center': array([-1.11581855, 0.74488834]), 'points': []}}>

데이터 포인트를 사용하여 무작위 초기화 중심을 플로팅합니다.

파이썬3

자바 컬렉션 자바




plt.scatter(X[:,>0>],X[:,>1>])> plt.grid(>True>)> for> i>in> clusters:> >center>=> clusters[i][>'center'>]> >plt.scatter(center[>0>],center[>1>],marker>=> '*'>,c>=> 'red'>)> plt.show()>

>

>

산출 :

무작위 중심이 있는 데이터 포인트 - Geeksforgeeks

무작위 중심이 있는 데이터 포인트

플롯은 그리드 선과 함께 데이터 포인트(X[:,0], X[:,1])의 산점도를 표시합니다. 또한 K-평균 군집화를 위해 생성된 초기 군집 중심(빨간색 별)을 표시합니다.

유클리드 거리 정의

파이썬3




def> distance(p1,p2):> >return> np.sqrt(np.>sum>((p1>->p2)>*>*>2>))>

>

>

클러스터 센터를 할당하고 업데이트하는 기능을 만듭니다.

E-단계는 가장 가까운 클러스터 중심에 데이터 포인트를 할당하고, M-단계는 K-평균 클러스터링에서 할당된 포인트의 평균을 기반으로 클러스터 중심을 업데이트합니다.

파이썬3




#Implementing E step> def> assign_clusters(X, clusters):> >for> idx>in> range>(X.shape[>0>]):> >dist>=> []> > >curr_x>=> X[idx]> > >for> i>in> range>(k):> >dis>=> distance(curr_x,clusters[i][>'center'>])> >dist.append(dis)> >curr_cluster>=> np.argmin(dist)> >clusters[curr_cluster][>'points'>].append(curr_x)> >return> clusters> > #Implementing the M-Step> def> update_clusters(X, clusters):> >for> i>in> range>(k):> >points>=> np.array(clusters[i][>'points'>])> >if> points.shape[>0>]>>0>:> >new_center>=> points.mean(axis>=>0>)> >clusters[i][>'center'>]>=> new_center> > >clusters[i][>'points'>]>=> []> >return> clusters>

>

>

7단계: 데이터 포인트에 대한 클러스터를 예측하는 함수 만들기

파이썬3




def> pred_cluster(X, clusters):> >pred>=> []> >for> i>in> range>(X.shape[>0>]):> >dist>=> []> >for> j>in> range>(k):> >dist.append(distance(X[i],clusters[j][>'center'>]))> >pred.append(np.argmin(dist))> >return> pred>

>

>

클러스터 센터 할당, 업데이트 및 예측

파이썬3




clusters>=> assign_clusters(X,clusters)> clusters>=> update_clusters(X,clusters)> pred>=> pred_cluster(X,clusters)>

>

>

예측된 클러스터 중심을 사용하여 데이터 포인트를 플롯합니다.

파이썬3




plt.scatter(X[:,>0>],X[:,>1>],c>=> pred)> for> i>in> clusters:> >center>=> clusters[i][>'center'>]> >plt.scatter(center[>0>],center[>1>],marker>=> '^'>,c>=> 'red'>)> plt.show()>

빈에서 bcd로

>

>

산출 :

K-평균 클러스터링 - Geeksforgeeks

K-평균 클러스터링

플롯에는 예측된 클러스터에 따라 색상이 지정된 데이터 포인트가 표시됩니다. 빨간색 마커는 K-평균 클러스터링 알고리즘의 E-M 단계 이후 업데이트된 클러스터 중심을 나타냅니다.

실시예 2

필요한 라이브러리 가져오기

파이썬3




import> pandas as pd> import> numpy as np> import> seaborn as sns> import> matplotlib.pyplot as plt> import> matplotlib.cm as cm> from> sklearn.datasets>import> load_iris> from> sklearn.cluster>import> KMeans>

>

>

데이터세트 로드

파이썬3




X, y>=> load_iris(return_X_y>=>True>)>

자바의 문자열 형식

>

>

팔꿈치 방법

데이터를 나눌 이상적인 그룹 수를 찾는 것은 비지도 알고리즘의 기본 단계입니다. k의 이상적인 값을 알아내는 가장 일반적인 기술 중 하나는 팔꿈치 접근 방식입니다.

파이썬3




#Find optimum number of cluster> sse>=> []>#SUM OF SQUARED ERROR> for> k>in> range>(>1>,>11>):> >km>=> KMeans(n_clusters>=>k, random_state>=>2>)> >km.fit(X)> >sse.append(km.inertia_)>

>

>

최적의 클러스터 수를 찾기 위해 엘보우 그래프를 그립니다.

파이썬3




sns.set_style(>'whitegrid'>)> g>=>sns.lineplot(x>=>range>(>1>,>11>), y>=>sse)> g.>set>(xlabel>=>'Number of cluster (k)'>,> >ylabel>=> 'Sum Squared Error'>,> >title>=>'Elbow Method'>)> plt.show()>

>

>

산출:

팔꿈치 방법

위의 그래프에서 k=2, k=3에서 팔꿈치와 같은 상황을 관찰할 수 있습니다. 그래서 우리는 K=3을 고려하고 있습니다.

Kmeans 클러스터링 모델 구축

파이썬3




kmeans>=> KMeans(n_clusters>=> 3>, random_state>=> 2>)> kmeans.fit(X)>

>

>

산출:

KMeans KMeans(n_clusters=3, random_state=2)>

클러스터 센터 찾기

파이썬3

C++ int를 문자열로 변환




kmeans.cluster_centers_>

>

>

산출:

array([[5.006 , 3.428 , 1.462 , 0.246 ],  [5.9016129 , 2.7483871 , 4.39354839, 1.43387097],  [6.85 , 3.07368421, 5.74210526, 2.07105263]])>

클러스터 그룹을 예측합니다.

파이썬3




pred>=> kmeans.fit_predict(X)> pred>

>

>

산출:

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2,  2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 2, 2, 2,  2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1], dtype=int32)>

데이터 포인트를 사용하여 군집 중심을 플롯합니다.

파이썬3




plt.figure(figsize>=>(>12>,>5>))> plt.subplot(>1>,>2>,>1>)> plt.scatter(X[:,>0>],X[:,>1>],c>=> pred, cmap>=>cm.Accent)> plt.grid(>True>)> for> center>in> kmeans.cluster_centers_:> >center>=> center[:>2>]> >plt.scatter(center[>0>],center[>1>],marker>=> '^'>,c>=> 'red'>)> plt.xlabel(>'petal length (cm)'>)> plt.ylabel(>'petal width (cm)'>)> > plt.subplot(>1>,>2>,>2>)> plt.scatter(X[:,>2>],X[:,>3>],c>=> pred, cmap>=>cm.Accent)> plt.grid(>True>)> for> center>in> kmeans.cluster_centers_:> >center>=> center[>2>:>4>]> >plt.scatter(center[>0>],center[>1>],marker>=> '^'>,c>=> 'red'>)> plt.xlabel(>'sepal length (cm)'>)> plt.ylabel(>'sepal width (cm)'>)> plt.show()>

>

>

산출:

K-평균 클러스터링 - Geeksforgeeks

K-평균 클러스터링

왼쪽의 서브플롯은 클러스터별로 색상이 지정된 데이터 포인트를 사용하여 꽃잎 길이와 꽃잎 너비를 표시하고 빨간색 마커는 K-평균 클러스터 중심을 나타냅니다. 오른쪽의 서브플롯은 꽃받침 길이와 꽃받침 너비를 비슷하게 보여줍니다.

결론

결론적으로 K-평균 클러스터링은 레이블이 지정되지 않은 데이터 세트를 그룹화하기 위한 강력한 비지도 기계 학습 알고리즘입니다. 그 목적은 데이터를 클러스터로 나누어 유사한 데이터 포인트를 동일한 그룹의 일부로 만드는 것입니다. 알고리즘은 클러스터 중심을 초기화하고 가장 가까운 중심에 데이터 포인트를 반복적으로 할당하여 각 클러스터의 포인트 평균을 기반으로 중심을 업데이트합니다.

자주 묻는 질문(FAQ)

1. 데이터 분석을 위한 k-평균 클러스터링이란 무엇입니까?

K-평균은 각 클러스터 내의 분산을 최소화하는 것을 목표로 데이터세트를 유사성을 기준으로 'k'개의 고유하고 겹치지 않는 하위 집합(클러스터)으로 나누는 분할 방법입니다.

2.실생활에서 k-평균의 예는 무엇입니까?

k-평균이 구매 행동에 따라 고객을 그룹화하는 마케팅의 고객 세분화를 통해 기업은 다양한 세그먼트에 맞게 마케팅 전략을 맞춤화할 수 있습니다.

3. k-평균 클러스터링 모델은 어떤 유형의 데이터입니까?

K-평균은 데이터 포인트 사이의 거리 개념이 의미 있는 수치 데이터와 잘 작동합니다. 이는 일반적으로 연속형 변수에 적용됩니다.

4.예측에 K-평균을 사용하나요?

K-평균은 주로 유사한 데이터 포인트를 클러스터링하고 그룹화하는 데 사용됩니다. 새 데이터의 레이블을 예측하지 않습니다. 유사성을 기반으로 기존 클러스터에 할당합니다.

5.k-평균 클러스터링의 목적은 무엇입니까?

목표는 데이터를 'k' 클러스터로 분할하여 클러스터 내 분산을 최소화하는 것입니다. 각 클러스터 내의 데이터 포인트가 다른 클러스터의 데이터 포인트보다 서로 더 유사한 그룹을 형성하려고 합니다.