Scikit Learn - Rilevamento delle anomalie
Qui impareremo cos'è il rilevamento delle anomalie in Sklearn e come viene utilizzato nell'identificazione dei punti dati.
Il rilevamento delle anomalie è una tecnica utilizzata per identificare i punti dati nel set di dati che non si adattano bene al resto dei dati. Ha molte applicazioni nel business come il rilevamento delle frodi, il rilevamento delle intrusioni, il monitoraggio dell'integrità del sistema, la sorveglianza e la manutenzione predittiva. Le anomalie, chiamate anche valori anomali, possono essere suddivise nelle seguenti tre categorie:
Point anomalies - Si verifica quando una singola istanza di dati è considerata anomala rispetto al resto dei dati.
Contextual anomalies- Questo tipo di anomalia dipende dal contesto. Si verifica se un'istanza di dati è anomala in un contesto specifico.
Collective anomalies - Si verifica quando una raccolta di istanze di dati correlate è anomala rispetto all'intero set di dati anziché ai singoli valori.
Metodi
Due metodi vale a dire outlier detection e novelty detectionpuò essere utilizzato per il rilevamento di anomalie. È necessario vedere la distinzione tra loro.
Rilevamento dei valori anomali
I dati di addestramento contengono valori anomali lontani dal resto dei dati. Tali valori anomali sono definiti come osservazioni. Questo è il motivo per cui gli stimatori del rilevamento dei valori anomali cercano sempre di adattare la regione con i dati di addestramento più concentrati ignorando le osservazioni devianti. È anche noto come rilevamento delle anomalie senza supervisione.
Rilevamento di novità
Si occupa di rilevare un modello non osservato nelle nuove osservazioni che non è incluso nei dati di addestramento. Qui, i dati di allenamento non sono inquinati dai valori anomali. È anche noto come rilevamento di anomalie semi-supervisionato.
Esistono set di strumenti ML, forniti da scikit-learn, che possono essere utilizzati sia per il rilevamento dei valori anomali che per il rilevamento delle novità. Questi strumenti implementano prima l'apprendimento degli oggetti dai dati in modo non supervisionato utilizzando il metodo fit () come segue:
estimator.fit(X_train)
Ora, le nuove osservazioni verranno ordinate come inliers (labeled 1) o outliers (labeled -1) utilizzando il metodo forecast () come segue:
estimator.fit(X_test)
Lo stimatore calcolerà prima la funzione di punteggio grezzo e quindi il metodo di previsione utilizzerà la soglia su quella funzione di punteggio grezzo. Possiamo accedere a questa funzione di punteggio grezzo con l'aiuto discore_sample metodo e può controllare la soglia di contamination parametro.
Possiamo anche definire decision_function metodo che definisce valori anomali come valore negativo e valori anomali come valore non negativo.
estimator.decision_function(X_test)
Sklearn algoritmi per il rilevamento dei valori anomali
Cominciamo col capire cos'è un involucro ellittico.
Adatta a un involucro ellittico
Questo algoritmo presume che i dati regolari provengano da una distribuzione nota come la distribuzione gaussiana. Per il rilevamento dei valori anomali, Scikit-learn fornisce un oggetto denominatocovariance.EllipticEnvelop.
Questo oggetto adatta una stima robusta della covarianza ai dati e, quindi, un'ellisse ai punti dati centrali. Ignora i punti al di fuori della modalità centrale.
Parametri
La tabella seguente è composta dai parametri utilizzati da sklearn. covariance.EllipticEnvelop metodo -
Suor n | Parametro e descrizione |
---|---|
1 | store_precision - Booleano, opzionale, predefinito = True Possiamo specificarlo se viene memorizzata la precisione stimata. |
2 | assume_centered - Booleano, opzionale, predefinito = False Se lo impostiamo su False, calcolerà la posizione robusta e la covarianza direttamente con l'aiuto dell'algoritmo FastMCD. D'altra parte, se impostato su True, calcolerà il supporto di posizione robusta e covariante. |
3 | support_fraction - float in (0., 1.), opzionale, default = Nessuno Questo parametro indica al metodo la quantità di punti da includere nel supporto delle stime MCD non elaborate. |
4 | contamination - float in (0., 1.), opzionale, default = 0.1 Fornisce la proporzione dei valori anomali nel set di dati. |
5 | random_state - int, istanza RandomState o None, opzionale, default = nessuno Questo parametro rappresenta il seme del numero pseudo casuale generato che viene utilizzato durante la mescolanza dei dati. Le seguenti sono le opzioni:
|
Attributi
La tabella seguente è costituita dagli attributi utilizzati da sklearn. covariance.EllipticEnvelop metodo -
Suor n | Attributi e descrizione |
---|---|
1 | support_ - tipo array, forma (n_samples,) Rappresenta la maschera delle osservazioni utilizzate per calcolare stime robuste di posizione e forma. |
2 | location_ - tipo array, forma (n_features) Restituisce la posizione robusta stimata. |
3 | covariance_ - tipo array, forma (n_features, n_features) Restituisce la matrice di covarianza robusta stimata. |
4 | precision_ - tipo array, forma (n_features, n_features) Restituisce la matrice pseudo inversa stimata. |
5 | offset_ - galleggiante Viene utilizzato per definire la funzione decisionale dai punteggi grezzi. decision_function = score_samples -offset_ |
Implementation Example
import numpy as np^M
from sklearn.covariance import EllipticEnvelope^M
true_cov = np.array([[.5, .6],[.6, .4]])
X = np.random.RandomState(0).multivariate_normal(mean = [0, 0], cov=true_cov,size=500)
cov = EllipticEnvelope(random_state = 0).fit(X)^M
# Now we can use predict method. It will return 1 for an inlier and -1 for an outlier.
cov.predict([[0, 0],[2, 2]])
Output
array([ 1, -1])
Foresta di isolamento
In caso di set di dati ad alta dimensione, un modo efficiente per il rilevamento dei valori anomali consiste nell'utilizzare foreste casuali. Lo scikit-learn fornisceensemble.IsolationForestmetodo che isola le osservazioni selezionando casualmente una caratteristica. Successivamente, seleziona in modo casuale un valore compreso tra i valori massimo e minimo delle caratteristiche selezionate.
In questo caso, il numero di suddivisioni necessarie per isolare un campione è equivalente alla lunghezza del percorso dal nodo radice al nodo terminale.
Parametri
La tabella seguente è costituita dai parametri utilizzati da sklearn. ensemble.IsolationForest metodo -
Suor n | Parametro e descrizione |
---|---|
1 | n_estimators - int, opzionale, default = 100 Rappresenta il numero di stimatori di base nell'insieme. |
2 | max_samples - int o float, opzionale, default = "auto" Rappresenta il numero di campioni da estrarre da X per addestrare ogni stimatore di base. Se scegliamo int come valore, disegnerà max_samples campioni. Se scegliamo float come suo valore, disegnerà max_samples ∗ .shape [0] samples. E, se scegliamo auto come valore, disegnerà max_samples = min (256, n_samples). |
3 | support_fraction - float in (0., 1.), opzionale, default = Nessuno Questo parametro indica al metodo la quantità di punti da includere nel supporto delle stime MCD non elaborate. |
4 | contamination - auto o float, opzionale, default = auto Fornisce la proporzione dei valori anomali nel set di dati. Se lo impostiamo come predefinito, cioè auto, determinerà la soglia come nella carta originale. Se impostato su float, l'intervallo di contaminazione sarà nell'intervallo [0,0.5]. |
5 | random_state - int, istanza RandomState o None, opzionale, default = nessuno Questo parametro rappresenta il seme del numero pseudo casuale generato che viene utilizzato durante la mescolanza dei dati. Le seguenti sono le opzioni:
|
6 | max_features - int o float, opzionale (default = 1.0) Rappresenta il numero di caratteristiche da trarre da X per addestrare ogni stimatore di base. Se scegliamo int come suo valore, disegnerà max_features caratteristiche. Se scegliamo float come valore, disegnerà max_features * X.shape [] samples. |
7 | bootstrap - Booleano, opzionale (default = False) La sua opzione predefinita è False, il che significa che il campionamento verrà eseguito senza sostituzione. E d'altra parte, se impostato su True, significa che i singoli alberi si adattano a un sottoinsieme casuale dei dati di addestramento campionati con la sostituzione. |
8 | n_jobs - int o None, opzionale (default = None) Rappresenta il numero di lavori per cui eseguire in parallelo fit() e predict() metodi entrambi. |
9 | verbose - int, opzionale (default = 0) Questo parametro controlla la verbosità del processo di creazione dell'albero. |
10 | warm_start - Bool, opzionale (default = False) Se warm_start = true, possiamo riutilizzare la soluzione delle chiamate precedenti per adattarla e aggiungere più stimatori all'insieme. Ma se è impostato su false, dobbiamo adattare una foresta completamente nuova. |
Attributi
La tabella seguente è costituita dagli attributi utilizzati da sklearn. ensemble.IsolationForest metodo -
Suor n | Attributi e descrizione |
---|---|
1 | estimators_ - elenco di DecisionTreeClassifier Fornire la raccolta di tutti i sub-stimatori adattati. |
2 | max_samples_ - intero Fornisce il numero effettivo di campioni utilizzati. |
3 | offset_ - galleggiante Viene utilizzato per definire la funzione decisionale dai punteggi grezzi. decision_function = score_samples -offset_ |
Implementation Example
Lo script Python di seguito utilizzerà sklearn. ensemble.IsolationForest metodo per adattare 10 alberi su dati dati
from sklearn.ensemble import IsolationForest
import numpy as np
X = np.array([[-1, -2], [-3, -3], [-3, -4], [0, 0], [-50, 60]])
OUTDClf = IsolationForest(n_estimators = 10)
OUTDclf.fit(X)
Output
IsolationForest(
behaviour = 'old', bootstrap = False, contamination='legacy',
max_features = 1.0, max_samples = 'auto', n_estimators = 10, n_jobs=None,
random_state = None, verbose = 0
)
Fattore anomalo locale
L'algoritmo Local Outlier Factor (LOF) è un altro algoritmo efficiente per eseguire il rilevamento dei valori anomali su dati di grandi dimensioni. Lo scikit-learn fornisceneighbors.LocalOutlierFactormetodo che calcola un punteggio, chiamato fattore di outlier locale, che riflette il grado di anomalia delle osservazioni. La logica principale di questo algoritmo è quella di rilevare i campioni che hanno una densità sostanzialmente inferiore rispetto ai suoi vicini. Ecco perché misura la deviazione della densità locale di dati punti dati rispetto ai loro vicini.
Parametri
La tabella seguente è costituita dai parametri utilizzati da sklearn. neighbors.LocalOutlierFactor metodo
Suor n | Parametro e descrizione |
---|---|
1 | n_neighbors - int, opzionale, default = 20 Rappresenta il numero di vicini utilizzati per impostazione predefinita per la query dei vicini. Tutti i campioni sarebbero usati se. |
2 | algorithm - facoltativo Quale algoritmo utilizzare per calcolare i vicini più vicini.
|
3 | leaf_size - int, opzionale, default = 30 Il valore di questo parametro può influire sulla velocità di costruzione e query. Colpisce anche la memoria richiesta per memorizzare l'albero. Questo parametro viene passato agli algoritmi BallTree o KdTree. |
4 | contamination - auto o float, opzionale, default = auto Fornisce la proporzione dei valori anomali nel set di dati. Se lo impostiamo come predefinito, cioè auto, determinerà la soglia come nella carta originale. Se impostato su float, l'intervallo di contaminazione sarà nell'intervallo [0,0.5]. |
5 | metric - stringa o richiamabile, predefinito Rappresenta la metrica utilizzata per il calcolo della distanza. |
6 | P - int, opzionale (default = 2) È il parametro per la metrica Minkowski. P = 1 equivale a usare manhattan_distance cioè L1, mentre P = 2 equivale a usare euclidean_distance cioè L2. |
7 | novelty - Booleano, (predefinito = False) Per impostazione predefinita, l'algoritmo LOF viene utilizzato per il rilevamento dei valori anomali, ma può essere utilizzato per il rilevamento delle novità se impostiamo novità = vero. |
8 | n_jobs - int o None, opzionale (default = None) Rappresenta il numero di lavori da eseguire in parallelo per entrambi i metodi fit () e prediction (). |
Attributi
La tabella seguente è costituita dagli attributi utilizzati da sklearn.neighbors.LocalOutlierFactor metodo -
Suor n | Attributi e descrizione |
---|---|
1 | negative_outlier_factor_ - array numpy, forma (n_samples,) Fornire LOF opposto ai campioni di addestramento. |
2 | n_neighbors_ - intero Fornisce il numero effettivo di vicini utilizzati per le query dei vicini. |
3 | offset_ - galleggiante Viene utilizzato per definire le etichette binarie dai punteggi grezzi. |
Implementation Example
Lo script Python fornito di seguito utilizzerà sklearn.neighbors.LocalOutlierFactor metodo per costruire la classe NeighborsClassifier da qualsiasi array corrispondente al nostro set di dati
from sklearn.neighbors import NearestNeighbors
samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
LOFneigh = NearestNeighbors(n_neighbors = 1, algorithm = "ball_tree",p=1)
LOFneigh.fit(samples)
Output
NearestNeighbors(
algorithm = 'ball_tree', leaf_size = 30, metric='minkowski',
metric_params = None, n_jobs = None, n_neighbors = 1, p = 1, radius = 1.0
)
Example
Ora, possiamo chiedere a questo classificatore costruito se il punto più vicino a [0.5, 1., 1.5] usando il seguente script python -
print(neigh.kneighbors([[.5, 1., 1.5]])
Output
(array([[1.7]]), array([[1]], dtype = int64))
SVM di una classe
L'SVM di una classe, introdotto da Schölkopf et al., È il rilevamento dei valori anomali senza supervisione. È anche molto efficiente nei dati ad alta dimensione e stima il supporto di una distribuzione ad alta dimensione. È implementato inSupport Vector Machines modulo in Sklearn.svm.OneClassSVMoggetto. Per definire una frontiera, richiede un kernel (il più usato è RBF) e un parametro scalare.
Per una migliore comprensione adattiamo i nostri dati con svm.OneClassSVM oggetto -
Esempio
from sklearn.svm import OneClassSVM
X = [[0], [0.89], [0.90], [0.91], [1]]
OSVMclf = OneClassSVM(gamma = 'scale').fit(X)
Ora possiamo ottenere score_samples per i dati di input come segue:
OSVMclf.score_samples(X)
Produzione
array([1.12218594, 1.58645126, 1.58673086, 1.58645127, 1.55713767])