K-MOOC 5주차 머신러닝으로 군집화하기

1. K-평균 알고리즘 이해하기

1-1. 비지도학습의 이해

img

img

1-2. K-평균 알고리즘

img

img

img

img

img

img

img

img

img

img

img

img

img

img

2-1. K-평균 알고리즘 실습

img

# 라이브러리 import

import pandas as pd  
from sklearn.cluster import KMeans  
import seaborn as sns
# 데이터셋 로드

filename = '/gdrive/My Drive/kmeans.csv' 
#사이즈 코리아(https://sizekorea.kr/)
#2015년 남/녀 신장과 몸무게 데이터(500명)
# 데이터 탐색

df = pd.read_csv(filename) 
print(df.head()) 
print(df.shape)

img

# 데이터 시각화하여 확인하기

sns.lmplot(x='height', y='weight',   
           data=df, 
           fit_reg= True, 
           scatter_kws={"s": 50})

img

# 클러스터링 수행

data_points = df.values 
kmeans = KMeans(n_clusters=3).fit(data_points)

kmeans.labels_[:10]

df['cluster'] = kmeans.labels_ 
df.head()

img

img

# 결과 시각화
sns.lmplot(x='height',y='weight', 
           data=df, 
           fit_reg=False, 
           scatter_kws={"s": 30}, 
           hue='cluster')

img

2-2. IRIS 분류 실습

# 라이브러리 import

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
# 데이터셋 로드 및 확인

iris = load_iris() 
data = iris.data[:,[0,1]] 
data[:10] 

img

# 클러스터링 수행 및 시각화

kmeans_iris = KMeans(n_clusters=3).fit(data) 

labels = kmeans_iris.labels_ 
plt.title('Clustering Result', fontsize=20) 
plt.scatter(data[:,0], data[:,1], c=labels, s=60) 

img

# 분류 정확도 확인

target = iris.target
df = pd.DataFrame({'labels': labels, 'target': target})
ct = pd.crosstab(df['labels'], df['target']) 
ct

img

# 최적의 K값 찾기

num_clusters = list(range(2, 9)) 
inertias = [] 

for i in num_clusters:  
    model = KMeans(n_clusters=i) 
    model.fit(data) 
    inertias.append(model.inertia_)

plt.plot(num_clusters, inertias, '-o')  
plt.xlabel('Num. of Clusters')
plt.ylabel('Inertia') 
plt.show() 

img

3. 계층적 군집화

img

img

img

img

img

# 라이브러리 import & 데이터 로드

from scipy.cluster.hierarchy import linkage, dendrogram
from scipy.cluster.hierarchy import fcluster
from sklearn import datasets
import matplotlib.pyplot as plt
import pandas as pd

iris = datasets.load_iris() 

labels = pd.DataFrame(iris.target) 
labels.columns=['labels'] 
data = pd.DataFrame(iris.data) 
data = pd.concat([data,labels],axis=1) 
data.head() 

img

# 클러스터링 수행

merge = linkage(data, method='complete')  # single, average, complete, ward

plt.figure(figsize=(30,10))
plt.title("IRIS Dendograms") 

dendrogram(merge, 
           leaf_rotation=90,
           leaf_font_size=10)
plt.show() 

img

# 클러스터 자르기

cut = fcluster(merge, t=3, criterion='distance') 
cut 

img

# 분류 결과 확인

labels = data['labels'] 
labels

img

df = pd.DataFrame({'predict':cut, 'labels':labels}) 
df

img

ct = pd.crosstab(df['predict'], df['labels']) 
ct

img

Categories:

Updated:

Leave a comment