1 분 소요

  • 비지도학습 중 하나인 Clustering 중 Hierarchical Clustering 실습
  • 덴드로그램을 그려 Cluster 결정
  • Clustering은 기본적으로 Data가 많을 때 시간이 굉장히 오래걸림
    • Distance Matrix를 만들고 행렬 계산을 하는 알고리즘이 많기 때문

[Process]

  1. Define X’s
  2. Modeling
  import gc
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings("ignore")

from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.metrics import confusion_matrix, f1_score
from sklearn.preprocessing import MinMaxScaler
  • dendrogram 그릴꺼야
  • AgglomerativeClustering 이거Hierarchical Clustering 이거랑 똑같음
  # Data Loading (수술 時 사망 데이터)
data=pd.read_csv("https://raw.githubusercontent.com/GonieAhn/Data-Science-online-course-from-gonie/main/Data%20Store/example_data.csv")
  # Data Checking
col = []
missing = []
level = [] 
for name in data.columns:
    
    # Missing
    missper = data[name].isnull().sum() / data.shape[0]
    missing.append(round(missper, 4))

    # Leveling
    lel = data[name].dropna()
    level.append(len(list(set(lel))))

    # Columns
    col.append(name)

summary = pd.concat([pd.DataFrame(col, columns=['name']), 
                     pd.DataFrame(missing, columns=['Missing Percentage']), 
                     pd.DataFrame(level, columns=['Level'])], axis=1)

  drop_col = summary['name'][(summary['Level'] <= 1) | (summary['Missing Percentage'] >= 0.8)]
data.drop(columns=drop_col, inplace=True)
print(">>>> Data Shape : {}".format(data.shape))
  • level 1인거 drop
  summary
  # X's & Y Split
Y = data['censor']
X = data.drop(columns=['censor'])

[Clustering 전 Scaling]

  • Clustering은 Distance를 구하는 작업이 필요함
  • Feature들의 Scale이 다르면 Distance를 구하는데 가중치가 들어가게 됨
  • 따라서, Distance 기반의 Clustering의 경우 Scaling이 필수
  # Scaling
scaler = MinMaxScaler().fit(X)
X_scal = scaler.transform(X)
X_scal = pd.DataFrame(X_scal, columns=X.columns)

[Hierarchical Clustering]

  • Package : https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.linkage.html
  • Package : https://scikit-learn.org/stable/modules/generated/sklearn.cluster.AgglomerativeClustering.html
  • method
    • image.png
    • Ward : 와드연결법(Ward linkage)은 군집간의 거리에 따라 데이터들을 연결하기 보다는 군집내 편차들의 제곱합(within group sum of squares)에 근거를 두고 군집들을 병합시키는 방법
    • metric : 거리 계산법

HC

  # Set up HC
meth = ['single', 'complete', 'average', 'weighted', 'centroid', 'median', 'ward']

HC = linkage(X_scal,method=meth[-1])
plt.figure(figsize=(20,10))
dendrogram(HC,
            leaf_rotation=90,
            leaf_font_size=20)
plt.show()

image

  • meth는 그림에서 나오는 군집간의 거리 구하는 방법들의 list임
  • -1이니까 ward 사용

카테고리:

업데이트:

댓글남기기