Menu
CoddyTech

Local Outlier Factor

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

Некоторые необычные точки скрываются в диапазоне данных. Локальный коэффициент выброса, LOF, сравнивает, насколько плотно расположена каждая точка по сравнению с соседними:

Автомобили на крытой парковке: время прибытия по горизонтали, а часы стоянки — по вертикали; пассажирские автомобили плотно сгруппированы около 8:00 и 9 часов стоянки, автомобили покупателей распределены в течение всего дня и стоят по несколько часов, а один автомобиль, прибывший в 8:18 и простоявший 6,6 часа, обведён красным и отмечен LOF

Покупатели иногда задерживаются на 6 часов. Но соседи этой машины — пассажиры, которые ездят на работу, стоят плотно, а она находится далеко от их скопления:

from sklearn.neighbors import LocalOutlierFactor
lof = LocalOutlierFactor(n_neighbors=20, contamination=0.02)
flags = lof.fit_predict(X)

Те же ответы, что и раньше: -1 — выброс, 1 — норма. n_neighbors задаёт локальность сравнения.

challenge icon

Задание

Средне

Телефонная компания ищет аккаунты, отличающиеся от соседних. Стартовый код масштабирует данные и отмечает аккаунты с помощью Isolation Forest; программа считывает k.

  1. Отметьте аккаунты с помощью LOF: n_neighbors=k, contamination=0.03.
  2. Выведите количество аккаунтов, отмеченных каждым детектором, и сколько аккаунтов отмечены обоими.
  3. Перечислите аккаунты, отмеченные только LOF, в порядке таблицы, как показано ниже.

Для небольшой компании и 10:

Isolation forest: 5 accounts
LOF: 5 accounts
Both: 4 accounts
Only LOF:
  A118: 960 minutes, 6.2 GB

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

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor

# Одна строка на каждый телефонный аккаунт: минуты разговоров и объём мобильного трафика за месяц
accounts = pd.read_csv("accounts.csv")
X = StandardScaler().fit_transform(accounts[["call_minutes", "data_gb"]])
k = int(input())

# Результат Isolation Forest: -1 для аккаунтов, которые алгоритм считает аномальными
forest_flags = IsolationForest(contamination=0.03, random_state=0).fit_predict(X)

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

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

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

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