kaggle 노트북 리뷰 04_

~ 이번주 파트인 5단원 서포트 벡터 머신 부분을 읽다보니 발견 한 부분,,


두둥,,!

이상치 탐지는 못참아~~! 하면서 이 주제를 선택하게 되었습니다,,,
~

**Hands On ML 5단원 리뷰와 함께 진행한 노트북 리뷰입니당

**책에서 언급된 scikit learn_Novelty and Outlier Detection 부터 리뷰 합니당

새로운 관측치와 기존 관측치와 동일한 분포에 속하는지(inlier), 다르다고 간주해야하는지(outlier)에 대한 결정

  1. Outlier detection (unsupervised anomaly detection)
    : training data는 다른 관측치와 멀리 떨어진 outlier를 포함. 이에 outlier detection setimator는 비정상적인 관측치를 무시하고 training data가 집중된 지역에 fitting
    → estimator는 이상치가 저밀도 영역에 있다고 가정하기떄문에 밀도있는 클러스터를 형성할 수 없다.

  2. Novelty detection (semi-supervised anomaly detection)
    : training data는 오염되지 않은 상태. 새로운 관측치가 들어왔을때 outlier인지 탐지를 하는데 초점. (여기서 outlier = novelty)
    → training data의 저밀도 영역에 데이터가 있는 경우 밀도있는 클러스터를 형성할 수 있다.

Outlier detection과 Novelty detection은 모두 비정상적인 관측치를 탐지한다는 점에서 Anomaly detection에 사용된다.

One class SVM: One class Classification을 사용하는 대표적인 방법론, 정상 sample들을 둘러싸는 discriminative boundary를 설정하고, 이 boundary를 최대한 좁혀 boundary밖에 있는 sample들을 비정상으로 간주.
(여기에서 확장되어 나온 DL기반 One class Classification방법론을 사용하는 Deep SVDD)

데이터들을 N차원의 좌표축으로 뿌린 후 , 원점과의 거리를 기준으로 선(Hyper Plane)을 그어 Classification하는 것

** 일반 SVM과는 분명한 차이를 가진다

Binary-Classification에 많이 쓰이는 SVM은 각 데이터들 속 Support Vector 간의 Margin을 기준으로 Hyper plane을 나누지만, OCSVM은 원점을 기준으로하기에, 조건에 따라 데이터가 아무리 많아도 Class가 1개일 수 있다!

** DeepSVDD

One class SVM은 원점으로부터의 거리에 존재하는 hyper plane, 즉 평면을 boundary로 두는 반면 SVDD는 hypersphere형태로 boundary를 나누는것

실습코드

data = df[['value', 'hours', 'daylight', 'DayOfTheWeek', 'WeekDay']]
min_max_scaler = preprocessing.StandardScaler()
np_scaled = min_max_scaler.fit_transform(data)
# train one class SVM 
model =  OneClassSVM(nu=0.95 * outliers_fraction) #nu=0.95 * outliers_fraction  + 0.05
data = pd.DataFrame(np_scaled)
model.fit(data)
# add the data to the main  
df['anomaly26'] = pd.Series(model.predict(data))
df['anomaly26'] = df['anomaly26'].map( {1: 0, -1: 1} )
print(df['anomaly26'].value_counts())

Parameters

  • kernel : {‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’}, default=’rbf’

  • gamma : {‘scale’, ‘auto’} or float, default=’scale’

    	‘rbf’, ‘poly’ and ‘sigmoid’의 Kernel coefficient
    
    	if gamma='scale' → uses 1 / (n_features * X.var()) as value of gamma,
    
    	if ‘auto’ → uses 1 / n_features.
  • nu : default=0.5

    	(0,1]구간내에 있어야함
    
    	training errors 비율에 대한 상한과 support vectors 비율에 대한 하한을 의미

좋은 웹페이지 즐겨찾기