Python中的隔离森林

问题描述 投票:0回答:1

我目前正在使用Python中的Isolation Forest检测数据集中的异常值,我并不完全理解scikit-learn文档中给出的示例和解释

是否可以使用隔离林来检测数据集中包含258行和10列的异常值?

我是否需要单独的数据集来训练模型?如果是,是否有必要使该训练数据集不受异常值的影响?

这是我的代码:

rng = np.random.RandomState(42)
X = 0.3*rng.randn(100,2)
X_train = np.r_[X+2,X-2]
clf = IsolationForest(max_samples=100, random_state=rng, contamination='auto'
clf.fit(X_train)
y_pred_train = clf.predict(x_train)
y_pred_test = clf.predict(x_test)
print(len(y_pred_train))

我尝试将我的数据集加载到X_train,但这似乎不起作用。

python-3.x scikit-learn outliers anomaly-detection
1个回答
2
投票

我是否需要单独的数据集来训练模型?

简短的回答是“不”。您可以训练和预测相同数据的异常值。

IsolationForest是一种无监督学习算法,旨在从异常值中清除数据(有关更多信息,请参阅docs)。在通常的机器学习设置中,您可以运行它来清理训练数据集。就你的玩具示例而言:

rng = np.random.RandomState(42)
X = 0.3*rng.randn(100,2)
X_train = np.r_[X+2,X-2]

from sklearn.ensemble import IsolationForest
clf = IsolationForest(max_samples=100, random_state=rng, behaviour="new", contamination=.1)

clf.fit(X_train)
y_pred_train = clf.predict(X_train)
y_pred_train
array([ 1,  1,  1, -1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,
        1, -1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1, -1,  1, -1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1, -1,  1, -1,  1,  1,  1,  1,  1, -1, -1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
       -1,  1,  1, -1,  1,  1,  1,  1, -1, -1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1])

其中1代表内点,-1代表异常值。正如contamination param所指出的那样,异常值的分数是0.1

最后,你会删除以下异常值:

X_train_cleaned = X_train[np.where(y_pred_train == 1, True, False)]
© www.soinside.com 2019 - 2024. All rights reserved.