๋ฐ์ํ
DBSCAN์ ๋ฐ๋ ๊ธฐ๋ฐ์ ๊ตฐ์งํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋ฐ์ดํฐ ํฌ์ธํธ์ ๋ฐ์ง๋ ์์ญ์ ๊ตฐ์ง์ผ๋ก ์๋ณํ๊ณ , ๋ฐ๋๊ฐ ๋ฎ์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ ๋ ธ์ด์ฆ๋ก ๊ฐ์ฃผํ๋ ๋ฐฉ์์ ๋๋ค. DBSCAN์ ๋ชฉํ๋ ๋ฐ์ดํฐ์ ๋ฐ์ง ์์ญ์ ์ฐพ์๋ด์ด, ๊ตฐ์ง์ ํฌ๊ธฐ๋ ํํ์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ์ ์ฐํ๊ฒ ๊ตฐ์งํ๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ค.
DBSCAN์ ํน์ง
- ๋ฐ๋ ๊ธฐ๋ฐ ๊ตฐ์งํ: DBSCAN์ ๋ฐ์ดํฐ ํฌ์ธํธ์ ๋ฐ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ตฐ์ง์ ํ์ฑํฉ๋๋ค. ์ฆ, ์ผ์ ๋ฐ๋ ์ด์์ ์์ญ์ ํ๋์ ๊ตฐ์ง์ผ๋ก ๋ฌถ์ต๋๋ค.
- ๋ ธ์ด์ฆ ์ฒ๋ฆฌ: ๋ฐ๋๊ฐ ๋ฎ์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ ๋ ธ์ด์ฆ๋ก ๊ฐ์ฃผ๋๋ฉฐ, ๊ตฐ์ง์์ ์ ์ธ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ตฐ์งํ ๊ณผ์ ์์ ๋ ธ์ด์ฆ๋ ์ด์์น๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ์ ์ฐํ ๊ตฐ์ง ํ์ฑ: DBSCAN์ ๊ตฐ์ง์ ํฌ๊ธฐ๋ ํํ์ ๊ตฌ์ ๋ฐ์ง ์๊ณ , ๋ฐ์ดํฐ์ ๋ฐ๋์ ๋ฐ๋ผ ์ ์ฐํ๊ฒ ๊ตฐ์ง์ ํ์ฑํ ์ ์์ต๋๋ค. ์ด๋ ๋ฐ์ดํฐ๊ฐ ๋น์ ํ์ ์ธ ํํ๋ฅผ ๊ฐ์ง ๋ ํนํ ์ ์ฉํฉ๋๋ค.
- ๋น๊ต์ ๊ฐ๋จํ ๊ตฌํ: DBSCAN ์๊ณ ๋ฆฌ์ฆ์ ๋น๊ต์ ๊ฐ๋จํ๊ณ , ๊ตฌํ์ด ์ฉ์ดํ์ฌ ๋ค์ํ ๋ฐ์ดํฐ์ ์ ์ ์ฉํ ์ ์์ต๋๋ค.
DBSCAN์ ๊ธฐ๋ณธ ์๋ฆฌ
๋ฐ๋ ๊ธฐ์ค (Density Criteria)
- DBSCAN์ ๋ ๊ฐ์ ์ฃผ์ ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค:
- ฯต(epsilone): ๋ฐ์ดํฐ ํฌ์ธํธ ๊ฐ์ ์ต๋ ๊ฑฐ๋ฆฌ๋ก, ์ด ๊ฑฐ๋ฆฌ ์ด๋ด์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ค์ ํ๋์ ๊ตฐ์ง์ผ๋ก ๋ฌถ์ต๋๋ค.
- ์ต์ ํฌ์ธํธ ์ (MinPts): ๊ตฐ์ง์ ํ์ฑํ๊ธฐ ์ํด ํ์ํ ์ต์ ๋ฐ์ดํฐ ํฌ์ธํธ ์์ ๋๋ค. ์ด๋ ํด๋น ์์ญ์ด ๊ตฐ์ง์ผ๋ก ๊ฐ์ฃผ๋๊ธฐ ์ํ ์ต์ ๋ฐ๋๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
ํต์ฌ ํฌ์ธํธ (Core Point)
- ๋ฐ๊ฒฝ ฯต(epsilone) ์ด๋ด์ ์ต์ MinPts ์ด์์ ๋ฐ์ดํฐ ํฌ์ธํธ๊ฐ ์๋ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ํต์ฌ ํฌ์ธํธ๋ก ์ ์ํฉ๋๋ค.
- ํต์ฌ ํฌ์ธํธ๋ ๊ตฐ์ง์ ์ค์ฌ ์ญํ ์ ํฉ๋๋ค.
๊ฒฝ๊ณ ํฌ์ธํธ (Border Point)
- ๋ฐ๊ฒฝ ฯต(epsilone) ์ด๋ด์ MinPts ์ด์์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ ์์ง๋ง, ํต์ฌ ํฌ์ธํธ์ ๋ฐ๊ฒฝ ฯต(epsilone) ๋ด์ ์์นํ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ๊ฒฝ๊ณ ํฌ์ธํธ๋ก ์ ์ํฉ๋๋ค. ๊ฒฝ๊ณ ํฌ์ธํธ๋ ๊ตฐ์ง์ ์ํ์ง๋ง, ๊ตฐ์ง์ ํ์ฅํ์ง๋ ์์ต๋๋ค.
๋ ธ์ด์ฆ ํฌ์ธํธ (Noise Point)
- ํต์ฌ ํฌ์ธํธ์ ๊ฒฝ๊ณ ํฌ์ธํธ ๋ชจ๋์ ํด๋นํ์ง ์๋ ๋ฐ์ดํฐ ํฌ์ธํธ๋ ๋ ธ์ด์ฆ ํฌ์ธํธ๋ก ์ ์๋ฉ๋๋ค.
- ์ด๋ฌํ ํฌ์ธํธ๋ค์ ๊ตฐ์ง์ ์ํ์ง ์์ต๋๋ค.
DBSCAN์ ๊ตฐ์ง ํ์ฑ๊ณผ์
์ด๊ธฐํ
- ๋ชจ๋ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ๋ฐฉ๋ฌธํ์ง ์์ ์ํ๋ก ์ด๊ธฐํํฉ๋๋ค.
๊ตฐ์ง ํ์ฅ
- ๋ฐฉ๋ฌธํ์ง ์์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ์ ํํ์ฌ, ํด๋น ํฌ์ธํธ๊ฐ ํต์ฌ ํฌ์ธํธ์ธ์ง ํ์ธํฉ๋๋ค.
- ๋ง์ฝ ํต์ฌ ํฌ์ธํธ๋ผ๋ฉด, ๋ฐ๊ฒฝ ฯต(epsilone) ๋ด์ ๋ชจ๋ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ํฌํจํ์ฌ ์๋ก์ด ๊ตฐ์ง์ ํ์ฑํฉ๋๋ค.
- ๊ฒฝ๊ณ ํฌ์ธํธ๋ ๊ธฐ์กด ๊ตฐ์ง์ ํฌํจ๋๋ฉฐ, ๋ ธ์ด์ฆ ํฌ์ธํธ๋ ๊ตฐ์ง์ ํฌํจ๋์ง ์์ต๋๋ค.
๋ฐ๋ณต
- ๋ชจ๋ ๋ฐ์ดํฐ ํฌ์ธํธ๊ฐ ๋ฐฉ๋ฌธ๋ ๋๊น์ง ๊ตฐ์ง ํ์ฅ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค. ์ด ๊ณผ์ ์ด ๋๋๋ฉด ๋ฐ์ดํฐ์ ์ ์ฒด์ ๊ตฐ์งํ๊ฐ ์๋ฃ๋ฉ๋๋ค.
DBSCAN์ ์ฅ, ๋จ์
DBSCAN์ ์ฅ์
- ๊ตฐ์ง ์ ๋ฏธ๋ฆฌ ์ง์ ๋ถํ์: DBSCAN์ ๊ตฐ์ง์ ์๋ฅผ ์ฌ์ ์ ์ง์ ํ ํ์๊ฐ ์์ต๋๋ค. ๊ตฐ์ง์ ์๋ ๋ฐ์ดํฐ์ ๋ฐ๋์ ๋ฐ๋ผ ์๋์ผ๋ก ๊ฒฐ์ ๋ฉ๋๋ค.
- ๋ ธ์ด์ฆ ๋ฐ์ดํฐ ์ฒ๋ฆฌ: DBSCAN์ ๋ ธ์ด์ฆ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ์ฌ ๊ตฐ์ง์์ ์ ์ธํ ์ ์์ต๋๋ค. ์ด๋ ๋ค๋ฅธ ๊ตฐ์งํ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น๊ตํด ํฐ ์ฅ์ ์ ๋๋ค.
- ๋ค์ํ ๊ตฐ์ง ํํ: DBSCAN์ ๋ฐ์ดํฐ์ ๊ตฐ์ง ํํ๊ฐ ๊ตฌํ(spherical)์ด ์๋์ด๋ ์ ์ฐํ๊ฒ ๊ตฐ์งํํ ์ ์์ต๋๋ค. ๋น์ ํ์ ์ธ ๊ตฐ์ง ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ์ ๋ํด ํจ๊ณผ์ ์ผ๋ก ์๋ํฉ๋๋ค.
- ํ์ฅ์ฑ: DBSCAN์ ๊ตฐ์ง์ ํฌ๊ธฐ๋ ๋ฐ๋์ ๊ด๊ณ์์ด ์ ์ฐํ๊ฒ ์ ์ฉ ๊ฐ๋ฅํ๋ฉฐ, ๋ค์ํ ๋ฐ์ดํฐ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
DBSCAN์ ๋จ์
- ํ์ดํผํ๋ผ๋ฏธํฐ ์ค์ ์ด๋ ค์: ฯต(epsilone)๊ณผ MinPts์ ๊ฐ์ ์ค์ ํ๋ ๊ฒ์ด ์ด๋ ต์ต๋๋ค. ์ด ๊ฐ๋ค์ด ์๋ชป ์ค์ ๋๋ฉด ๊ตฐ์งํ ๊ฒฐ๊ณผ๊ฐ ๋ถ์ ํํ ์ ์์ต๋๋ค.
- ๋ฐ๋ ๋ณํ์ ๋ฏผ๊ฐ: ๋ฐ์ดํฐ์ ๋ฐ๋๊ฐ ๊ท ์ผํ์ง ์์ ๊ฒฝ์ฐ, DBSCAN์ ๊ตฐ์งํ ์ฑ๋ฅ์ด ์ ํ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ๋ฐ๋๊ฐ ํฌ๊ฒ ๋ณํ๋ ์์ญ์์๋ ๊ตฐ์ง์ด ์ ๋๋ก ํ์ฑ๋์ง ์์ ์ ์์ต๋๋ค.
- ๊ณ ์ฐจ์ ๋ฐ์ดํฐ์์์ ์ฑ๋ฅ ์ ํ: ๊ณ ์ฐจ์ ๋ฐ์ดํฐ์์๋ ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ด ์ด๋ ค์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค. ๊ณ ์ฐจ์ ๊ณต๊ฐ์์๋ ๋ฐ์ดํฐ ํฌ์ธํธ ๊ฐ์ ๊ฑฐ๋ฆฌ๊ฐ ๋งค์ฐ ๋น์ทํด์ง๋ ๊ฒฝํฅ์ด ์์ด, ๊ตฐ์ง์ ์ ๊ตฌ๋ถํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
DBSCAN Example Code
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
# Iris ๋ฐ์ดํฐ์
๋ก๋
iris = load_iris()
X = iris.data
y = iris.target
# ๋ฐ์ดํฐ ํ์คํ
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# DBSCAN ๋ชจ๋ธ ์์ฑ ๋ฐ ํ์ต
dbscan = DBSCAN(eps=0.5, min_samples=2)
labels = dbscan.fit_predict(X_scaled)
# ํด๋ฌ์คํฐ๋ง ๊ฒฐ๊ณผ ์๊ฐํ (์ฒซ ๋ฒ์งธ ๋ ํน์ง ๊ณต๊ฐ ์ฌ์ฉ)
plt.figure(figsize=(10, 7))
unique_labels = set(labels)
colors = [plt.cm.Spectral(each) for each in np.linspace(0, 1, len(unique_labels))]
for k, col in zip(unique_labels, colors):
if k == -1:
col = [0, 0, 0, 1] # ๋
ธ์ด์ฆ๋ ๊ฒ์ ์์ผ๋ก ํ์
class_member_mask = (labels == k)
xy = X_scaled[class_member_mask]
plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col), markeredgecolor='k', markersize=10)
plt.title('DBSCAN Clustering of Iris Dataset (eps=0.5, min_samples=2)')
plt.xlabel('Feature 1 (Standardized)')
plt.ylabel('Feature 2 (Standardized)')
plt.show()
๋ฐ์ํ
'๐ Machine Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ML] Isomap (์์ด์๋งต) (0) | 2024.08.20 |
---|---|
[ML] Principal Component Analysis (PCA - ์ฃผ์ฑ๋ถ ๋ถ์) (0) | 2024.08.18 |
[ML] Hierarchical Clustering (๊ณ์ธต์ ๊ตฐ์ง ๋ถ์) (0) | 2024.08.17 |
[ML] K-Means Clustering (K-ํ๊ท ํด๋ฌ์คํฐ๋ง) (0) | 2024.08.17 |
[ML] Unsupervised Learning (๋น์ง๋ ํ์ต) (0) | 2024.08.16 |