📅  最后修改于: 2023-12-03 15:06:53.795000             🧑  作者: Mango
在数据分析和机器学习的过程中,我们经常需要处理异常值。异常值是指远离其余数值的值,可能会影响到我们的建模结果。在本文中,我们将介绍如何使用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'])
输出:
我们可以看到,波士顿房价中有一些低于25的异常值。
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'])
输出:
我们可以看到,已经成功删除了异常值。现在,我们可以继续进行数据分析和建模过程。
在本文中,我们介绍了两种方法来检测异常值,分别是箱线图和Z-score。我们还展示了如何删除异常值以提高建模结果的准确性。这些方法是数据分析和机器学习中非常重要的一步。