给定数据集异常检测方法


简介

异常是指与现有数据集中其他观测值存在很大差异的值或数据观测值。在构建机器学习模型时,检测和处理异常变得至关重要,因为传递给模型的数据质量应该足够可靠。人们认为,高质量的数据集可以提供准确可靠的信息,即使在性能非常差的算法上也能取得成果,如果数据集本身质量很差,那么获得高性能模型的可能性就非常小。

本文将讨论异常值、它们背后的核心思想、我们为什么要检测它们以及检测它们的方法。这将帮助人们了解异常值的概念、它们在模型构建中的作用以及进一步检测和处理它们。

什么是异常?

异常或离群值是指给定数据集中不符合现有其他数据观测值的数据点。异常值是指非常高、非常低或与其他数据观测值非常不同的数据值或观测值。

异常值对模型性能的影响最大,因此应妥善检测和处理。数据清洗和预处理在构建准确可靠的模型中发挥着重要作用;在这里,异常值检测和去除是最复杂和最重要的阶段之一。这里需要注意的一点是,异常值检测也是一项风险很大的任务,因为我们在这个阶段检测的是不符合正常数据的值。但有时异常值也可能对我们有所帮助,并提供正常数据无法提供的信息,因此检测和处理异常值需要技术和领域专家的共同努力。

异常检测:方法

异常检测和去除主要有两种方法:

  • 修剪

  • 截尾

修剪是一种方法,我们对数据集进行修剪,并通过确定数据集的上限和下限来去除异常值或排除异常值。此技术是检测和去除异常值的最快技术之一。

截尾是一种方法,我们用一些数据观测值对数据进行截尾,顾名思义。在此,确定数据的上限和下限,并根据这些限制对数据进行截尾。

异常检测:Z 分数

Z 分数是最古老、最可靠的异常值检测方法之一。在这里,我们使用统计方法来检测数据集中异常值。每个具有数值的数据都将具有一定的分布或方差,我们可以使用 Python 中的不同库轻松地绘制这些分布。在这里,我们可以使用公式计算数据的 Z 分数,并将值大于 3 和小于 -3 的数据观测值选为异常值。

Z 分数的公式可以是:

Z = Xi - Mean(X)/ StdDev(X)

Z = Z 分数

Xi = 数据观测值

Mean(X) = X 的均值

StdDev = X 的标准差

示例

df['zscore'] = (df[‘x’] - df[‘x’].mean())/df[‘x’].std()
df[(df['zscore'] > 3) | (df['zscore'] < -3)]
new_df = df[(df['zscore'] < 3) & (df['zscore'] > -3)]

异常检测:截尾

截尾也是最常用的异常值检测和去除方法之一。在这里,我们使用数据观测值的标准差和均值来检测并去除异常值。在这种方法中,我们计算数据的均值和标准差。然后根据我们从上限和下限获得的值,我们设置阈值,对于这些阈值,具有高于上限的值的数据观测值将被视为异常值,反之亦然。

此处使用以下公式计算数据的上限和下限:

上限 = Mean(X) + 3*(StdDev(X))

下限 = Mean(X) - 3*(StdDev(X))

示例

upper_limit = df[‘x’].mean() + 3*df[‘x’].std() lower_limit = df[‘x’].mean() - 3*df[‘x’].std() df[‘x’] = np.where( df[‘x’]>upper_limit, upper_limit, np.where( df[‘x’]<lower_limit, lower_limit, df[‘x’] ) )

我们可以看到,在上面的代码中,数据的均值和标准差的值决定了上限和下限。具有高于上限的值和低于下限的值的数据观测值将被移除。

异常检测:IQR 方法

四分位距方法也用于检测数据分布倾斜的异常值。在这种情况下,数据的上限和下限是根据数据的四分位距来确定的。在这里,具有高于 Q3 + 1.5IQR 的值的数据观测值被视为异常值,而具有低于 Q1 - 1.5 IQR 的值的数据观测值被视为异常值。

上限 = Q3 + 1.5IQR

下限 = Q1 - 1.5IQR

这里 IQR = 四分位距 = Q3 - Q1

Q3 = 数据集的第 75 个百分位数

Q1 = 数据集的第 25 个百分位数

示例

percentile25 = df['placement_exam_marks'].quantile(0.25) percentile75 = df['placement_exam_marks'].quantile(0.75) upper_limit = percentile75 + 1.5 * iqr lower_limit = percentile25 - 1.5 * iqr df[df[‘new_data’] > upper_limit] df[df[‘new_data’] < lower_limit] new_df = df[df['placement_exam_marks'] < upper_limit] new_df = df[df[‘new_data’] < upper_limit] New_df.shape

关键要点

  • 异常值是指数据集中具有非常高或非常低的值的数据观测值。

  • 异常值是在数据清洗和预处理过程中处理的最关键的参数之一。

  • 应妥善检测和处理异常值,以避免模型性能不佳。

  • 我们可以计算数据的 Z 分数,然后将值大于 3 或小于 -3 的异常值进行分类。

  • 我们还可以使用截尾方法,其中我们根据数据的标准差和均值使用上限和下限对数据进行截尾。

  • 在数据倾斜的情况下,也可以使用四分位距方法。这里,上限和下限是根据 IQR、第 25 个和第 75 个百分位数数据来确定的。

结论

在本文中,我们讨论了异常值、什么是异常值、我们为什么要检测它们,以及希望我们可以如何处理它们。我们还讨论了三种基于数据集的 Z 分数、截尾方法和四分位距方法的异常值检测和去除方法。这将有助于人们更好地理解异常值的概 念,并帮助处理它们。

更新于: 2023 年 2 月 24 日

154 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告