2017-07-06 8 views
3

私は現在、PythonでIsolationForestメソッドを使用して私のデータセット内の外れ値を識別することに取り組んでいますが、完全にsklearn上の例を理解していない:分離森

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

具体的には、グラフは何ですか実際に私たちを示している?観測はすでに正常/異常値として定義されています。そのため、等高線プロットの陰影は、その観測値が確かに外れ値かどうかを示していると仮定しています(たとえば、陰影の濃い部分が高い異常値の観測値)。

最後に、次のコードセクション(実際には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) 

私はそれが誰かは出力を印刷したい場合には、完全性のために提供された推測していますか?

ありがとうございました!

+0

私の解決策はありましたか? – sera

+0

はい、ありがとうございます! – bosbraves

+0

答えを受け入れるのは気になりますか? – sera

答えて

2

あなたのコードの後に​​コード

を使用するだけで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) 

を、それが(+1または-1)かどうかを判断します適合モデルによれば外れ値とみなされるべきである。

単純な例の使用をアイリスデータ

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) 

結果:

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

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

解釈:

print(y_pred_test)リターンのみ。これは、X_test のすべてのサンプルがの外れ値ではないことを意味します。

一方、print(y_pred_outliers)リターンのみ-1です。これは、X_outliers のすべてのサンプル(合計虹彩データ150)が外れ値がであることを意味します。

希望します。