Forêt

2017-07-06 2 views
3

Je travaille actuellement sur l'identification des valeurs aberrantes dans mes ensemble de données en utilisant la méthode IsolationForest en Python, mais ne comprennent pas complètement l'exemple sur sklearn:Forêt

http://scikit-learn.org/stable/auto_examples/ensemble/plot_isolation_forest.html#sphx-glr-auto-examples-ensemble-plot-isolation-forest-py

Plus précisément, ce qui est le graphique nous montrant réellement? Les observations ont déjà été définies comme normales/aberrantes - donc je suppose que la nuance de la courbe de niveau indique si cette observation est effectivement une aberration (par exemple, les observations avec des scores d'anomalie plus élevés se trouvent dans des zones plus sombres).

Enfin, comment la section de code suivante est-elle réellement utilisée (en particulier les fonctions y_pred)?

# fit the model 
clf = IsolationForest(max_samples=100, random_state=rng) 
clf.fit(X_train) 
y_pred_train = clf.predict(X_train) 
y_pred_test = clf.predict(X_test) 
y_pred_outliers = clf.predict(X_outliers) 

Je suppose qu'il a été simplement fourni pour l'exhaustivité dans le cas où quelqu'un veut imprimer la sortie?

Merci d'avance pour l'aide!

+0

(at) bosbraves Est-ce que ma solution a fonctionné? – sera

+0

Oui, merci! – bosbraves

+0

cela vous dérange d'accepter la réponse? – sera

Répondre

2

En utilisant votre code

Après votre code juste imprimer les y_pred_outliers:

# fit the model 
clf = IsolationForest(max_samples=100, random_state=rng) 
clf.fit(X_train) 
y_pred_train = clf.predict(X_train) 
y_pred_test = clf.predict(X_test) 
y_pred_outliers = clf.predict(X_outliers) 

print(y_pred_outliers) 

Donc, pour chaque observation, il indique si oui ou non (+1 ou -1) il doit être considéré comme une valeur aberrante selon le modèle ajusté.

Exemple simple avec des iris

from sklearn.model_selection import train_test_split 
from sklearn.datasets import load_iris 
import numpy as np 
import matplotlib.pyplot as plt 
from sklearn.ensemble import IsolationForest 

rng = np.random.RandomState(42) 
data = load_iris() 

X=data.data 
y=data.target 
X_outliers = rng.uniform(low=-4, high=4, size=(X.shape[0], X.shape[1])) 

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) 

clf = IsolationForest() 
clf.fit(X_train) 

y_pred_train = clf.predict(X_train) 
y_pred_test = clf.predict(X_test) 
y_pred_outliers = clf.predict(X_outliers) 

print(y_pred_test) 
print(y_pred_outliers) 

Résultat:

[ 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] 

[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1] 

Interprétation:

Le retour print(y_pred_test) ne . Cela signifie que tous les échantillons de X_test ne sont pas des valeurs aberrantes. Par contre, print(y_pred_outliers) renvoie uniquement -1. Cela signifie que tous les échantillons (150 au total pour les données d'iris) de X_outliers sont des valeurs aberrantes.

Espérons que cela aide