如何在 python 中使用隔离林
How to use Isolation Forest in python
我正在努力检测未标记数据集中的异常值(数据未标记为 inliers/outliers),并且我在 Python(scikit-learn 库)中使用隔离森林。
我想获得数据集中数据的异常分数,所以我使用以下代码:
if_model = IsolationForest(max_samples=100)
if_model.fit(dataset)
anomaly_score = if_model.score_samples(dataset)
但是我有一些问题:
- 前面的过程是否正确,或者我应该将我的数据集分成两部分,以对一组执行拟合并获得另一组的异常分数?
- 方法
predict
有什么用?我应该如何使用它?
要回答你的第一个问题,你不需要拆分数据集。监督算法需要测试集。如果您对数据中的每一行都有预期结果,则可以将模型的输出与预期结果进行比较,以评估模型的执行情况。此数据不能用于拟合模型,或者模型可能在不拟合其他数据的情况下很好地拟合这些特定的数据行,而您不会知道。然而,隔离森林是一种无监督算法。您没有用于比较隔离林结果的异常行列表,因此保留数据以验证模型是否有效是没有用的。
回答第二个问题,predict
给出是或否(1或0)每行是否以数组形式存在异常的答案。 score_samples
returns 一个数字,表示每一行的异常程度,但不会告诉您它是否异常。参见 sklearn documentation。
我正在努力检测未标记数据集中的异常值(数据未标记为 inliers/outliers),并且我在 Python(scikit-learn 库)中使用隔离森林。
我想获得数据集中数据的异常分数,所以我使用以下代码:
if_model = IsolationForest(max_samples=100)
if_model.fit(dataset)
anomaly_score = if_model.score_samples(dataset)
但是我有一些问题:
- 前面的过程是否正确,或者我应该将我的数据集分成两部分,以对一组执行拟合并获得另一组的异常分数?
- 方法
predict
有什么用?我应该如何使用它?
要回答你的第一个问题,你不需要拆分数据集。监督算法需要测试集。如果您对数据中的每一行都有预期结果,则可以将模型的输出与预期结果进行比较,以评估模型的执行情况。此数据不能用于拟合模型,或者模型可能在不拟合其他数据的情况下很好地拟合这些特定的数据行,而您不会知道。然而,隔离森林是一种无监督算法。您没有用于比较隔离林结果的异常行列表,因此保留数据以验证模型是否有效是没有用的。
回答第二个问题,
predict
给出是或否(1或0)每行是否以数组形式存在异常的答案。score_samples
returns 一个数字,表示每一行的异常程度,但不会告诉您它是否异常。参见 sklearn documentation。