Введение
В этом практическом занятии мы будем проводить обнаружение выбросов на реальном наборе данных с использованием scikit-learn. Обнаружение выбросов - это процесс идентификации точек данных, которые значительно отличаются от большинства данных. Выбросы могут быть вызваны ошибками измерения, повреждением данных или просто представляют собой редкое событие. Обнаружение выбросов имеет важное значение в многих приложениях, таких как обнаружение мошенничества, обнаружение сетевых вторжений и медицинская диагностика.
Советы по использованию ВМ
После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импортируем библиотеки и загружаем датасет
Начнем с импорта необходимых библиотек и загрузки датасета Wine из scikit-learn. Датасет Wine содержит информацию о различных видах вина, включая их химические свойства.
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
## Load dataset
X1 = load_wine()["data"][:, [1, 2]] ## two clusters
X2 = load_wine()["data"][:, [6, 9]] ## "banana"-shaped
Определяем классификаторы и цвета
Мы определим классификаторы обнаружения выбросов, которые будем использовать в этом практическом занятии. Также определим цвета, которые будут использоваться для построения графиков результатов.
## Define "classifiers" to be used
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"]
Обнаружение выбросов в двумерных данных
Мы будем проводить обнаружение выбросов на двумерном датасете Wine. Для обнаружения выбросов мы будем использовать три различных классификатора: Эмпирическая ковариация, Прочная ковариация и Одно-классовая SVM. Затем мы построим графики результатов.
## Learn a frontier for outlier detection with several classifiers
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]
)
## Plot the results (= shape of the data points cloud)
plt.figure(1) ## two clusters
plt.title("Outlier detection on a real data set (wine recognition)")
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()
Обнаружение выбросов в сложных данных
Мы будем проводить обнаружение выбросов на датасете Wine, имеющем форму "бананы". Мы будем использовать те же три классификатора, что и ранее, и построим графики результатов.
## Learn a frontier for outlier detection with several classifiers
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]
)
## Plot the results (= shape of the data points cloud)
plt.figure(2) ## "banana" shape
plt.title("Outlier detection on a real data set (wine recognition)")
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()
Резюме
В этом практическом занятии мы провели обнаружение выбросов на двумерных датасетах Wine с использованием scikit-learn. Для обнаружения выбросов мы использовали три различных классификатора: Эмпирическую ковариацию, Прочную ковариацию и Одно-классовую SVM. Затем мы построили графики результатов, чтобы визуализировать данные и обнаруженные выбросы. Обнаружение выбросов является важной задачей в анализе данных, и scikit-learn предоставляет несколько инструментов для эффективного выполнения этой задачи.