2017-07-06 4 views
3

ich gerade arbeite mit der IsolationForest Methode in Python gesetzt Ausreißer in meinen Daten zu identifizieren, aber nicht verstehen, vollständig das Beispiel auf sklearn:Isolation Wald

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

Insbesondere was ist der Graph uns eigentlich zeigen? Die Beobachtungen wurden bereits als normal/Ausreißer definiert - also nehme ich an, dass der Schatten des Konturdiagramms anzeigt, ob diese Beobachtung tatsächlich ein Ausreißer ist (z. B. liegen Beobachtungen mit höheren Anomaliewerten in dunkleren schattierten Bereichen?).

Schließlich, wie wird der folgende Codeabschnitt tatsächlich verwendet (speziell die y_pred-Funktionen)?

Ich vermute, es wurde nur für die Vollständigkeit zur Verfügung gestellt, falls jemand die Ausgabe drucken möchte?

Vielen Dank im Voraus für die Hilfe!

+0

(at) bosbraves Hat meine Lösung funktioniert? – sera

+0

Ja, danke! – bosbraves

+0

Stört es dich, die Antwort zu akzeptieren? – sera

Antwort

2

Arbeiten mit dem Code

Nachdem Sie den Code drucken nur die 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) 

Also für jede Beobachtung, es sagt, ob oder nicht (+1 oder -1) es sollte nach dem angepassten Modell als Ausreißer betrachtet werden.

Einfaches Beispiel Unter Verwendung von Daten 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) 

Ergebnis:

[ 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] 

Interpretation:

Die print(y_pred_test) return nur . Dies bedeutet, dass alle Samples von X_test keine Ausreißer sind.

Auf der anderen Seite, print(y_pred_outliers) zurück nur -1. Dies bedeutet, dass alle Stichproben (insgesamt 150 für Iris-Daten) von X_outliers Ausreißer sind.

Hoffe, das hilft