-
sklearn-13 clustering 1 kmeans머신러닝/sklearn 2023. 5. 10. 18:10
1. Kmeans
k는 클러스터의 수를 의미하며 means는 각 데이터로부터 그 데이터가 속한 클러스터의 중심까지의 평균 거리를 의미한다. 이 값을 최소화하는 것이 목표이다.
1. k개의 임의의 중심점을 잡는다.
2. 중심점을 기준으로 군집을 형성한다.
3. 군집으로 지정된 데이터를 기반으로 중심점을 업데이트한다.
4. 가장 좋은 중심점을 찾을 때까지 반복한다.
2. python
import numpy as np import pandas as pd import sklearn import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') import os from os.path import join from sklearn.datasets import load_wine wine = load_wine()
필요한 모듈과 wine 데이터를 불러온다.
data = wine.data label = wine.target columns = wine.feature_names data= pd.DataFrame(data, columns = columns) data.head() alcohol malic_acid ash alcalinity_of_ash magnesium total_phenols flavanoids nonflavanoid_phenols proanthocyanins color_intensity hue od280/od315_of_diluted_wines proline 0 14.23 1.71 2.43 15.6 127.0 2.80 3.06 0.28 2.29 5.64 1.04 3.92 1065.0 1 13.20 1.78 2.14 11.2 100.0 2.65 2.76 0.26 1.28 4.38 1.05 3.40 1050.0 2 13.16 2.36 2.67 18.6 101.0 2.80 3.24 0.30 2.81 5.68 1.03 3.17 1185.0 3 14.37 1.95 2.50 16.8 113.0 3.85 3.49 0.24 2.18 7.80 0.86 3.45 1480.0 4 13.24 2.59 2.87 21.0 118.0 2.80 2.69 0.39 1.82 4.32 1.04 2.93 735.0
데이터 프레임을 만들고 헤드를 확인한다.
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() data = scaler.fit_transform(data) data[:5] array([[0.84210526, 0.1916996 , 0.57219251, 0.25773196, 0.61956522, 0.62758621, 0.57383966, 0.28301887, 0.59305994, 0.37201365, 0.45528455, 0.97069597, 0.56134094], [0.57105263, 0.2055336 , 0.4171123 , 0.03092784, 0.32608696, 0.57586207, 0.51054852, 0.24528302, 0.27444795, 0.26450512, 0.46341463, 0.78021978, 0.55064194], [0.56052632, 0.3201581 , 0.70053476, 0.41237113, 0.33695652, 0.62758621, 0.61181435, 0.32075472, 0.75709779, 0.37542662, 0.44715447, 0.6959707 , 0.64693295], [0.87894737, 0.23913043, 0.60962567, 0.31958763, 0.4673913 , 0.98965517, 0.66455696, 0.20754717, 0.55835962, 0.55631399, 0.30894309, 0.7985348 , 0.85734665], [0.58157895, 0.36561265, 0.80748663, 0.53608247, 0.52173913, 0.62758621, 0.49578059, 0.49056604, 0.44479495, 0.25938567, 0.45528455, 0.60805861, 0.32596291]])
minmaxscaler를 이용해서 0-1 값으로 전처리한다. 슬라이스로 5개까지 확인한다.
from sklearn.decomposition import PCA pca =PCA(n_components=2)#대부분의 경우 2차원으로 축소 data=pca.fit_transform(data) data[:5] array([[-0.70633576, -0.25319275], [-0.4849768 , -0.00882289], [-0.52117227, -0.18918722], [-0.82164366, -0.58090551], [-0.20254638, -0.05946657]]) data.shape (178, 2)
차원을 2차원으로 축소한다. 데이터의 모양이 2차원으로 바뀐 것을 볼 수 있다.
from sklearn.cluster import KMeans kmeans =KMeans(n_clusters=3) kmeans.fit(data) KMeans KMeans(n_clusters=3)
kmeans 모듈을 불러오고 n_cluster를 3으로 설정하여 학습한다. n_cluster는 군집의 개수를 의미한다.
cluster = kmeans.predict(data) cluster 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], dtype=int32)
데이터를 예측하면 3개의 그룹으로 나뉜 것을 볼 수 있다.
plt.scatter(data[:,0],data[:,1], c=cluster,linewidth=1,edgecolor='black')
2차원이기 때문에 0번과 1번 데이터를 x축 y축으로 지정하고 군집별로 색깔로 나눈다.
'머신러닝 > sklearn' 카테고리의 다른 글
sklearn-14 clustering 1 hierarchical clustering, silhouette (0) 2023.05.10 sklearn-12 regression 3 svr (0) 2023.05.10 sklearn-11 regression 2 decison tree regressor (0) 2023.05.10 sklearn-10 regression 1 linear regression (0) 2023.05.10