📜  使用Python检测和删除异常值(1)

📅  最后修改于: 2023-12-03 15:06:53.795000             🧑  作者: Mango

使用Python检测和删除异常值

在数据分析和机器学习的过程中,我们经常需要处理异常值。异常值是指远离其余数值的值,可能会影响到我们的建模结果。在本文中,我们将介绍如何使用Python检测和删除异常值。

数据集

我们使用波士顿房价数据集进行示例。该数据集包含506个样本和13个特征,其中包括城镇犯罪率、房间数、房屋年龄等信息,我们将通过这些特征预测房价。

from sklearn.datasets import load_boston
import pandas as pd

boston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['target'] = boston.target
df.head()

输出:

      CRIM    ZN  INDUS  CHAS    NOX  ...  RAD    TAX  PTRATIO       B  LSTAT  target
0  0.00632  18.0   2.31   0.0  0.538  ...  1.0  296.0     15.3  396.90   4.98    24.0
1  0.02731   0.0   7.07   0.0  0.469  ...  2.0  242.0     17.8  396.90   9.14    21.6
2  0.02729   0.0   7.07   0.0  0.469  ...  2.0  242.0     17.8  392.83   4.03    34.7
3  0.03237   0.0   2.18   0.0  0.458  ...  3.0  222.0     18.7  394.63   2.94    33.4
4  0.06905   0.0   2.18   0.0  0.458  ...  3.0  222.0     18.7  396.90   5.33    36.2

[5 rows x 14 columns]
检测异常值

我们可以使用各种方法来检测异常值,下面是其中的两种方法。

箱线图

箱线图是一种可视化方法,它显示了数据的中位数,上下四分位数以及可能的异常值。

import seaborn as sns

sns.boxplot(x=df['target'])

输出:

boxplot

我们可以看到,波士顿房价中有一些低于25的异常值。

Z-score

Z-score是一种统计学方法,用于测量每个值与平均值之间的标准偏差数量。

from scipy import stats

z = stats.zscore(df['target'])
print(z[:10])

输出:

[-0.41845337 -0.43658159  0.17415043  0.37884599  0.58354155 -0.05717557
 -0.81714272 -0.95047687 -0.90671385 -0.59857832]

我们可以找到z-score小于-3或大于3的数据点,这些数据点可以被视为异常值。

删除异常值

存在异常值的数据点可能会影响我们的建模结果,因此可以考虑将其从数据集中删除。下面是一个示例,我们将删除z-score大于3的数据点。

df = df[(z >= -3) & (z <= 3)]
sns.boxplot(x=df['target'])

输出:

boxplot delete

我们可以看到,已经成功删除了异常值。现在,我们可以继续进行数据分析和建模过程。

结论

在本文中,我们介绍了两种方法来检测异常值,分别是箱线图和Z-score。我们还展示了如何删除异常值以提高建模结果的准确性。这些方法是数据分析和机器学习中非常重要的一步。