[이탐] 결정 경계 기반 이상탐지 알고리즘

의서쿠·2024년 5월 14일
1

Anomaly-Detection

목록 보기
6/6
post-thumbnail

결정 경계 기반 이상탐지

결정 경계 기반 알고리즘은 데이터의 분포를 학습하여 명확한 경계를 형성하고, 이 경계를 벗어나는 점들을 이상치로 간주합니다.

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): 이 추정기의 파라미터를 설정합니다.
    • 예시:

      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은 주로 정상 데이터를 학습하여 경계를 형성하고, 이 경계를 벗어나는 데이터를 이상치로 분류하는 데 효과적입니다.

profile
Always be passionate ✨

0개의 댓글