密度变化数据集下LoF与k-NN的离群点检测效果对比
多密度差异数据集下LOF与KNN离群点检测效果对比
首先直接给结论:当数据集存在多个密度差异明显的区域时,局部离群因子(LOF)的检测效果远优于K近邻(KNN)。
两者核心逻辑差异导致的效果区别
- KNN做离群点检测的逻辑非常直接:计算每个样本到其K个最近邻的平均距离,只要这个距离超过全局统一的阈值,就判定为离群点。它的核心缺陷就在于全局阈值完全忽略了局部区域的密度差异。
举个非常直观的例子:假设数据集里有两个簇,高密度簇A内部样本的平均间距是2,低密度簇B内部样本的平均间距是20。现在有两个待判定点:点X距离A簇K个近邻的平均距离是10,点Y距离B簇K个近邻的平均距离是15。用KNN检测的话,全局阈值不管设成多少都很容易出问题:如果阈值设为13,X和Y都会被判定为离群,但Y明明是B簇的正常点,属于典型的误判。实际场景中你不可能提前知道所有簇的密度分布,根本找不到适配所有区域的全局阈值。
- LOF从设计之初就是为了解决这个问题,它完全放弃了全局阈值,而是针对每个样本计算两个核心指标:局部可达密度、以及该点密度和其邻域点密度的比值(即LOF值):
- LOF值接近1:说明该点的密度和邻域密度一致,属于正常点
- LOF值远大于1:说明该点密度远低于邻域密度,属于离群点
- 回到上面的例子,LOF计算点X的时候,对比的是A簇的局部密度,10的距离远大于A簇的平均间距2,LOF值会远大于1,直接判定为离群;计算点Y的时候对比的是B簇的局部密度,15的距离小于B簇的平均间距20,LOF值接近1,判定为正常点,完全不受全局阈值的影响,不管数据集里有多少个不同密度的簇都能正常识别。
补充适用边界
如果你的数据集整体密度非常均匀,不存在明显的局部密度差异,KNN的运算速度会比LOF快很多,效果也和LOF没有明显差距。但只要是存在多密度区域的场景,LOF的检测稳定性和准确率都远高于KNN。
内容的提问来源于stack exchange,提问作者Surya Tej
相关产品推荐
相关产品推荐

