Python中的隔离林

时间:2019-02-18 06:39:24

标签: python-3.x scikit-learn outliers anomaly-detection

我目前正在使用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,但似乎不起作用。

1 个答案:

答案 0 :(得分:1)

  

我需要一个单独的数据集来训练模型吗?

简短的回答是“否”。您可以根据相同的数据训练和预测离群值。

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代表离群值。根据{{​​1}}参数所指定,离群值的比例为contamination

最后,您将删除异常值,例如:

0.1