机器学习入门系列(2)–如何构建一个完整的机器学习项目,第四篇!
该系列的前三篇文章:
上篇文章介绍了如何处理缺失值和图片数据扩充的问题,这篇文章会介绍另外两种情况,处理异常值和类别不平衡的问题。
3.1.3 处理异常值
异常值分析是检验数据是否有录入错误以及含有不合常理的数据。忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果会产生不良影响。
异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称为离群点,异常值分析也称为离群点分析。
异常值检测
- 简单统计:比如利用
pandas
库的describe()
方法观察数据的统计性描述,或者简单使用散点图也能观察到异常值的存在,如下图所示:
- 3∂原则: 这个原则有个条件:数据需要服从正态分布。在 3∂ 原则下,异常值如超过 3 倍标准差,那么可以将其视为异常值。正负3∂ 的概率是 99.7%,那么距离平均值 3∂ 之外的值出现的概率为
P(|x-u| > 3∂) <= 0.003
,属于极个别的小概率事件。如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。如下图所示:
- 箱型图
这种方法是利用箱型图的四分位距(IQR)对异常值进行检测,也叫Tukey‘s test。箱型图的定义如下:
四分位距(IQR)就是上四分位与下四分位的差值。而我们通过IQR的1.5倍为标准,规定:超过上四分位+1.5倍IQR距离,或者下四分位-1.5倍IQR距离的点为异常值。下面是Python中的代码实现,主要使用了numpy
的percentile
方法。
Percentile = np.percentile(df['length'],[0,25,50,75,100])
IQR = Percentile[3] - Percentile[1]
UpLimit = Percentile