비지도 학습 : 레이블이 없는 데이터에서 특징 파악을 통해 일정한 규칙을 찾아내는 머신러닝 기법
K값/중심 설정 -> 데이터의 클러스터 결정 -> 클러스터 내 중심 이동 -> 중심이 변경되지 않을 때까지 2,3번 과정 반복
교실에 있는 학생들의 키와 몸무게 값 : 3개의 군집으로 분류하기
장점 :
단점 :
# 라이브러리 import
import pandas as pd
from sklearn.cluster import KMeans
import seaborn as sns
from google.colab import drive
drive.mount('/gdrive')
filename = '/gdrive/My Drive/kmeans.csv'
#사이즈 코리아(https://sizekorea.kr/)
#2015년 남/녀 신장과 몸무게 데이터(500명)
df = pd.read_csv(filename)
print(df.head())
print(df.shape)
sns.lmplot(x='height', y='weight',
data=df,
fit_reg= True,
scatter_kws={"s": 50})
# 클러스터링 수행
data_points = df.values
kmeans = KMeans(n_clusters=3).fit(data_points)
kmeans.labels_[:10]
df['cluster'] = kmeans.labels_
df.head()
sns.lmplot(x='height',y='weight',
data=df,
fit_reg=False,
scatter_kws={"s": 30},
hue='cluster')
iris 데이터로 클러스터링
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]
# 클러스터링 수행 및 시각화
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)
# 분류 정확도 확인
target = iris.target
df = pd.DataFrame({'labels': labels, 'target': target})
ct = pd.crosstab(df['labels'], df['target'])
ct
# 최적의 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()