>  기사  >  백엔드 개발  >  Python의 k-평균 클러스터링 모델에 대한 자세한 설명

Python의 k-평균 클러스터링 모델에 대한 자세한 설명

王林
王林원래의
2023-06-10 09:15:191969검색

Python의 k-평균 클러스터링 모델에 대한 자세한 설명

클러스터 분석은 데이터에서 유사한 개체를 찾는 데 사용되는 방법입니다. 데이터 마이닝, 기계 학습 등의 분야에서는 클러스터 분석이 널리 사용됩니다. k-평균 클러스터링은 가장 일반적인 클러스터링 방법 중 하나입니다. 데이터 세트의 샘플을 k개의 클러스터로 나눌 수 있으며, 각 클러스터의 내부 차이는 가장 작고 클러스터 간의 차이는 가장 큽니다. 이 기사에서는 Python의 k-평균 클러스터링 모델을 자세히 소개합니다.

  1. k-평균 군집화 원리

k-평균 군집화 알고리즘은 반복적인 군집화 방법입니다. 핵심 단계에는 질량 중심 초기화, 거리 계산, 질량 중심 업데이트, 정지 조건 결정 등이 포함됩니다.

먼저 클러스터 수 k를 지정해야 합니다. 그런 다음 k개의 데이터 샘플을 초기 중심으로 무작위로 선택하고 나머지 각 샘플에 대해 가장 가까운 중심을 가진 클러스터에 할당합니다. 다음으로, 각 클러스터의 모든 데이터 포인트와 클러스터 중심으로부터의 거리 제곱의 합을 클러스터의 오차로 계산합니다. 그런 다음 각 클러스터의 중심이 업데이트되어 해당 클러스터에 있는 모든 샘플의 중심으로 이동됩니다. 오류가 특정 임계값보다 작아지거나 반복 횟수의 상한에 도달할 때까지 위 단계를 반복합니다.

  1. Python은 k-평균 클러스터링을 구현합니다

Python에서 sklearn 라이브러리는 k-평균 클러스터링 알고리즘을 사용하는 가장 간단한 방법인 k-평균 클러스터링 기능을 제공합니다. 다음은 붓꽃 데이터 세트를 예로 들어 Python을 사용하여 k-평균 클러스터링을 구현하는 방법을 보여줍니다.

from sklearn.cluster import KMeans
from sklearn.datasets import load_iris

iris = load_iris()
X = iris.data[:, :2]  # 为了便于可视化,只取前两个特征
y = iris.target

kmeans = KMeans(n_clusters=3)  # 聚成3类
kmeans.fit(X)

centroids = kmeans.cluster_centers_  # 质心
labels = kmeans.labels_  # 样本分类

# 绘制图形
import matplotlib.pyplot as plt

colors = ['red', 'green', 'blue']
for i in range(len(X)):
    plt.scatter(X[i][0], X[i][1], c=colors[labels[i]])
    
for c in centroids:
    plt.scatter(c[0], c[1], marker='x', s=300, linewidths=3, color='black')
    
plt.show()

위 코드를 실행하여 다음과 유사한 이미지를 생성합니다.

이미지에서 빨간색, 녹색 및 파란색 점은 각각 다른 클러스터를 나타냅니다. 검정색 "x" 기호는 각 클러스터의 중심을 나타냅니다.

  1. 최적의 k 값을 선택하는 방법

최적의 k 값을 결정하는 방법은 k-평균 클러스터링 알고리즘에서 가장 어려운 문제 중 하나입니다. 아래에는 두 가지 일반적인 방법, 즉 팔꿈치 방법과 윤곽 계수 방법이 소개되어 있습니다.

엘보우 방법: 먼저 k 값을 더 작은 정수로 설정하고 각 클러스터의 SSE(제곱 오류 합계)를 계산합니다. k 값이 증가함에 따라 제곱 오차의 합은 감소합니다. k 값이 특정 수준으로 증가하면 SSE는 더 이상 크게 떨어지지 않습니다. 이때, k 값과 SSE 사이의 관계는 곡선 그래프로 그려지며, 이는 팔꿈치 선분을 나타내야 합니다. 여기서 선분은 "엘보우" 위치에 있으며 해당 k 값은 최적의 클러스터 수입니다. .

코드 예:

sse = []
for i in range(1, 11):
    kmeans = KMeans(n_clusters=i).fit(X)
    sse.append(kmeans.inertia_)  # ineria_属性表示模型的误差平方和
 
plt.plot(range(1, 11), sse)
plt.xlabel('K')
plt.ylabel('SSE')
plt.show()

윤곽 계수 방법: 실루엣 계수는 클러스터 내 무관성과 클러스터 간 유사성이라는 두 가지 요소를 결합합니다. 실루엣 계수의 값이 클수록 클러스터링 효과가 좋아집니다. 실루엣 계수 방법의 계산 과정은 다음과 같습니다.

각 샘플에 대해 동일한 클러스터(a라고 함)에 있는 모든 샘플로부터의 평균 거리를 계산하고 가장 가까운 다른 클러스터(b라고 함)에 있는 모든 샘플로부터의 평균 거리를 계산합니다. ).

각 샘플의 실루엣 계수 s $s = rac {b-a} {max(a, b)}$를 계산합니다. 전체 모델의 실루엣 계수는 모든 샘플의 실루엣 계수의 평균입니다.

코드 예:

from sklearn.metrics import silhouette_score

sil_scores = []
for k in range(2, 11):
    kmeans = KMeans(n_clusters=k).fit(X)
    sil_score = silhouette_score(X, kmeans.labels_)  # 计算轮廓系数
    sil_scores.append(sil_score)
    
plt.plot(range(2, 11), sil_scores)
plt.xlabel('K')
plt.ylabel('Silhouette Coefficient')
plt.show()
  1. K는 클러스터링 주의사항을 의미합니다

k는 클러스터링에 다음과 같은 주의사항이 있음을 의미합니다.

초기값이 결과에 더 큰 영향을 미칩니다. 결과가 좋지 않습니다.

클러스터링 결과는 유클리드 거리, 맨해튼 거리 등과 같이 선택한 거리 측정법에 따라 달라집니다. 선택은 실제 상황에 따라 이루어져야 합니다.

데이터 세트의 이상값은 잘못된 클러스터에 쉽게 유인되므로 이상값 제거를 고려해야 합니다.

샘플 클래스 분포가 불균형할 때 일반적인 문제는 속성이 극도로 편향된 클러스터를 얻는 것입니다.

  1. 요약

k-평균 클러스터링은 널리 사용되는 클러스터링 알고리즘입니다. Python에서는 sklearn 라이브러리에서 제공하는 KMeans 함수를 사용하여 빠르게 구현할 수 있으며 동시에 팔꿈치 방법 또는 실루엣 계수 방법을 사용하여 최적의 클러스터 수를 결정할 수도 있습니다. 동시에 적용 중 k 값 선택과 초기 중심 설정에 주의를 기울여야 합니다.

위 내용은 Python의 k-평균 클러스터링 모델에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.