K-Means Elbow 방법 PlatoBlockchain 데이터 인텔리전스를 사용한 클러스터링. 수직 검색. 일체 포함.

Elbow 방법을 사용한 K-평균 군집화

K-means 클러스터링은 유클리드 거리라고 하는 중심점까지의 각 점을 기반으로 데이터를 그룹화하는 비지도 학습 알고리즘입니다. 중심. 중심은 같은 군집에 있는 모든 점의 평균으로 정의됩니다. 알고리즘은 먼저 임의의 점을 중심으로 선택한 다음 완전히 수렴될 때까지 조정을 반복합니다.

K-평균을 사용할 때 기억해야 할 중요한 점은 클러스터의 수가 하이퍼파라미터이며 모델을 실행하기 전에 정의된다는 것입니다.

K-means는 단 3줄의 코드로 Scikit-Learn을 사용하여 구현할 수 있습니다. Scikit-learn에는 이미 사용 가능한 중심 최적화 방법이 있습니다. kmeans++, 이는 모델이 더 빨리 수렴하는 데 도움이 됩니다.

K-means 클러스터링 알고리즘을 적용하기 위해 팔머 펭귄 데이터 세트에서 클러스터링할 열을 선택하고 Seaborn을 사용하여 색상 코드 클러스터로 산점도를 플로팅합니다.

주의 사항: 여기에서 데이터세트를 다운로드할 수 있습니다. 링크.

라이브러리를 가져오고 Penguins 데이터 세트를 로드하여 선택한 열로 트리밍하고 누락된 데이터가 있는 행을 삭제합니다(2개만 있음).

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

df = pd.read_csv('penguins.csv')
print(df.shape) 
df = df[['bill_length_mm', 'flipper_length_mm']]
df = df.dropna(axis=0)

Elbow 방법을 사용하여 데이터에 대한 클러스터 표시를 가질 수 있습니다. 팔꿈치 모양의 선 플롯 해석으로 구성됩니다. 클러스터의 수는 팔꿈치 굽힘이었습니다. 플롯의 x축은 클러스터 수이고 y축은 각 클러스터 수에 대한 WCSS(클러스터 내 제곱합)입니다.

wcss = []

for i in range(1, 11):
    clustering = KMeans(n_clusters=i, init='k-means++', random_state=42)
    clustering.fit(df)
    wcss.append(clustering.inertia_)
    
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss);

엘보우 방법은 데이터에 2개의 클러스터가 있음을 나타냅니다. 클러스터링 전후의 데이터를 플롯해 보겠습니다.

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without clustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('Using the elbow method');

K-Means Elbow 방법 PlatoBlockchain 데이터 인텔리전스를 사용한 클러스터링. 수직 검색. 일체 포함.

이 예에서는 클러스터 수를 선택하는 데 사용되는 Elbow 방법이 참조일 뿐임을 보여줍니다. 우리는 이미 데이터 세트에 3가지 유형의 펭귄이 있다는 것을 알고 있지만 Elbow 방법을 사용하여 펭귄의 수를 결정하면 2개의 클러스터가 결과가 됩니다.

K-평균은 데이터 분산에 민감하므로 클러스터링하는 열의 기술 통계를 살펴보겠습니다.

df.describe().T 

결과 :

 					count 	mean 		std 		min 	25% 	50% 	75% 	max
bill_length_mm 		342.0 	43.921930 	5.459584 	32.1 	39.225 	44.45 	48.5 	59.6
flipper_length_mm 	342.0 	200.915205 	14.061714 	172.0 	190.000 197.00 	213.0 	231.0

평균이 표준 편차(std)에서 멀리 떨어져 있다는 점에 유의하십시오. 이는 높은 분산을 나타냅니다. Standard Scaler로 데이터를 확장하여 이를 줄이도록 합시다.

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
scaled = ss.fit_transform(df)

이제 스케일링된 데이터에 대해 Elbow 방법 프로세스를 반복해 보겠습니다.

wcss_sc = []

for i in range(1, 11):
    clustering_sc = KMeans(n_clusters=i, init='k-means++', random_state=42)
    clustering_sc.fit(scaled)
    wcss_sc.append(clustering_sc.inertia_)
    
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss_sc);

K-Means Elbow 방법 PlatoBlockchain 데이터 인텔리전스를 사용한 클러스터링. 수직 검색. 일체 포함.

모범 사례, 업계에서 인정하는 표준 및 포함된 치트 시트가 포함된 Git 학습에 대한 실습 가이드를 확인하십시오. 인터넷 검색 Git 명령을 중지하고 실제로 배움 이것!

이번에는 제안된 클러스터 수는 3입니다. 비교를 위해 이전의 두 플롯과 함께 클러스터 레이블이 있는 데이터를 다시 그릴 수 있습니다.

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without cliustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('With the Elbow method')
sns.scatterplot(ax=axes[2], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering_sc.labels_).set_title('With the Elbow method and scaled data');

K-Means Elbow 방법 PlatoBlockchain 데이터 인텔리전스를 사용한 클러스터링. 수직 검색. 일체 포함.

K-means 클러스터링을 사용할 때 클러스터 수를 미리 결정해야 합니다. 우리가 선택하는 방법을 사용할 때 보았듯이 k 클러스터 수에서 결과는 제안일 뿐이며 데이터 분산의 양에 의해 영향을 받을 수 있습니다. 클러스터링할 때 심층 분석을 수행하고 서로 다른 _k_s를 갖는 둘 이상의 모델을 생성하는 것이 중요합니다.

데이터에 클러스터 수에 대한 사전 표시가 없는 경우 이를 시각화하고 테스트하고 해석하여 클러스터링 결과가 의미가 있는지 확인하십시오. 그렇지 않은 경우 다시 클러스터링하십시오. 또한 하나 이상의 메트릭을 살펴보고 다른 클러스터링 모델을 인스턴스화합니다. K-평균의 경우 실루엣 점수와 계층적 클러스터링을 확인하여 결과가 동일하게 유지되는지 확인합니다.

타임 스탬프 :

더보기 스택카부스