Menu
CoddyTech

Local Outlier Factor

Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 36 di 51.

Alcuni punti anomali si nascondono nell'intervallo dei dati. Il fattore di anomalia locale, LOF, confronta quanto è affollata la zona di ciascun punto con quelle dei suoi vicini:

Auto in un parcheggio multipiano, orario di arrivo sull'asse orizzontale e ore di sosta sull'asse verticale: i pendolari sono concentrati tra le 8:00 e le 9 ore, gli acquirenti sono distribuiti nell'arco della giornata per qualche ora e un'auto arrivata alle 8:18 e parcheggiata per 6.6 ore è cerchiata in rosso, segnalata da LOF

A volte gli acquirenti restano per 6 ore. Ma i vicini di questa auto sono pendolari, ammassati, e si trova lontano dal loro gruppo:

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

Stesse risposte di prima: -1 anomalo, 1 normale. n_neighbors determina quanto è locale il confronto.

challenge icon

Sfida

Medio

Un'azienda telefonica cerca account diversi dai loro vicini. Il codice iniziale ridimensiona i dati e segnala gli account con una foresta di isolamento; il programma legge k.

  1. Segnala gli account con LOF: n_neighbors=k, contamination=0.03.
  2. Stampa il conteggio di ciascun rilevatore e quanti account vengono segnalati da entrambi.
  3. Elenca gli account segnalati solo da LOF, nell'ordine della tabella, come sotto.

Per un'azienda più piccola e 10:

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

Provalo tu

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

# Una fila por cuenta telefónica: minutos de llamadas y datos móviles de un mes
accounts = pd.read_csv("accounts.csv")
X = StandardScaler().fit_transform(accounts[["call_minutes", "data_gb"]])
k = int(input())

# De Isolation Forest: -1 para las cuentas que el bosque considera anómalas
forest_flags = IsolationForest(contamination=0.03, random_state=0).fit_predict(X)

# Escribe tu código a continuación
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento non supervisionato

Esercitati da solo: Compilatore Python online