[ AI / ML ] ๋จธ์ ๋ฌ๋ - ๊ตฐ์งํ (Clustering)
๐ฉ๐ปโ๐ป K-MOOC ์ค์ต์ผ๋ก ๋ฐฐ์ฐ๋ ๋จธ์ ๋ฌ๋ ๊ฐ์
๐ ํด๋น ํฌ์คํธ๋ K-MOOC ๊ฐ์ ๋ด์ฉ๊ณผ ์ถ๊ฐ๋ก ๋ค๋ฅธ ์๋ฃ๋ค์ ์ฐพ์ ๋ด์ฉ์ ์์ฑํ์์ผ๋ฉฐ, ์ด๋ก ๋ฐ ๊ฐ๋ ์ ๋ํด ๊ณต๋ถํ๊ณ ์์ ์ค์ต๋ ์งํํ ํ ๋ด์ฉ์ ์ ๋ฆฌํ์๋ค.
[ AI ] ์ธ๊ณต์ง๋ฅ๊ณผ ๋จธ์ ๋ฌ๋, ๊ทธ๋ฆฌ๊ณ ๋ฅ๋ฌ๋์ ๊ฐ์ ๋ ์์ฑ๋ ํฌ์คํธ์ด๋ค.
1. ๊ตฐ์งํ Clustering
์ ์ฌํ ์์ฑ๋ค์ ๊ฐ๋ ๊ด์ธก์น๋ฅผ ๋ฌถ์ด ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ช ๊ฐ์ ๊ตฐ์ง (๊ทธ๋ฃน) ์ผ๋ก ๋๋๋ ๊ฒ์ ๊ตฐ์งํ๋ผ ํ๋ค.
- ๊ตฐ์งํ ๊ธฐ์ค
- ๊ตฐ์ง ๋ด ์ ์ฌ๋ ์ต๋ํ
- ๋์ผํ ๊ตฐ์ง์ ์ํ ๊ด์ธก์น๋ค์ ์๋ก ์ ์ฌํ ์๋ก ์ข์
- ๊ตฐ์ง ๊ฐ ์ ์ฌ๋ ์ต์ํ
- ์์ดํ ๊ตฐ์ง์ ์ํ ๊ด์ธก์น๋ค์ ์๋ก ๋ค๋ฅผ์๋ก ์ข์
- ๊ตฐ์ง ๋ด ์ ์ฌ๋ ์ต๋ํ
2. ๋ถ๋ฅ์ ๊ตฐ์งํ๋ ์ด๋ป๊ฒ ๋ค๋ฅผ๊น?
- ๋ถ๋ฅ Classification
- ์ฌ์ ์ ์๋ ๋ฒ์ฃผ๊ฐ ์๋ labeled data๋ก๋ถํฐ ์์ธก ๋ชจ๋ธ์ ํ์ตํ๋ ๋ฌธ์
- Supervised Learning (์ง๋ ํ์ต)
- ๊ตฐ์งํ Clustering
- ์ฌ์ ์ ์๋ ๋ฒ์ฃผ๊ฐ ์๋ unlabeled data์์ ์ต์ ์ ๊ทธ๋ฃน์ ์ฐพ์๋๊ฐ๋ ๋ฌธ์
- Unsupervised Learning (๋น์ง๋ ํ์ต)
3. ๊ตฐ์งํ ํ์ฉ Application
๊ตฐ์งํ๋ ํนํ ์ธ๋ถํ Segmentation์์ ํ์ฉ๋๋ค.
- E-commerce
- ์จ๋ผ์ธ ์ผํ๋ชฐ
- ๊ณ ๊ฐ ํน์ ์ ํ์ผ๋ก ๋ถ๋ฅ โก๏ธ ๋ง์ถค ์๋น์ค ์ ๊ณต
- ์๋ก์ด ๊ณ ๊ฐ ์ ํ ๋ฐ๊ฒฌ โก๏ธ ๋ง์ผํ ์ ๋ต์ ํ์ฉ
- ์จ๋ผ์ธ ์ผํ๋ชฐ
-
์ ์ฌ ๋ฌธ์ ๊ตฐ์งํ
-
์์ธ์ ์ค์กด ๋๋์ ํจํด ๊ตฐ์งํ (25๊ฐ ๊ตฌ)
- Tracking
- ์ด๋ฏธ์ง / ์์
- Anomaly detection
- ์ด์๊ฒ์ถ
- ์ ์กฐ / ๋ฌผ๋ฅ ๋ถ์ผ
- ๋ฐ๋์ฒด ์จ์ดํผ์ fail bit map ๊ตฐ์งํ
4. ๊ตฐ์งํ ์๊ณ ๋ฆฌ์ฆ Clustering Algorithm
- K-Means (Centroid)
- Hierarchical
- DBSCAN (๋ฐ๋)
โ๏ธ K-Means (Centroid)
K-Means๋ ๊ตฐ์ง ์ค์ฌ์ Centroid ๊ธฐ๋ฐ์ ํด๋ฌ์คํฐ๋ง ์ค ํ๋๋ก, ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ์ฝ๊ณ ๋ง์ด ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์๋ฅผ ๋ค์ด, A,B,C,D,E,F ์ ๊ฐ์ด 5๊ฐ์ ๋ฐ์ดํฐ ์ธํธ๊ฐ ์ฃผ์ด์ง๊ณ 2๊ฐ์ ๊ตฐ์ง์ ํ์ฑ์ํค๊ณ ์ถ๋ค.
- ๋จผ์ ์์์ 2๊ฐ ๊ฒ์์ Centroid๋ฅผ ๋ง๋ ๋ค.
- ๊ฐ A,B,C,D,E ๋ฐ์ดํฐ๋ 2๊ฐ์ Centroid์์ ๊ฑฐ๋ฆฌ๋ฅผ ํ์ธํ ๋ค์, ๊ฐ๊น์ด Centroid์ ์์์ด ๋๋ค.
- ์์์ด ๊ฒฐ์ ๋๋ฉด ๊ฐ ๋ฐ์ดํฐ์ ์ค์ฌ ๊ณต๊ฐ์ผ๋ก Centrod๋ค์ด ์ด๋ํ๋ค.
- ๋ค์ A,B,C,D,E ๋ฐ์ดํฐ๋ค์ ๊ฐ Centroid์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ์ฌ ๊ฐ๊น์ด Centroid์ ์์์ด ๋๋ค.(3๋ฒ์งธ๊ทธ๋ฆผ)
- C๋ฐ์ดํฐ๋ ์ ๊ณผ ๋ค๋ฅด๊ฒ ๋ค๋ฅธ Centroid์ ์์์ด ๋๊ฒ์ ํ์ธํ ์ ์๋ค.(4๋ฒ์งธ ๊ทธ๋ฆผ)
- ๊ฐ Centroid๋ ๋ค์ ์์ ์ ์ํ ๋ฐ์ดํฐ๋ค์ ์ค์ฌ์ผ๋ก ์ด๋ํ๊ฒ ๋๊ณ , ๋์ด์ ๊ฐ ๋ฐ์ดํฐ๋ค์ด Centroid ์์์ด ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ฉด ์ข ๋ฃ๋๋ค. (Elbow point)
์ฅ์
- ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ํ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๊ฐ์ฅ ์ฝ๊ณ ๊ฐ๊ฒฐํ๋ค.
- ๋์ฉ๋ ๋ฐ์ดํฐ์์๋ ํ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๋จ์
- ๊ฑฐ๋ฆฌ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์์ฑ ๊ฐ์๊ฐ ๋ง์ผ๋ฉด ๊ตฐ์งํ ์ ํ๋๊ฐ ๋จ์ด์ง๋ฉฐ, PCA๋ก ์ฐจ์ ์ถ์๋ฅผ ์งํํ ์ ์๋ค.
- ๋ฐ๋ณตํ์๊ฐ ๋ง์์ง ๊ฒฝ์ฐ ์ํ์๊ฐ์ด ๋๋ ค์ง๊ณ , ์ด์์น (outlier) ์ ๋ฏผ๊ฐํ๋ค.
โ๏ธ Hierarchical Clustering
๊ณ์ธต์ ๊ตฐ์งํ Hierarchical Clustering ๋ ์ฌ๋ฌ๊ฐ์ ๊ตฐ์ง ์ค์์ ๊ฐ์ฅ ์ ์ฌ๋๊ฐ ๋์ ํน์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๊น์ด ๊ตฐ์ง ๋ ๊ฐ๋ฅผ ์ ํํ์ฌ ํ๋๋ก ํฉ์น๋ฉด์ ๊ตฐ์ง ๊ฐ์๋ฅผ ์ค์ฌ ๊ฐ๋ ๋ฐฉ๋ฒ์ ๋งํ๋ค. ๋ค๋ฅธ ๋ง๋ก ํฉ์ฒด ๊ตฐ์งํ(agglomerative clustering)์ด๋ผ๊ณ ๋ถ๋ฆฌ๊ธฐ๋ ํ๋ค.
๐ค ๊ตฐ์ง๊ฐ์ ๊ฑฐ๋ฆฌ ์ธก์
๊ณ์ธก์ ๊ตฐ์งํ๋ฅผ ํ๋ ค๋ฉด ์ฐ์ ๋ชจ๋ ๊ตฐ์ง ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํด์ผ ํ๋ค. ๊ตฐ์ง ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ๋ ๋ฐฉ๋ฒ์๋ ๊ณ์ธต์ ๋ฐฉ๋ฒ์ ์์กดํ์ง ์๋ ๋น๊ณ์ธต์ ๋ฐฉ๋ฒ๊ณผ ์ด๋ฏธ ์ด์ ๋จ๊ณ์์ ๊ณ์ธต์ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฐ์ง์ด ํฉ์ณ์ง ์ ์ธ ์๋ค๋ ๊ฐ์ ์ ํ๋ ๊ณ์ธต์ ๋ฐฉ๋ฒ ๋ ๊ฐ์ง๊ฐ ์๋ค.
1. ๋น๊ณ์ธต์ ๊ฑฐ๋ฆฌ ์ธก์ ๋ฒ
๋น๊ณ์ธต์ ๊ฑฐ๋ฆฌ ์ธก์ ๋ฒ์ ๊ณ์ธต์ ๊ตฐ์งํ๊ฐ ์๋๋๋ผ๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์๋ ๊ฑฐ๋ฆฌ ์ธก์ ๋ฐฉ๋ฒ์ด๋ค. ์ค์ฌ / ๋จ์ผ / ์์ / ํ๊ท ๊ฑฐ๋ฆฌ ๋ฑ์ด ์๊ณ , ๊ณ์ธต์ ๊ฑฐ๋ฆฌ ์ธก์ ๋ฒ์ ๋นํด ๊ณ์ฐ๋์ด ๋ง์ ๋จ์ ์ด ์๋ค.
2. ๊ณ์ธต์ ๊ฑฐ๋ฆฌ ์ธก์ ๋ฒ
๊ณ์ธต์ ๊ฑฐ๋ฆฌ ์ธก์ ๋ฒ์ ๊ณ์ธต์ ๊ตฐ์งํ์์๋ง ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค. ์ฆ, ์ด์ ๋จ๊ณ์์ ์ด๋ฏธ ์ด๋ค ๋ ๊ฐ์ ๊ตฐ์ง์ด ํ๋๋ก ํฉ์ณ์ง ์ ์ด ์๋ค๊ณ ๊ฐ์ ํ์ฌ ์ด ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ ์ธก์ ๋ฒ์ด๋ค. ๋น๊ณ์ธต์ ๊ฑฐ๋ฆฌ ์ธก์ ๋ฒ์ ๋นํด ๊ณ์ฐ๋์ด ์ ์ด ํจ์จ์ ์ด๋ค.
โ๏ธ DBSCAN Density-Based Spatial Clustering of Applications with Noise
K-Means ๊ตฐ์งํ ๋ฐฉ๋ฒ์ ๋จ์ํ๊ณ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ด์ง๋ง ๊ตฐ์ง์ ๋ชจ์์ด ์ํ์ด ์๋ ๊ฒฝ์ฐ์๋ ์ ๋์ํ์ง ์์ผ๋ฉฐ, ์ฌ์ฉ์๊ฐ ๊ตฐ์ง์ ๊ฐ์๋ฅผ ์ง์ ํด์ฃผ์ด์ผ ํ๋ค๋ ๋จ์ ์ด ์๋ค.
DBSCAN ๊ตฐ์งํ ๋ฐฉ๋ฒ์ ๋ฐ์ดํฐ๊ฐ ๋ฐ์งํ ์ ๋ ์ฆ ๋ฐ๋๋ฅผ ์ด์ฉํ๋ค. DBSCAN ๊ตฐ์งํ๋ ๊ตฐ์ง์ ํํ์ ๊ตฌ์ ๋ฐ์ง ์์ผ๋ฉฐ ๊ตฐ์ง์ ๊ฐฏ์๋ฅผ ์ฌ์ฉ์๊ฐ ์ง์ ํ ํ์๊ฐ ์๋ค. ๋๋น์ค์บ ๊ตฐ์งํ ๋ฐฉ๋ฒ์์๋ ์ด๊ธฐ ๋ฐ์ดํฐ๋ก๋ถํฐ ๊ทผ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๋๊ฐ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฐ์ง์ ํ์ฅํ๋ค.
5. ๊ตฐ์งํ ๊ฒฐ๊ณผ ์ธก์ ๋ฐ ํ๊ฐ
- SSE Sum of Squared Error
- ์์
- ๊ทธ๋ํ
-
Silhouette
โก๏ธ
- a(i)
- ๊ด์ธก์น i๋ก๋ถํฐ ๊ฐ์ ๊ตฐ์ง ๋ด์ ์๋ ๋ชจ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ค ์ฌ์ด์ ํ๊ท ๊ฑฐ๋ฆฌ
- b(i)
- ๊ด์ธก์น i๋ก๋ถํฐ ๋ค๋ฅธ ๊ตฐ์ง ๋ด์ ์๋ ๊ฐ์ฒด๋ค ์ฌ์ด์ ํ๊ท ๊ฑฐ๋ฆฌ ์ค ์ต์๊ฐ
- ์ผ๋ฐ์ ์ผ๋ก 0.5๋ณด๋ค ํฌ๋ฉด ๊ตฐ์ง ๊ฒฐ๊ณผ๊ฐ ํ๋นํ๋ค๊ณ ๋ณผ ์ ์์
- a(i)
๐ป ์ค์ต ์์ ์ฝ๋
๋ค์์ ๋ช ๊ฐ์ง ์์ ๋ฐ์ดํฐ์ ๋ํด ์์์ ๋์ดํ ๊ตฐ์งํ ๋ฐฉ๋ฒ์ ์ ์ฉํ ๊ฒฐ๊ณผ์ด๋ค. ๊ฐ์ ์์์ ๋ฐ์ดํฐ๋ ๊ฐ์ ๊ตฐ์ง๋ก ๋ถ๋ฅ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆผ์์๋ ๋ณผ ์ ์์ง๋ง ๊ฐ ๊ตฐ์งํ ๋ฐฉ๋ฒ๋ง๋ค ํน์ฑ์ด ๋ค๋ฅด๋ฏ๋ก ์ํ๋ ๋ชฉ์ ๊ณผ ๋ฐ์ดํฐ ์ ํ์ ๋ง๊ฒ ์ฌ์ฉํด์ผ ํ๋ค.
from sklearn.datasets import *
from sklearn.cluster import *
from sklearn.preprocessing import StandardScaler
from sklearn.utils._testing import ignore_warnings
np.random.seed(0)
n_samples = 1500
blobs = make_blobs(n_samples=n_samples, random_state=8)
X, y = make_blobs(n_samples=n_samples, random_state=170)
anisotropic = (np.dot(X, [[0.6, -0.6], [-0.4, 0.8]]), y)
varied = make_blobs(n_samples=n_samples, cluster_std=[1.0, 2.5, 0.5], random_state=170)
noisy_circles = make_circles(n_samples=n_samples, factor=.5, noise=.05)
noisy_moons = make_moons(n_samples=n_samples, noise=.05)
no_structure = np.random.rand(n_samples, 2), None
datasets = {
"๊ฐ์ ํฌ๊ธฐ์ ์ํ": blobs,
"๊ฐ์ ํฌ๊ธฐ์ ํ์ํ": anisotropic,
"๋ค๋ฅธ ํฌ๊ธฐ์ ์ํ": varied,
"์ด์น๋ฌ": noisy_moons,
"๋์ฌ์": noisy_circles,
"๋น๊ตฌ์กฐํ": no_structure
}
plt.figure(figsize=(11, 11))
plot_num = 1
for i, (data_name, (X, y)) in enumerate(datasets.items()):
if data_name in ["์ด์น๋ฌ", "๋์ฌ์"]:
n_clusters = 2
else:
n_clusters = 3
X = StandardScaler().fit_transform(X)
two_means = MiniBatchKMeans(n_clusters=n_clusters)
dbscan = DBSCAN(eps=0.15)
spectral = SpectralClustering(n_clusters=n_clusters, affinity="nearest_neighbors")
ward = AgglomerativeClustering(n_clusters=n_clusters)
affinity_propagation = AffinityPropagation(damping=0.9, preference=-200)
clustering_algorithms = (
('K-Means', two_means),
('DBSCAN', dbscan),
('Hierarchical Clustering', ward),
('Affinity Propagation', affinity_propagation),
('Spectral Clustering', spectral),
)
for j, (name, algorithm) in enumerate(clustering_algorithms):
with ignore_warnings(category=UserWarning):
algorithm.fit(X)
if hasattr(algorithm, 'labels_'):
y_pred = algorithm.labels_.astype(np.int)
else:
y_pred = algorithm.predict(X)
plt.subplot(len(datasets), len(clustering_algorithms), plot_num)
if i == 0:
plt.title(name)
if j == 0:
plt.ylabel(data_name)
colors = plt.cm.tab10(np.arange(20, dtype=int))
plt.scatter(X[:, 0], X[:, 1], s=5, color=colors[y_pred])
plt.xlim(-2.5, 2.5)
plt.ylim(-2.5, 2.5)
plt.xticks(())
plt.yticks(())
plot_num += 1
plt.tight_layout()
plt.show()
๋ง๋ฌด๋ฆฌํ๋ฉด์..
๋ค์ ํฌ์คํธ์์ ๋ง๋์ ๐
๋ค์ ํฌ์คํธ์์๋ ํด๋น ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ค์ต์ ํด๋ณผ ์์ ์ด๋ค.
์ฐธ๊ณ
Related Posts
TIL | PCA (Principal Component Analysis) ๋? | |
TIL | AI - ML - DL | ์ธ๊ณต์ง๋ฅ, ๋จธ์ ๋ฌ๋, ๋ฅ๋ฌ๋ |
๐ You need to log in to GitHub to write comments. ๐
If you can't see comments, please refresh page(F5).