[์ดํ] ์์๋ธ ๊ธฐ๋ฐ ์ด์ํ์ง ์๊ณ ๋ฆฌ์ฆ
์๋ณธ ๊ฒ์๊ธ: https://velog.io/@euisuk-chung/์์๋ธ-๊ธฐ๋ฐ-์ด์ํ์ง-์๊ณ ๋ฆฌ์ฆ-zdwnxkcu
์์๋ธ ๊ธฐ๋ฐ ์ด์ํ์ง
์์๋ธ ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๋ฌ ๊ฐ์ ์์ฌ๊ฒฐ์ ๊ธฐ๋ฐ ๋ชจ๋ธ์ ์กฐํฉํ์ฌ ์ด์์น๋ฅผ ํ์งํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋์ ์ ํ๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
Isolation Forest
- ๋งํฌ: https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html
- ์ ์: Isolation Forest๋ ์์ฌ๊ฒฐ์ ํธ๋ฆฌ์ ์์๋ธ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๊ณ , ์ ์์ ์ธ ๋ฐ์ดํฐ ํฌ์ธํธ๋ณด๋ค ์ด์์น๋ฅผ ๋ ๋น ๋ฅด๊ฒ โ๊ณ ๋ฆฝโ์ํต๋๋ค. ๊ฐ ์ํ์ด ๊ณ ๋ฆฝ๋๋ ๋ฐ ํ์ํ ๋ถํ ํ์(๊ฒฝ๋ก ๊ธธ์ด)๋ฅผ ์ธก์ ํ์ฌ ์ด์์น ์ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ์ ํฉํ ๋ฐ์ดํฐ: ๋ค์ํ ์ ํ์ ์ด์์น๋ฅผ ๋น ๋ฅด๊ฒ ์๋ณํ ์ ์์ด ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์์ ํจ๊ณผ์ ์ด๋ฉฐ, ๋ฐ์ดํฐ์ ๋ถํฌ๊ฐ ๋ถ๊ท ์ผํ๊ฑฐ๋ ๋ค์ฐจ์์ผ ๋ ์ ์ฉํฉ๋๋ค.
-
sklearn ํจ์:
sklearn.ensemble.IsolationForest
-
ํจ์ ์ค๋ช :
- Isolation Forest๋ ๋ฌด์์๋ก ํน์ฑ์ ์ ํํ๊ณ ๊ทธ ํน์ฑ์ ์์์ ๋ถํ ๊ฐ์ ์ ํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๋ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค. ์ด๋ฌํ ๋ถํ ๊ณผ์ ์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ํํ๋ ์ ์์ผ๋ฉฐ, ์ํ์ ๊ณ ๋ฆฝ์ํค๋ ๋ฐ ํ์ํ ๋ถํ ํ์๋ ๋ฃจํธ ๋ ธ๋์์ ๋จ๋ง ๋ ธ๋๊น์ง์ ๊ฒฝ๋ก ๊ธธ์ด์ ํด๋นํฉ๋๋ค.
- ๊ฒฝ๋ก ๊ธธ์ด๋ ๋ฐ์ดํฐ ํฌ์ธํธ์ ์ ์์ฑ์ ์ธก์ ํ๋ ์ฒ๋๋ก ์ฌ์ฉ๋๋ฉฐ, ์งง์ ๊ฒฝ๋ก ๊ธธ์ด๋ฅผ ๊ฐ์ง๋ ์ํ์ ์ด์์น์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
-
๋งค๊ฐ๋ณ์:
n_estimators
(int, default=100): ์์๋ธ์ ์ฌ์ฉํ ๊ธฐ๋ณธ ์ถ์ ๊ธฐ(ํธ๋ฆฌ)์ ์์ ๋๋ค.max_samples
(str, int or float, default=โautoโ): ๊ฐ ๊ธฐ๋ณธ ์ถ์ ๊ธฐ๋ฅผ ํ์ตํ ๋ ์ฌ์ฉํ ์ํ์ ์์ ๋๋ค. โautoโ๋ min(256, n_samples)๋ก ์ค์ ๋ฉ๋๋ค.contamination
(str or float, default=โautoโ): ๋ฐ์ดํฐ์ ์ ์ด์์น ๋น์จ์ ๋ํ๋ ๋๋ค. โautoโ๋ ์ ๋ ผ๋ฌธ์์ ์ ์๋ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.max_features
(int or float, default=1.0): ๊ฐ ๊ธฐ๋ณธ ์ถ์ ๊ธฐ๋ฅผ ํ์ตํ ๋ ์ฌ์ฉํ ํน์ฑ์ ์์ ๋๋ค.bootstrap
(bool, default=False): True๋ก ์ค์ ํ๋ฉด ๋ถํธ์คํธ๋ฉ ์ํ๋ง์ ์ฌ์ฉํฉ๋๋ค.n_jobs
(int, default=None): ๋ณ๋ ฌ๋ก ์คํํ ์์ ์ ์๋ฅผ ์ง์ ํฉ๋๋ค. -1๋ก ์ค์ ํ๋ฉด ๋ชจ๋ ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.random_state
(int, RandomState instance or None, default=None): ๋์ ์์ฑ์ ์ ์ดํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ฌํ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.verbose
(int, default=0): ํ์ต ๊ณผ์ ์ ์งํ ์ํฉ์ ์ถ๋ ฅํฉ๋๋ค.warm_start
(bool, default=False): True๋ก ์ค์ ํ๋ฉด ์ด์ ํธ์ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ด๊ธฐํ์ ์ฌ์ฉํ์ฌ ๋ ๋ง์ ์ถ์ ๊ธฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
-
์์ฑ:
estimators_
: ํ์ต๋ ์ถ์ ๊ธฐ์ ๋ฆฌ์คํธ์ ๋๋ค.estimators_features_
: ๊ฐ ์ถ์ ๊ธฐ์ ๋ํด ์ ํ๋ ํน์ฑ์ ๋ถ๋ถ ์งํฉ์ ๋๋ค.estimators_samples_
: ๊ฐ ์ถ์ ๊ธฐ์ ๋ํด ์ ํ๋ ์ํ์ ๋ถ๋ถ ์งํฉ์ ๋๋ค.max_samples_
: ์ค์ ์ฌ์ฉ๋ ์ํ์ ์์ ๋๋ค.offset_
: ์ ์ ์์์ ๊ฒฐ์ ํจ์๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์คํ์ ์ ๋๋ค.n_features_in_
: fit ๋์ ๋ณธ ํน์ฑ์ ์์ ๋๋ค.feature_names_in_
: fit ๋์ ๋ณธ ํน์ฑ ์ด๋ฆ ๋ฐฐ์ด์ ๋๋ค.
-
๋ฉ์๋:
decision_function(X)
: ๊ธฐ๋ณธ ๋ถ๋ฅ๊ธฐ์ ํ๊ท ์ด์์น ์ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.fit(X[, y, sample_weight])
: ์ถ์ ๊ธฐ๋ฅผ ํ์ต์ํต๋๋ค.fit_predict(X[, y])
: ๋ฐ์ดํฐ๋ฅผ ํ์ตํ๊ณ ํด๋น ๋ฐ์ดํฐ์ ๋ํ ๋ ์ด๋ธ์ ๋ฐํํฉ๋๋ค.get_metadata_routing()
: ์ด ๊ฐ์ฒด์ ๋ฉํ๋ฐ์ดํฐ ๋ผ์ฐํ ์ ๊ฐ์ ธ์ต๋๋ค.get_params([deep])
: ์ด ์ถ์ ๊ธฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.predict(X)
: ํน์ ์ํ์ด ์ด์์น์ธ์ง ์ฌ๋ถ๋ฅผ ์์ธกํฉ๋๋ค.score_samples(X)
: ์ ๋ ผ๋ฌธ์์ ์ ์๋ ์ด์์น ์ ์์ ๋ฐ๋๋ฅผ ๊ณ์ฐํฉ๋๋ค.set_fit_request(*[, sample_weight])
: fit ๋ฉ์๋์ ์ ๋ฌ๋ ๋ฉํ๋ฐ์ดํฐ ์์ฒญ์ ์ค์ ํฉ๋๋ค.set_params(**params)
: ์ด ์ถ์ ๊ธฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํฉ๋๋ค.
-
์์:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
from sklearn.ensemble import IsolationForest import numpy as np # ์์ ๋ฐ์ดํฐ X = [[-1.1], [0.3], [0.5], [100]] # Isolation Forest ๋ชจ๋ธ ์์ฑ ๋ฐ ์ ํฉ clf = IsolationForest(random_state=0).fit(X) # ์์ธก ๋ผ๋ฒจ ์ถ๋ ฅ print(clf.predict([[0.1], [0], [90]])) # ๊ฐ ์ํ์ ์ ์ ์ถ๋ ฅ print(clf.score_samples(X))
-
โ๏ธ ์ด ์์ ๋ Isolation Forest๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ๋ฐ์ดํฐ์ ์ ๋ํ ์ด์์น ํ์ง๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. Isolation Forest๋ ๊ณ ์ฐจ์ ๋ฐ์ดํฐ์์ ํจ๊ณผ์ ์ผ๋ก ์ด์์น๋ฅผ ํ์งํ๋ฉฐ, ํนํ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์์ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ๋์ํฉ๋๋ค.