-1

我正在检测未标记数据集中的异常值(数据未标记为内点/异常值),并且我正在 Python 中使用隔离森林(scikit-learn 库)。
我想获得数据集中数据的异常分数,因此我使用以下代码:

if_model = IsolationForest(max_samples=100)
if_model.fit(dataset)
anomaly_score = if_model.score_samples(dataset)

但是我有一些问题:

  • 前面的过程是否正确,或者我应该将我的数据集分成两部分,以在一组上执行拟合并在另一组上获得异常分数?
  • 该方法的用途是什么predict?我应该如何使用它?
4

1 回答 1

0
  • 要回答您的第一个问题,您不需要拆分数据集。监督算法需要测试集。如果您对数据中的每一行都有预期结果,则可以将模型的输出与预期结果进行比较,以评估模型的执行情况。该数据不能用于拟合模型,或者模型可能很好地拟合这些特定的数据行而不拟合其他数据,而您不会知道。然而,隔离森林是一种无监督算法。您没有用于比较隔离林结果的异常行列表,因此没有必要保留数据来验证模型是否有效。

  • 要回答第二个问题,predict就每一行是否以数组的形式出现异常给出是或否(1 或 0)答案。 score_samples返回一个数字,表示每行的异常程度,但不告诉您它是否异常。请参阅sklearn 文档

于 2020-12-08T19:44:44.097 回答