2017-07-06 135 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

(at)bosbraves我的解决方案是否有效? – 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个虹膜数据)都是异常值。

希望这会有所帮助