数据预处理-离群值检测与处理

@数据分析预处理

离群值检测

数据集中那些明显偏离数据集中其他样本的数据,检测离群值为数据分析与建模提供高质量的数据。

1、3σ法

当样本的取值符合正态分布时可以采用3σ法判断异常值。
样本x和样本均值μ之间的距离,而且这个距离以标准差σ为单位进行计算:
Z-score(x)=(x-μ)/σ
得到样本的Z-score值后,通常将不满足条件:
|Z-score(x)|<3
的样本视为离群值称为3σ法。
也用于对模型残差分析,找出异常值。

2、箱线图

是检验样本数据中异常值的常用方法,与3σ法不同,箱形图法既可以用作服从正态分布样本数据异常值判断,也可以用作不服从正态分布样本数据异常值判断,适用范围广。
箱线图由来对残差最大值、上四分位数(Q3)、中位数(Q2)、下四分位数(Q1)和最小值五个统计量构成,Q1到Q3的间距为IQR,箱两端分别为上四分位数yong (Q3)、下四分位数 (Q1) , 最大值、最小值分别为箱两端的须, 箱线图法中样本数据大于Q3+1.5IQR和小于Q-1.5IQR定义为异常值 。

pandas 方法:
data.plot(kind=“box”)

matplotlib 方法:
plt.plotbox()

3、基于近邻判断离群值

通过比较每个点和其邻域点的密度来判断该点是否为异常点,点的密度越低,越可能被认定是异常点。
密度通过点之间的距离来计算,点之间距离越远,密度越低,距离越近,密度越高
方法:
对样本的离群程度进行量化,分数由它与K个最近邻的距离决定,分数的取值[0,+∞]:
计算每一个样本与其最近的K个近邻样本的距离,放到集合C中。
对C中的所有元素进行降序排列。
根据给定的距离阈值,选取C中大于给定阈值的距离所对应的样本作为离群值。
neighbors.LocalOutlierFactor(
n_neighbors=10, #用于kneighbors查询的邻域数
algorithm=‘auto’, #{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, 可选
leaf_size=20, #传递给BallTree或KDTree的叶子大小
metric=‘minkowski’, #用于距离计算的度量
p=2, #p = 1时,manhattan_distance(l1);p = 2,euclidean_distance(l2)
metric_params=None,
contamination=0.1, #数据集中异常值的最高比例
n_jobs=6 #为邻域搜索运行的并行作业数
)
contamination:the proportion of outliers in the data set. When fitting this is used to define the
threshold on the scores of the samples.

回归法

通过构建回归曲线,分析模型残差确定异常值。

数据预处理-离群值检测与处理_第1张图片

聚类法

基于聚类的离群点:一个对象是基于聚类的离群点,如果该对象不强属于任何簇,那么该对象属于离群点。
离群点对初始聚类的影响:如果通过聚类检测离群点,则由于离群点影响聚类,存在一个问题:结构是否有效。这也是k-means算法的缺点,对离群点敏感。为了处理该问题,可以使用如下方法:对象聚类,删除离群点,对象再次聚类(这个不能保证产生最优结果)
– 优缺点:

(1)基于线性和接近线性复杂度(k均值)的聚类技术来发现离群点可能是高度有效的;
(2)簇的定义通常是离群点的补,因此可能同时发现簇和离群点;
(3)产生的离群点集和它们的得分可能非常依赖所用的簇的个数和数据中离群点的存在性;
(4)聚类算法产生的簇的质量对该算法产生的离群点的质量影响非常大。

基于模型检测

这种方法一般会构建一个概率分布模型,并计算对象符合该模型的概率,把具有低概率的对象视为异常点。如果模型是簇的集合,则异常是不显著属于任何簇的对象;如果模型是回归时,异常是相对远离预测值的对象。
离群点的概率定义:离群点是一个对象,关于数据的概率分布模型,它具有低概率。这种情况的前提是必须知道数据集服从什么分布,如果估计错误就造成了重尾分布。
比如特征工程中的RobustScaler方法,在做数据特征值缩放的时候,它会利用数据特征的分位数分布,将数据根据分位数划分为多段,只取中间段来做缩放,比如只取25%分位数到75%分位数的数据做缩放。这样减小了异常数据的影响。
— 优缺点:

(1)有坚实的统计学理论基础,当存在充分的数据和所用的检验类型的知识时,这些检验可能非常有效;
(2)对于多元数据,可用的选择少一些,并且对于高维数据,这些检测可能性很差。

基于密度的离群点检测

从基于密度的观点来说,离群点是在低密度区域中的对象。基于密度的离群点检测与基于邻近度的离群点检测密切相关,因为密度通常用邻近度定义。
一种常用的定义密度的方法是,定义密度为到k个最近邻的平均距离的倒数。如果该距离小,则密度高,反之亦然。
另一种密度定义是使用DBSCAN聚类算法使用的密度定义,即一个对象周围的密度等于该对象指定距离d内对象的个数。
– 优缺点:

(1)给出了对象是离群点的定量度量,并且即使数据具有不同的区域也能够很好的处理;
(2)与基于距离的方法一样,这些方法必然具有O(m2)的时间复杂度。对于低维数据使用特定的数据结构可以达到O(mlogm);
(3)参数选择是困难的。虽然LOF算法通过观察不同的k值,然后取得最大离群点得分来处理该问题,但是,仍然需要选择这些值的上下界。

离群值处理

离群值的处理方法主要是要看在测试数据上的性能是否有提升。
正常情况下如果的确是离群值,在有离群值的特征较少的情况下,去掉后在测试数据上的性能是会有显著提升的。
在对数据分布影响较小的情况下,可以把离群值当成缺失值,或用均值替换。

参考:
1、https://www.cnblogs.com/tgzhu/p/13814809.html
2、www

你可能感兴趣的:(数据分析入门,数据分析,python,机器学习)