본문 바로가기
AI, 빅데이터/Anomaly Detection

Anomaly Detection_KNN

by Foxy현 2023. 4. 12.
728x90
반응형

 

KNN(K-Nearest Neighbors)은 지도학습의 한 종류로, 분류나 회귀 문제를 해결하는 알고리즘 중 하나입니다. 주어진 데이터셋에서 새로운 데이터 포인트가 어떤 클래스에 속하는지 예측할 때 사용합니다.

 

 

KNN은 거리 기반 분류 모델에 속하며, 주어진 데이터셋에서 가장 가까운 K개의 이웃 데이터를 찾아서 대상 데이터를 분류합니다. 분류 문제에서는 이웃 데이터 포인트들의 클래스 중 가장 빈번한 클래스를 예측값으로 사용하며, 회귀 문제에서는 이웃 데이터 포인트들의 평균값을 예측값으로 사용합니다.

 

PyOD 패키지는 이상탐지(anomaly detection) 알고리즘을 정리한 패키지로, KNN을 포함하여 다양한 이상탐지 알고리즘을 제공합니다. KNN을 이용한 이상탐지는 K개의 이웃 데이터를 사용하여 대상 데이터가 이상치(outlier)인지 아닌지를 판단합니다. 예를 들어, K개의 이웃 데이터 중 대상 데이터와 가장 멀리 떨어져 있는 데이터가 이상치로 판단될 수 있습니다.

 

KNN은 단순하고 효율적인 알고리즘이지만, 모든 데이터를 비교해야 하기 때문에 데이터가 많을수록 처리 시간이 증가하는 단점이 있습니다. 또한 K값을 어떻게 결정하느냐에 따라 결과가 크게 달라질 수 있습니다. 따라서 KNN을 사용할 때는 적절한 K값을 찾는 것이 중요합니다.

 

결론적으로, PyOD 패키지를 사용하여 KNN을 이용한 이상탐지를 수행할 수 있습니다. 이상치 탐지를 위해서는 적절한 K값을 설정하고, 데이터셋을 잘 이해하여 적절한 이상치 탐지 알고리즘을 선택하는 것이 중요합니다.

 

아래는 예시 코드입니다.

 

# 필요한 패키지들을 불러옵니다.
from pyod.utils.example import visualize
from pyod.utils.data import evaluate_print
from pyod.utils.data import generate_data
from pyod.models.knn import KNN

# 이상치 비율, 학습 데이터 개수, 테스트 데이터 개수를 설정합니다.
contamination = 0.1
n_train = 200
n_test = 100

# generate_data 함수를 이용하여 학습 데이터와 테스트 데이터를 생성합니다.
# n_features는 생성할 데이터의 특성 개수를 의미합니다.
# random_state는 데이터 생성에 사용할 시드 값입니다.
X_train, X_test, y_train, y_test = generate_data(
    n_train=n_train,
    n_test=n_test,
    n_features=2,
    contamination=contamination,
    random_state=42
)

# 분류기 이름과 분류기 객체를 설정합니다.
clf_name = 'KNN'
clf = KNN()

# 학습 데이터를 이용하여 분류기를 학습시킵니다.
clf.fit(X_train)

# 학습 데이터와 테스트 데이터에 대해 예측을 수행합니다.
y_train_pred = clf.labels_
y_train_scores = clf.decision_scores_

y_test_pred = clf.predict(X_test)
y_test_scores = clf.decision_function(X_test)

# 학습 데이터와 테스트 데이터에 대한 평가 결과를 출력합니다.
print("On Training Data:")
evaluate_print(clf_name, y_train, y_train_scores)

print("On Test Data:")
evaluate_print(clf_name, y_test, y_test_scores)

# generate_data 함수를 이용하여 생성한 데이터와 예측 결과를 시각화합니다.
# show_figure=True로 설정하면 그래프를 화면에 출력합니다.
# save_figure=True로 설정하면 그래프를 이미지 파일로 저장합니다.
visualize(clf_name,X_train,y_train,X_test,y_test, y_train_pred, y_test_pred, show_figure=True, save_figure=True)

 

 

 

 

 

 

 

728x90
반응형