LOF 给出相同数量的异常值,与参数无关

数据挖掘 Python scikit-学习 聚类 离群值
2022-02-21 06:26:52

我正在为大约 100k 2d 点运行 lof 算法。每次,我使用不同的 n_neighbours 参数运行 lof 算法,我得到的点数与异常值相同。总是有 10% 的点是异常值。这是这个算法应该如何工作的吗?为什么会这样?

1个回答

根据sklearn 文档,您将默认参数contamination设置为 0.1。

污染:浮动(0.,0.5),可选(默认=0.1)

数据集的污染量,即数据集中异常值的比例。拟合时,它用于定义决策函数的阈值。

无论您使用不同的 运行算法多少次n_neighbours,您的数据集的 10% 都将作为异常值保留。

请记住,在运行 LOF 时,您首先执行的是 k 最近邻算法,该算法取决于n_neighbours参数。然后,您评估点的局部密度(分别与它们最近的邻居),这将返回一个数值。但是,您尚未决定应将哪个阈值视为异常值,而这正是污染参数介入的地方。它允许您根据您指定的污染比例计算阈值。

我建议您将 LOF 的结果可视化,以确定您的污染比例是否相关,或者是否应该调整。