1 분 소요

[목적]

  • 비지도학습 중 하나인 Clustering 중 DBSCAN 실습
  • For loop 활용 Hyperparameter(2개) 변경시켜 가며 실습 진행

[Process]

  1. Define X’s
  2. Modeling
  import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import sklearn.datasets as data
from sklearn.cluster import DBSCAN
  • seaborn도 쓰네? 시각화
#plt 와 sns Setting
%matplotlib inline
sns.set_context('poster')
sns.set_style('white')
sns.set_color_codes()
plot_kwds = {'alpha' : 0.5, 's' : 80, 'linewidths':0}
plt.rcParams["figure.figsize"] = [9,7]
  • sns, plt세팅
# Sample Data 만들기
num=100
moons, _ = data.make_moons(n_samples=num, noise=0.01)
blobs, _ = data.make_blobs(n_samples=num, centers=[(-0.75,2.25), (1.0, -2.0)], cluster_std=0.25)
blobs2, _ = data.make_blobs(n_samples=num, centers=[(2,2.25), (-1, -2.0)], cluster_std=0.4)
test_data = np.vstack([moons, blobs,blobs2])
plt.scatter(test_data.T[0], test_data.T[1], color='b', **plot_kwds)
plt.show()

image

[DBSCAN]

  • Hyperparameter Tuning using for Loop [DBSCAN Parameters]
  • Packge : https://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html
  • eps : 이웃을 판단하는 거리
  • metric : 거리를 계산할 때 사용하는 방법
    • default : euclidean
  • min_samples : eps안에 적어도 몇 개 들어와야 하는지 이웃의 숫자
epsilon = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7]
minPls = [5, 10, 15, 20]

for e in epsilon:
    for m in minPls:
        print("epsilon : {}, minPls : {}".format(e, m))
        db = DBSCAN(eps=e, min_samples=m).fit(test_data)
        palette = sns.color_palette()
        cluster_colors = [palette[col]
                        if col >= 0 else (0.5, 0.5, 0.5) for col in
                        db.labels_]
        plt.scatter(test_data.T[0], test_data.T[1], c=cluster_colors, **plot_kwds)
        plt.show()
  • epsilon : 0.1, minPls : 5 image
  • epsilon : 0.1, minPls : 10 image
  • epsilon : 0.1, minPls : 15 image epsilon : 0.1, minPls : 20 image epsilon : 0.2, minPls : 5 image …. epsilon : 0.7, minPls : 20 image
  • epsilon 값을 작게 하고, min값을 크게 하면 군집 내에서 어디가 밀도가 큰지도 알 수 있음!
  • epsilon 값이 너무 크면 clustering이 안됨..

카테고리:

업데이트:

댓글남기기