[์ดํ] ๋ฐ๋ ๊ธฐ๋ฐ ์ด์ํ์ง ์๊ณ ๋ฆฌ์ฆ
์๋ณธ ๊ฒ์๊ธ: https://velog.io/@euisuk-chung/๋ฐ๋-๊ธฐ๋ฐ-์ด์ํ์ง-์๊ณ ๋ฆฌ์ฆ
๋ฐ๋ ๊ธฐ๋ฐ ์ด์ํ์ง
๋ฐ๋ ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ
์ ๋ฐ์ดํฐ ํฌ์ธํธ ๊ฐ์ ์ง์ญ์ ๋ฐ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด์์น๋ฅผ ํ์งํฉ๋๋ค. ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ์ดํฐ ๋ถํฌ๊ฐ ๋ถ๊ท ์ผํ ๊ฒฝ์ฐ์๋ ์ ์๋ํ ์ ์์ต๋๋ค.
DBSCAN
- ๋งํฌ: https://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html
- ์ ์: ๋ฐ์ดํฐ ํฌ์ธํธ๊ฐ ๋ฐ์งํ ์์ญ์ ๊ธฐ๋ฐ์ผ๋ก ํด๋ฌ์คํฐ๋ฅผ ํ์ฑํ๊ณ , ์ฃผ์ด์ง ๊ฑฐ๋ฆฌ ๋ด์์ ์ถฉ๋ถํ ์์ ์ด์์ ๊ฐ์ง ๋ชปํ ์ ๋ค์ ์ด์์น๋ก ๊ฐ์ฃผํฉ๋๋ค.
- ์ ํฉํ ๋ฐ์ดํฐ: ๋ฐ๋ ๋ณํ๊ฐ ์ฌํ๊ฑฐ๋ ๋ถ๊ท ์ผํ ๋ฐ์ดํฐ ๋ถํฌ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ์ ์ ์ ํฉํฉ๋๋ค.
-
sklearn ํจ์:
sklearn.cluster.DBSCAN
-
ํจ์ ์ค๋ช :
- DBSCAN์ โDensity-Based Spatial Clustering of Applications with Noiseโ์ ์ฝ์๋ก, ๋์ ๋ฐ๋๋ฅผ ๊ฐ์ง ํต์ฌ ์ํ์ ์ฐพ๊ณ ์ด๋ฅผ ํ์ฅํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ํ์ฑํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ ์ฌํ ๋ฐ๋๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ ํฌ์ธํธ์ ํด๋ฌ์คํฐ๋ฅผ ์๋ณํ๋ ๋ฐ ํนํ ์ ์ฉํฉ๋๋ค.
- ์ด ์๊ณ ๋ฆฌ์ฆ์ ํนํ ๋ฐ์ดํฐ์ ์ก์์ด ๋ง์ ๊ฒฝ์ฐ์๋ ๊ฐ๋ ฅํ๋ฉฐ, ํด๋ฌ์คํฐ์ ํํ์ ํฌ๊ธฐ์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ํจ๊ณผ์ ์ผ๋ก ์๋ํฉ๋๋ค.
-
๋งค๊ฐ๋ณ์:
eps
(float, default=0.5): ์ด ๋งค๊ฐ๋ณ์๋ ํ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ํต์ฌ ํฌ์ธํธ๋ก ๊ณ ๋ คํ๊ธฐ ์ํด ํ์ํ ์ต๋ ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ํฉ๋๋ค. ์ ์ ํ eps ๊ฐ์ ์ ํํ๋ ๊ฒ์ด ๊ฒฐ๊ณผ์ ํ์ง์ ๊ฒฐ์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.min_samples
(int, default=5): ํต์ฌ ํฌ์ธํธ๊ฐ ๋๊ธฐ ์ํด ํ์ํ ์ด์์ ์ต์ ์์ ๋๋ค. ์ด ๊ฐ์ด ๋์์๋ก ๋ ์กฐ๋ฐํ ํด๋ฌ์คํฐ๋ฅผ ํ์ฑํ๊ฒ ๋ฉ๋๋ค.metric
(str or callable, default=โeuclideanโ): ์ธ์คํด์ค ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ ๋ ์ฌ์ฉ๋๋ ๋ฉํธ๋ฆญ์ ๋๋ค.algorithm
(str, default=โautoโ): ์ด์์ ์ฐพ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก โautoโ, โball_treeโ, โkd_treeโ, โbruteโ๊ฐ ์์ต๋๋ค.
-
์์ฑ:
core_sample_indices_
: ํต์ฌ ์ํ์ ์ธ๋ฑ์ค ๋ฐฐ์ด์ ๋๋ค.components_
: ํต์ฌ ์ํ์ ์ค์ ๊ฐ ๋ฐฐ์ด์ ๋๋ค.labels_
: ๊ฐ ๋ฐ์ดํฐ ํฌ์ธํธ์ ํ ๋น๋ ํด๋ฌ์คํฐ ๋ผ๋ฒจ ๋ฐฐ์ด์ ๋๋ค. ์ก์ ํฌ์ธํธ๋ -1 ๋ผ๋ฒจ์ ๋ฐ์ต๋๋ค.
-
๋ฉ์๋:
fit(X[, y, sample_weight])
: ํน์ง ๋๋ ๊ฑฐ๋ฆฌ ํ๋ ฌ๋ก๋ถํฐ DBSCAN ํด๋ฌ์คํฐ๋ง์ ์ํํฉ๋๋ค.fit_predict(X[, y, sample_weight])
: ๋ฐ์ดํฐ ๋๋ ๊ฑฐ๋ฆฌ ํ๋ ฌ๋ก๋ถํฐ ํด๋ฌ์คํฐ๋ฅผ ๊ณ์ฐํ๊ณ ๋ ์ด๋ธ์ ์์ธกํฉ๋๋ค.get_metadata_routing()
: ์ด ๊ฐ์ฒด์ ๋ฉํ๋ฐ์ดํฐ ๋ผ์ฐํ ์ ๊ฐ์ ธ์ต๋๋ค.get_params([deep])
: ์ด ์ถ์ ๊ธฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.set_fit_request(*[, sample_weight])
: fit ๋ฉ์๋์ ์ ๋ฌ๋ ๋ฉํ๋ฐ์ดํฐ ์์ฒญ์ ์ค์ ํฉ๋๋ค.set_params(**params)
: ์ด ์ถ์ ๊ธฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํฉ๋๋ค.
-
์์:
1 2 3 4 5 6 7 8 9 10 11 12
from sklearn.cluster import DBSCAN import numpy as np # ์์ ๋ฐ์ดํฐ X = np.array([[1, 2], [2, 2], [2, 3], [8, 7], [8, 8], [25, 80]]) # DBSCAN ๋ชจ๋ธ ์์ฑ ๋ฐ ์ ํฉ clustering = DBSCAN(eps=3, min_samples=2).fit(X) # ํด๋ฌ์คํฐ ๋ผ๋ฒจ ์ถ๋ ฅ print(clustering.labels_)
-
โ๏ธ ์ด ์์ ๋ DBSCAN์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ๋ฐ์ดํฐ์ ์ ๋ํ ํด๋ฌ์คํฐ๋ง์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. DBSCAN์ ํ๋ผ๋ฏธํฐ ์ค์ ์ ๋ฐ๋ผ ๋งค์ฐ ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํด๋ฌ์คํฐ๋งํ ์ ์์ผ๋ฉฐ, ํนํ ๋น์ ํ์ ์ด๊ณ ๋ณต์กํ ๊ตฌ์กฐ์์ ๊ฐ๋ ฅํ ์ฑ๋ฅ์ ๋ฐํํฉ๋๋ค.
LOF (Local Outlier Factor)
- ๋งํฌ: https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.LocalOutlierFactor.html
- ์ ์: LOF(Local Outlier Factor)๋ ์ฃผ์ด์ง ๋ฐ์ดํฐ ํฌ์ธํธ์ ๋ฐ๋์ ๊ทธ ์ฃผ๋ณ ์ด์์ ๋ฐ๋๋ฅผ ๋น๊ตํ์ฌ ์๋์ ์ผ๋ก ๋ฐ๋๊ฐ ๋ฎ์ ํฌ์ธํธ๋ฅผ ์ด์์น๋ก ๊ฐ์ฃผํ๋ ์ด์์น ํ์ง ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ ๋ฐ์ดํฐ ํฌ์ธํธ์ ์ง์ญ ๋ฐ๋ ํธ์ฐจ๋ฅผ ์ธก์ ํ์ฌ ์ด์์น ์ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ์ ํฉํ ๋ฐ์ดํฐ: ๋ฐ๋๊ฐ ๋ถ๊ท ์ผํ ๋ฐ์ดํฐ ๋ถํฌ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ์ ์์, ํนํ ๋ฐ์ดํฐ์ ์ง์ญ์ ๋ฐ๋ ์ฐจ์ด๋ฅผ ํ์ฉํ์ฌ ์ด์์น๋ฅผ ํ์งํ๋๋ฐ ์ ํฉํฉ๋๋ค.
-
sklearn ํจ์:
sklearn.neighbors.LocalOutlierFactor
-
ํจ์ ์ค๋ช :
- LOF๋ โLocal Outlier Factorโ์ ์ฝ์๋ก, ๋ฐ์ดํฐ ํฌ์ธํธ์ ์ง์ญ ๋ฐ๋๋ฅผ ํ๊ฐํ์ฌ ์ด์์น๋ฅผ ํ์งํฉ๋๋ค. ์ด๋ ์ฃผ์ด์ง ํฌ์ธํธ๊ฐ ์ฃผ๋ณ ์ด์์ ๋นํด ์ผ๋ง๋ ๊ณ ๋ฆฝ๋์ด ์๋์ง๋ฅผ ์ธก์ ํฉ๋๋ค.
- ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ์ดํฐ์ ๋ฐ๋ ๊ธฐ๋ฐ ์ด์์น๋ฅผ ํ์งํ๋๋ฐ ๊ฐ๋ ฅํ๋ฉฐ, ํนํ ๋ฐ์ดํฐ ๋ถํฌ๊ฐ ๊ท ์ผํ์ง ์์ ๊ฒฝ์ฐ์ ํจ๊ณผ์ ์ ๋๋ค.
-
๋งค๊ฐ๋ณ์:
n_neighbors
(int, default=20): k-์ด์ ์๊ณ ๋ฆฌ์ฆ์์ ์ฌ์ฉํ ์ด์์ ์๋ฅผ ์ ์ํฉ๋๋ค. ์ด ๊ฐ์ ์ง์ญ ๋ฐ๋ ๊ณ์ฐ์ ์ค์ํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.algorithm
(str, default=โautoโ): ์ด์์ ์ฐพ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก โautoโ, โball_treeโ, โkd_treeโ, โbruteโ๊ฐ ์์ต๋๋ค.leaf_size
(int, default=30): BallTree๋ KDTree์์ ์ฌ์ฉ๋๋ ๋ฆฌํ์ ํฌ๊ธฐ์ ๋๋ค. ์ด๋ ํธ๋ฆฌ ๊ตฌ์ถ๊ณผ ์ฟผ๋ฆฌ ์๋์ ์ํฅ์ ์ค๋๋ค.metric
(str or callable, default=โminkowskiโ): ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ ์ฌ์ฉ๋๋ ๋ฉํธ๋ฆญ์ผ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก Minkowski ๊ฑฐ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.p
(float, default=2): Minkowski ๋ฉํธ๋ฆญ์์ ์ฌ์ฉํ ํ๋ผ๋ฏธํฐ์ ๋๋ค. p=2๋ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ, p=1์ ๋งจํดํผ ๊ฑฐ๋ฆฌ๋ฅผ ์๋ฏธํฉ๋๋ค.metric_params
(dict, default=None): ๋ฉํธ๋ฆญ ํจ์์ ๋ํ ์ถ๊ฐ ๋งค๊ฐ๋ณ์์ ๋๋ค.contamination
(โautoโ or float, default=โautoโ): ๋ฐ์ดํฐ์ ์์ ์ด์์น์ ๋น์จ์ ์ง์ ํฉ๋๋ค. โautoโ๋ ์ ๋ ผ๋ฌธ์์ ์ ์๋ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.novelty
(bool, default=False): True๋ก ์ค์ ํ๋ฉด ์๋ก์ด ๋ฐ์ดํฐ์ ๋ํด ์ด์์น๋ฅผ ํ์งํ๋๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.n_jobs
(int, default=None): ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ์ฌ์ฉํ CPU ์ฝ์ด ์๋ฅผ ์ง์ ํฉ๋๋ค. -1๋ก ์ค์ ํ๋ฉด ๋ชจ๋ ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-
์์ฑ:
negative_outlier_factor_
: ํ๋ จ ์ํ์ ๋ฐ๋ LOF ๊ฐ์ ๋ํ๋ด๋ ๋ฐฐ์ด์ ๋๋ค. ๊ฐ์ด ๋์์๋ก ์ ์์ ๊ฐ๊น์ต๋๋ค.n_neighbors_
: ์ค์ ๋ก ์ฌ์ฉ๋ ์ด์์ ์์ ๋๋ค.offset_
: ์ด์์น ํ์ง๋ฅผ ์ํ ๊ธฐ์ค ์คํ์ ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก -1.5๋ก ์ค์ ๋ฉ๋๋ค.effective_metric_
: ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ ์ฌ์ฉ๋ ๋ฉํธ๋ฆญ์ ๋๋ค.effective_metric_params_
: ๋ฉํธ๋ฆญ ํจ์์ ์ถ๊ฐ ๋งค๊ฐ๋ณ์์ ๋๋ค.n_features_in_
: ํ๋ จ ์ค์ ๋ณธ ํน์ฑ์ ์์ ๋๋ค.feature_names_in_
: ํ๋ จ ์ค์ ๋ณธ ํน์ฑ ์ด๋ฆ ๋ฐฐ์ด์ ๋๋ค.n_samples_fit_
: ํ๋ จ ๋ฐ์ดํฐ์ ์ํ ์์ ๋๋ค.
-
๋ฉ์๋:
decision_function(X)
: ์ฃผ์ด์ง ๋ฐ์ดํฐ X์ Local Outlier Factor(LOF)์ ๋ฐ๋๊ฐ์ ๋ณํํ์ฌ ๋ฐํํฉ๋๋ค.fit(X[, y])
: ํ๋ จ ๋ฐ์ดํฐ์ ์์ LOF(Local Outlier Factor) ํ์ง๊ธฐ๋ฅผ ํ์ต์ํต๋๋ค.fit_predict(X[, y])
: ํ๋ จ ๋ฐ์ดํฐ์ X์ ๋ชจ๋ธ์ ์ ํฉ์ํค๊ณ ๋ ์ด๋ธ์ ๋ฐํํฉ๋๋ค.get_metadata_routing()
: ์ด ๊ฐ์ฒด์ ๋ฉํ๋ฐ์ดํฐ ๋ผ์ฐํ ์ ๊ฐ์ ธ์ต๋๋ค.get_params([deep])
: ์ด ์ถ์ ๊ธฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.kneighbors([X, n_neighbors, return_distance])
: ํน์ ํฌ์ธํธ์ K-์ด์์ ์ฐพ์ต๋๋ค.kneighbors_graph([X, n_neighbors, mode])
: ๋ฐ์ดํฐ ํฌ์ธํธ์ ๋ํ K-์ด์ ๊ทธ๋ํ(๊ฐ์ค์น ํฌํจ)๋ฅผ ๊ณ์ฐํฉ๋๋ค.predict([X])
: LOF๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฃผ์ด์ง ๋ฐ์ดํฐ X์ ๋ ์ด๋ธ(์ ์: 1, ์ด์์น: -1)์ ์์ธกํฉ๋๋ค.score_samples(X)
: ์ฃผ์ด์ง ๋ฐ์ดํฐ X์ Local Outlier Factor(LOF)์ ๋ฐ๋๊ฐ์ ๋ฐํํฉ๋๋ค.set_params(**params)
: ์ด ์ถ์ ๊ธฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํฉ๋๋ค.
-
์์:
1 2 3 4 5 6 7 8 9 10 11 12
from sklearn.neighbors import LocalOutlierFactor import numpy as np # ์์ ๋ฐ์ดํฐ X = [[-1.1], [0.2], [101.1], [0.3]] # LOF ๋ชจ๋ธ ์์ฑ ๋ฐ ์ ํฉ clf = LocalOutlierFactor(n_neighbors=2) y_pred = clf.fit_predict(X) # ์ด์์น ์ ์ ์ถ๋ ฅ print(clf.negative_outlier_factor_)
-
โ๏ธ ์ด ์์ ๋ LocalOutlierFactor๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ๋ฐ์ดํฐ์ ์ ๋ํ ์ด์์น ํ์ง๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. LOF๋ ์ฃผ๋ณ ์ด์๊ณผ์ ๋ฐ๋ ๋น๊ต๋ฅผ ํตํด ์ด์์น๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์๋ณํ ์ ์์ผ๋ฉฐ, ํนํ ๋ฐ๋ ๊ธฐ๋ฐ ํด๋ฌ์คํฐ๋ง์์ ๊ฐ๋ ฅํ ์ฑ๋ฅ์ ๋ฐํํฉ๋๋ค.