안녕하세요! 제리입니다.
이번 참고 자료는 이곳! https://www.youtube.com/watch?v=OmK_GQ40yko&t=2267s
정상 데이터를 최대한 원점에서 멀어지도록 하는 것이 포인트 (hyperplane을 찾는 것이 목표)

최적화 문제에서
w는 regularization을 진행하며 이를 min을 통해 최소화 시켜준다. ==> 모델의 변동성 감소
두번째의 경우 정상 값이 로우보다 가까울 때 패널티를 주는 것으로 정상 데이터는 원점보다 바깥 쪽에 존재하도록 하는 거임 -> 그렇지 않을 경우 패널티 term ==> 조건에 맞지 않을 시 패널티 부여
로우는 원점에서 최대한 멀리 떨어진 hyperplane과의 거리 ==> 결정 경계 예측

4번째 식은 개별적 객체는 원점보다 멀리 있도록 하고 아닐 시 패널티를 줌
5번째 식은 크사이가 항상 0보다 커야하므로 그것에 대한 제약식임





case 1은 흰색, 2는 검은색, 3은 회색
조건에서 알파의 합은 1이여야하므로 알파가 가질 수 있는 최대 값인 1/vl 에서 최소한의 vl 만큼의 support vector가 있어야 된다.
이론은 조금 어렵지만 코드로 보면 svm과 비슷하다고 생각하기에 코드를 보면
https://zephyrus1111.tistory.com/469
import matplotlib.pyplot as plt
plt.rcParams['axes.unicode_minus'] = False
import numpy as np
from sklearn.svm import OneClassSVM as OCS
from sklearn.datasets import make_classification
## 실험용 데이터
X, _ = make_classification(n_samples=1000, n_features=2, n_informative=2,
n_redundant=0, n_repeated=0, n_classes=2,
n_clusters_per_class=1,
weights=[0.995, 0.005],
class_sep=0.5, random_state=100)
ocs = OCS(kernel='rbf', ## 커널 {‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’}
nu=0.1, ## Regularization Parameter
gamma = 'auto' ## rbf의 감마
).fit(X)
outlier_labels = ocs.predict(X) ## -1 이상치, 1 정상 예측하기
fig = plt.figure(figsize=(8, 8))
fig.set_facecolor('white')
ax = fig.add_subplot()
ax.scatter(X[:, 0], X[:, 1], c=outlier_labels)
plt.show()
## 스코어 기반 이상치 재 예측
score = ocs.score_samples(X)
score_threshold = np.percentile(score, 5) ## 하위 5프로
## 하위 5프로 이하인 경우는 모두 이상치로 예측한다.
new_labels = np.array([-1 if i < score_threshold else 1 for i in score])
fig = plt.figure(figsize=(8, 8))
fig.set_facecolor('white')
ax = fig.add_subplot()
ax.scatter(X[:, 0], X[:, 1], c=new_labels)
plt.show()
하이퍼파라미터로 kernel과 nu, gamma 정도로 사용한다.
이상치 기준도 설정해서 기준보다 낮으면 이상치로 예측하여 제거를 시킨다.
이런식으로 임의로 값을 조정해서 사용할 수 있다는 점에서 어떻게 보면 내가 조정할 수 있다는 점이 장점인 거 같다.
'딥러닝' 카테고리의 다른 글
isolation forest에 대해서 (0) | 2023.05.19 |
---|---|
autoencoder에 대해서 - (2) 코드 (0) | 2023.05.19 |
autoencoder에 대해서 - (1) 전체적인 흐름 (0) | 2023.05.19 |
이상탐지 알고리즘 종류에 대해 (1) (0) | 2023.05.18 |