결정 경계 기반 알고리즘은 데이터의 분포를 학습하여 명확한 경계를 형성하고, 이 경계를 벗어나는 점들을 이상치로 간주합니다.
링크: https://scikit-learn.org/stable/modules/generated/sklearn.svm.OneClassSVM.html
정의: One-Class SVM(OCSVM)은 데이터의 분포를 학습하여 결정 경계를 형성하고, 이 경계를 벗어나는 점들을 이상치로 간주하는 비지도 학습 기반 이상치 탐지 알고리즘입니다.
적합한 데이터: 주로 정상 데이터만으로 학습하고, 이상치의 비율이 매우 낮거나 알려지지 않은 경우에 적합합니다. 특히 고차원 데이터 분포의 경계를 찾는 데 유용합니다.
sklearn 함수: sklearn.svm.OneClassSVM
함수 설명:
매개변수:
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은 주로 정상 데이터를 학습하여 경계를 형성하고, 이 경계를 벗어나는 데이터를 이상치로 분류하는 데 효과적입니다.