寻找异常值的机器学习方法

数据挖掘 机器学习 Python 异常检测 离群值
2021-10-08 03:07:23

我有一个数千行的 csv 文件,数据被放入一个 Dataframe 的列中。某些列包含文本信息,而其他列可能包含数字。我想检测这个 csv 文件中的异常或异常值。

如果我对此相对较新并且不太了解,如果我能得到一些帮助或小指导以及我应该如何解决这个问题,我将不胜感激。在数据框中查找异常值的方法或最佳方法是什么。

我选择的语言是 Python

4个回答

您应该使用 matplotlib 和 seaborn 绘制数据以获得数据的可视化视图。那就是我要开始的地方。特别是对于大型数据集,这是一种直观地查看任何异常值的快速方法。

不幸的是,检测异常值更像是一门艺术而不是科学。著名统计学家 John Tukey 提出将 IQR 1.5 作为“异常值”。因此,上限为 75% + (IQR 1.5)。

以下是 Python 中“平衡”功能的代码:

在此处输入图像描述

异常值只不过是数据集中的极端值。它可能太高或太低。检测异常值的最简单方法是绘制箱线图。

请参考以下水平箱线图:

在此处输入图像描述

在此处输入图像描述

例子

您可以使用plotly express绘制交互式箱线图。

在此处输入图像描述

多次帮助我的东西......特别是在回归等监督问题中被称为库克距离。

库克距离解决的确切问题是,库克距离不是在单个变量水平上解决异常值问题,而是测量回归线上观察值的总扭曲效应。(因此需要存在回归线,因此需要有监督模型)。该值越高,删除该观察对整体回归线的影响越大。虽然有关于应该使用哪种截止值的经验法则,但我倾向于通过绘制观测值的厨师距离并删除与其他点的聚类高度分离的观测值来选择观测值。它通常使我有更高的准确性。

https://en.wikipedia.org/wiki/Cook%27s_distance(用于了解库克的距离)

https://stats.stackexchange.com/questions/164099/removing-outliers-based-on-cooks-distance-in-r-language(用于在R中实现上述方法)