cluster : 무리, 송이
레이블이 있는 데이터: Supervised Learning
레이블이 없는 데이터: Unsupervised Learning
데이터 프레임이나 데이터 자료들에서 데이터들은 하나의 Column에 같은 특성(레이블)끼리 모여있다.
그렇지 않을 때_ Unsupervised Learning _엔 데이터 처리가 어렵기 때문에 같은 레이블로 데이터를 묶어주어야 한다.
그것이 클러스터링!
import numpy as np
from sklearn.cluster import KMeans
scaler = StandardScaler()
kmeans = KMeans(n_clusters=2, random_state=42).fit(features)
label01 = pd.DataFrame(kmeans.labels_)
✔️ StandardScaler()
"정규화"
데이터 프레임 내에서나, 데이터들 안에서는 Column마다 데이터의 값들이 다르고 평균도 다르다.
이 데이터들을 그대로 클러스터링 하게 되면
이런 문제를 없애기 위해 데이터들의 스케일을 맞춰주는
StandardScaler를 먼저 진행한다.
✔️ Kmeans(n_clusters=None, random_state=None)
제일 적합한 K-Mean Clustering을 어떻게 확인할까?
Scree Plot 으로 확인한다!
Screeplot : 각 개별 Principal Component의 고유값을 보여주는 간단한 line plot.
Scree Plot은 주성분의 수를 만드는 요인을 결정한다.
def scree_plot(pca):
num_components = len(ratio) # variance ratio 개수
ind = np.arange(num_components)
vals = ratio
ax = plt.subplot()
cumvals = np.cumsum(vals) # vals 누적된 값 계산
ax.bar(ind, vals, color = ['green','blue']) # Bar plot
ax.plot(ind, cumvals, color = '#c0392b') # Line plot
ax.set_xlabel("PC")
ax.set_ylabel("Variance")
plt.title('Scree plot')
pca = PCA(4) # principal n_components = 4
scree_plot(pc_df)
Hierachical : 계층제의
나는 HCA의 Dendrogram이 토너먼트 게임과 아주 비슷하다고 생각했다!
from sklearn.cluster import AgglomerativeClustering
import numpy as np
clustering = AgglomerativeClustering().fit(label01) # clustering 후: label01
clustering.labels_
# Dendrogram Visualization
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.cluster.hierarchy import linkage, dendrogram
import scipy.cluster.hierarchy as shc
plt.figure(figsize=(10, 7))
plt.title("Breast cancer dendrograms")
dend = shc.dendrogram(shc.linkage(features, method='ward')) # Ward 연결법 (Ward Linkage Method)