소개
이 실습에서는 scikit-learn 을 사용하여 실제 데이터 세트에서 이상치 탐지 (outlier detection) 를 수행합니다. 이상치 탐지는 대부분의 데이터와 상당히 다른 데이터 포인트를 식별하는 과정입니다. 이상치는 측정 오류, 데이터 손상 또는 단순히 드문 사건을 나타낼 수 있습니다. 이상치 탐지는 사기 탐지, 네트워크 침입 탐지 및 의료 진단과 같은 많은 응용 분야에서 중요합니다.
VM 팁
VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근합니다.
때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.
학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.
라이브러리 가져오기 및 데이터셋 로드
필요한 라이브러리를 가져오고 scikit-learn 의 와인 데이터셋을 로드하여 시작하겠습니다. 와인 데이터셋에는 다양한 종류의 와인에 대한 정보, 즉 화학적 특성이 포함되어 있습니다.
import numpy as np
from sklearn.covariance import EllipticEnvelope
from sklearn.svm import OneClassSVM
import matplotlib.pyplot as plt
from sklearn.datasets import load_wine
## 데이터셋 로드
X1 = load_wine()["data"][:, [1, 2]] ## 두 개의 클러스터
X2 = load_wine()["data"][:, [6, 9]] ## "바나나" 모양
분류기 및 색상 정의
이 실습에서 사용할 이상치 탐지 분류기를 정의하고 결과를 시각화하는 데 사용할 색상도 정의합니다.
## 사용할 "분류기" 정의
classifiers = {
"Empirical Covariance": EllipticEnvelope(support_fraction=1.0, contamination=0.25),
"Robust Covariance (Minimum Covariance Determinant)": EllipticEnvelope(
contamination=0.25
),
"OCSVM": OneClassSVM(nu=0.25, gamma=0.35),
}
colors = ["m", "g", "b"]
이차원 데이터에서 이상치 탐지
이차원 와인 데이터셋에서 이상치 탐지를 수행합니다. 이상치를 탐지하기 위해 Empirical Covariance, Robust Covariance, 그리고 One-Class SVM 의 세 가지 다른 분류기를 사용하고, 그 결과를 시각화합니다.
## 여러 분류기를 사용하여 이상치 탐지 경계 학습
xx1, yy1 = np.meshgrid(np.linspace(0, 6, 500), np.linspace(1, 4.5, 500))
for i, (clf_name, clf) in enumerate(classifiers.items()):
plt.figure(1)
clf.fit(X1)
Z1 = clf.decision_function(np.c_[xx1.ravel(), yy1.ravel()])
Z1 = Z1.reshape(xx1.shape)
plt.contour(
xx1, yy1, Z1, levels=[0], linewidths=2, colors=colors[i]
)
## 결과 플롯 (= 데이터 포인트 클라우드의 모양)
plt.figure(1) ## 두 개의 클러스터
plt.title("실제 데이터셋 (와인 인식) 에서 이상치 탐지")
plt.scatter(X1[:, 0], X1[:, 1], color="black")
plt.xlim((xx1.min(), xx1.max()))
plt.ylim((yy1.min(), yy1.max()))
plt.ylabel("ash")
plt.xlabel("malic_acid")
plt.show()
복잡한 데이터에서 이상치 탐지
"바나나" 모양의 와인 데이터셋에서 이상치 탐지를 수행합니다. 이전과 같은 세 가지 분류기를 사용하여 결과를 시각화합니다.
## 여러 분류기를 사용하여 이상치 탐지 경계 학습
xx2, yy2 = np.meshgrid(np.linspace(-1, 5.5, 500), np.linspace(-2.5, 19, 500))
for i, (clf_name, clf) in enumerate(classifiers.items()):
plt.figure(2)
clf.fit(X2)
Z2 = clf.decision_function(np.c_[xx2.ravel(), yy2.ravel()])
Z2 = Z2.reshape(xx2.shape)
plt.contour(
xx2, yy2, Z2, levels=[0], linewidths=2, colors=colors[i]
)
## 결과 플롯 (= 데이터 포인트 클라우드의 모양)
plt.figure(2) ## "바나나" 모양
plt.title("실제 데이터셋 (와인 인식) 에서 이상치 탐지")
plt.scatter(X2[:, 0], X2[:, 1], color="black")
plt.xlim((xx2.min(), xx2.max()))
plt.ylim((yy2.min(), yy2.max()))
plt.ylabel("color_intensity")
plt.xlabel("flavanoids")
plt.show()
요약
이 실험에서는 scikit-learn 을 사용하여 이차원 와인 데이터셋에서 이상치 탐지를 수행했습니다. 이상치를 탐지하기 위해 Empirical Covariance, Robust Covariance, 그리고 One-Class SVM 의 세 가지 다른 분류기를 사용했습니다. 그런 다음 결과를 시각화하여 데이터와 탐지된 이상치를 보여주는 플롯을 생성했습니다. 이상치 탐지는 데이터 분석에서 중요한 작업이며, scikit-learn 은 이 작업을 효율적으로 수행할 수 있는 여러 도구를 제공합니다.