隔离林
Isolation Forest
我目前正在使用 Python 中的 IsolationForest 方法识别数据集中的离群值,但不完全理解 sklearn 上的示例:
具体来说,图表实际向我们展示的是什么?观测值已被定义为 normal/outliers——所以我假设等值线图的阴影表明该观测值是否确实是异常值(例如,具有较高异常分数的观测值位于较暗的阴影区域?)。
最后,下面这段代码实际是如何使用的(特别是 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)
我猜它只是为了完整性而提供的,以防有人想要打印输出?
在此先感谢您的帮助!
使用您的代码
在您的代码之后,只需打印 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)
return只有1。这意味着 X_test 的所有样本都不是 异常值。
另一方面,print(y_pred_outliers)
return 只有 -1。这意味着 X_outliers 的所有样本(虹膜数据总共 150 个)都是 个异常值。
希望对您有所帮助
我目前正在使用 Python 中的 IsolationForest 方法识别数据集中的离群值,但不完全理解 sklearn 上的示例:
具体来说,图表实际向我们展示的是什么?观测值已被定义为 normal/outliers——所以我假设等值线图的阴影表明该观测值是否确实是异常值(例如,具有较高异常分数的观测值位于较暗的阴影区域?)。
最后,下面这段代码实际是如何使用的(特别是 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)
我猜它只是为了完整性而提供的,以防有人想要打印输出?
在此先感谢您的帮助!
使用您的代码
在您的代码之后,只需打印 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)
return只有1。这意味着 X_test 的所有样本都不是 异常值。
另一方面,print(y_pred_outliers)
return 只有 -1。这意味着 X_outliers 的所有样本(虹膜数据总共 150 个)都是 个异常值。
希望对您有所帮助