[์ดํ] ๊ฒฐ์ ๊ฒฝ๊ณ ๊ธฐ๋ฐ ์ด์ํ์ง ์๊ณ ๋ฆฌ์ฆ
์๋ณธ ๊ฒ์๊ธ: https://velog.io/@euisuk-chung/๊ฒฐ์ -๊ฒฝ๊ณ-๊ธฐ๋ฐ-์ด์ํ์ง-์๊ณ ๋ฆฌ์ฆ
๊ฒฐ์ ๊ฒฝ๊ณ ๊ธฐ๋ฐ ์ด์ํ์ง
๊ฒฐ์ ๊ฒฝ๊ณ ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ์ดํฐ์ ๋ถํฌ๋ฅผ ํ์ตํ์ฌ ๋ช ํํ ๊ฒฝ๊ณ๋ฅผ ํ์ฑํ๊ณ , ์ด ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋๋ ์ ๋ค์ ์ด์์น๋ก ๊ฐ์ฃผํฉ๋๋ค.
OCSVM (One-Class SVM)
- ๋งํฌ: https://scikit-learn.org/stable/modules/generated/sklearn.svm.OneClassSVM.html
- ์ ์: One-Class SVM(OCSVM)์ ๋ฐ์ดํฐ์ ๋ถํฌ๋ฅผ ํ์ตํ์ฌ ๊ฒฐ์ ๊ฒฝ๊ณ๋ฅผ ํ์ฑํ๊ณ , ์ด ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋๋ ์ ๋ค์ ์ด์์น๋ก ๊ฐ์ฃผํ๋ ๋น์ง๋ ํ์ต ๊ธฐ๋ฐ ์ด์์น ํ์ง ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
- ์ ํฉํ ๋ฐ์ดํฐ: ์ฃผ๋ก ์ ์ ๋ฐ์ดํฐ๋ง์ผ๋ก ํ์ตํ๊ณ , ์ด์์น์ ๋น์จ์ด ๋งค์ฐ ๋ฎ๊ฑฐ๋ ์๋ ค์ง์ง ์์ ๊ฒฝ์ฐ์ ์ ํฉํฉ๋๋ค. ํนํ ๊ณ ์ฐจ์ ๋ฐ์ดํฐ ๋ถํฌ์ ๊ฒฝ๊ณ๋ฅผ ์ฐพ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
-
sklearn ํจ์:
sklearn.svm.OneClassSVM
-
ํจ์ ์ค๋ช :
- OneClassSVM์ ๊ณ ์ฐจ์ ๋ถํฌ์ ์ง์ง๋ฅผ ์ถ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋น์ง๋ ํ์ต ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ์ฃผ๋ก ์ ์ ๋ฐ์ดํฐ๋ก ํ์ตํ์ฌ ๊ฒฝ๊ณ๋ฅผ ํ์ฑํ๊ณ , ์ด ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋๋ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ์ด์์น๋ก ํ๋ณํฉ๋๋ค.
- ์ด ๊ตฌํ์ libsvm์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ๋ค์ํ ์ปค๋ ํจ์์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค.
-
๋งค๊ฐ๋ณ์:
kernel
(str, default=โrbfโ): ์๊ณ ๋ฆฌ์ฆ์์ ์ฌ์ฉํ ์ปค๋ ํ์ ์ ์ง์ ํฉ๋๋ค. โlinearโ, โpolyโ, โrbfโ, โsigmoidโ, โprecomputedโ ์ค ์ ํํ ์ ์์ต๋๋ค.degree
(int, default=3): ๋คํญ์ ์ปค๋(โpolyโ) ํจ์์ ์ฐจ์์ ๋๋ค. ๋ค๋ฅธ ์ปค๋์๋ ๋ฌด์๋ฉ๋๋ค.gamma
(str or float, default=โscaleโ): โrbfโ, โpolyโ, โsigmoidโ ์ปค๋์ ๊ณ์์ ๋๋ค. โscaleโ์ 1 / (n_features * X.var()), โautoโ๋ 1 / n_features๋ฅผ ์ฌ์ฉํฉ๋๋ค.coef0
(float, default=0.0): โpolyโ์ โsigmoidโ ์ปค๋ ํจ์์ ๋ ๋ฆฝํญ์ ๋๋ค.tol
(float, default=1e-3): ์ ์ง ๊ธฐ์ค์ ๋ํ ํ์ฉ ์ค์ฐจ์ ๋๋ค.nu
(float, default=0.5): ํ๋ จ ์ค๋ฅ์ ๋น์จ ์ํ ๋ฐ ์ํฌํธ ๋ฒกํฐ์ ๋น์จ ํํ์ ๋๋ค. (0, 1] ๊ตฌ๊ฐ์ด์ด์ผ ํฉ๋๋ค.shrinking
(bool, default=True): ์์ถ ํด๋ฆฌ์คํฑ์ ์ฌ์ฉํ ์ง ์ฌ๋ถ์ ๋๋ค.cache_size
(float, default=200): ์ปค๋ ์บ์ ํฌ๊ธฐ(MB)์ ๋๋ค.verbose
(bool, default=False): ์์ธํ ์ถ๋ ฅ์ ํ์ฑํํฉ๋๋ค.max_iter
(int, default=-1): ์๋ฒ ๋ด์์์ ์ต๋ ๋ฐ๋ณต ํ์์ ๋๋ค. -1์ ์ ํ์ด ์์์ ์๋ฏธํฉ๋๋ค.
-
์์ฑ:
support_
: ์ํฌํธ ๋ฒกํฐ์ ์ธ๋ฑ์ค ๋ฐฐ์ด์ ๋๋ค.support_vectors_
: ์ํฌํธ ๋ฒกํฐ ๋ฐฐ์ด์ ๋๋ค.dual_coef_
: ๊ฒฐ์ ํจ์์์ ์ํฌํธ ๋ฒกํฐ์ ๊ณ์์ ๋๋ค.coef_
: ์ปค๋์ด โlinearโ์ผ ๋ ํน์ฑ์ ํ ๋น๋ ๊ฐ์ค์น ๋ฐฐ์ด์ ๋๋ค.intercept_
: ๊ฒฐ์ ํจ์์ ์์ํญ์ ๋๋ค.n_features_in_
: fit ๋์ ๋ณธ ํน์ฑ ์์ ๋๋ค.feature_names_in_
: fit ๋์ ๋ณธ ํน์ฑ ์ด๋ฆ ๋ฐฐ์ด์ ๋๋ค.n_iter_
: ๋ชจ๋ธ์ ๋ง์ถ๊ธฐ ์ํด ์คํ๋ ๋ฐ๋ณต ํ์์ ๋๋ค.offset_
: raw ์ ์์์ ๊ฒฐ์ ํจ์๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์คํ์ ์ ๋๋ค.
-
๋ฉ์๋:
decision_function(X)
: ๋ถ๋ฆฌ ์ดํ๋ฉด๊น์ง์ ์๋ช ๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํฉ๋๋ค.fit(X[, y, sample_weight])
: ์ํ ์งํฉ X์ ์ํํธ ๊ฒฝ๊ณ๋ฅผ ๊ฐ์งํฉ๋๋ค.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.svm import OneClassSVM import numpy as np # ์์ ๋ฐ์ดํฐ X = [[0], [0.44], [0.45], [0.46], [1]] # OCSVM ๋ชจ๋ธ ์์ฑ ๋ฐ ์ ํฉ clf = OneClassSVM(gamma='auto').fit(X) # ์์ธก ๋ผ๋ฒจ ์ถ๋ ฅ print(clf.predict(X)) # ๊ฐ ์ํ์ ์ ์ ์ถ๋ ฅ print(clf.score_samples(X))
-
โ๏ธ ์ด ์์ ๋ OneClassSVM์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ๋ฐ์ดํฐ์ ์ ๋ํ ์ด์์น ํ์ง๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. OCSVM์ ์ฃผ๋ก ์ ์ ๋ฐ์ดํฐ๋ฅผ ํ์ตํ์ฌ ๊ฒฝ๊ณ๋ฅผ ํ์ฑํ๊ณ , ์ด ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋๋ ๋ฐ์ดํฐ๋ฅผ ์ด์์น๋ก ๋ถ๋ฅํ๋ ๋ฐ ํจ๊ณผ์ ์ ๋๋ค.