Menu
CoddyTech

Isolation Forest

Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 35 из 51.

Отделить необычные точки легко. Случайным образом делите данные снова и снова, пока одна точка не останется отдельно:

Одна и та же диаграмма рассеяния дважды, разделённая серыми случайными разрезами. Слева: далёкая точка в верхнем углу оказывается отдельно после 2 разрезов. Справа: точке в середине скопления требуется 8 разрезов

Для далёкой точки потребовалось 2 разреза, для точки в плотной области — 8. Лес изоляции усредняет число разрезов по 100 случайным деревьям:

from sklearn.ensemble import IsolationForest
forest = IsolationForest(contamination=0.02, random_state=0)
flags = forest.fit_predict(X)

fit_predict возвращает -1 для необычных строк, 1 — для остальных. contamination — это доля строк, которые, как вы ожидаете, будут необычными.

challenge icon

Задание

Средне

В порту зарегистрировали 160 смен крана: число перемещений в час и расход энергии на перемещение. Какие смены были необычными?

  1. Отметь смены с помощью Isolation Forest, contamination=0.03, random_state=0. Выведи количество, как показано ниже.
  2. Отобрази обычные смены точками с меткой normal.
  3. Обведи отмеченные смены: s=150, facecolors="none", edgecolors="red", с меткой flagged. Добавь легенду и покажи график.

Для другого порта, где было 200 смен:

Flagged: 6 of 200 shifts

Смены кранов показаны точками в виде нисходящего облака: более быстрые краны расходуют меньше энергии на перемещение, а шесть отдельных смен обведены вокруг него красным; есть легенда

Затем Coddy опишет твой график.

Попробуйте сами

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest

# Одна строка на каждую смену портового крана: скорость работы и энергопотребление
shifts = pd.read_csv("cranes.csv")
X = shifts[["moves_per_hour", "kwh_per_move"]]

# Не изменяйте строки ниже
fig, ax = plt.subplots()
ax.set_title("Crane Shifts")
ax.set_xlabel("Moves per hour")
ax.set_ylabel("Energy per move (kWh)")

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение без учителя

Потренируйтесь самостоятельно: Онлайн-компилятор Python