Python 之 异常值/离群值的处理
离群值
离群值是指与集合中其他观测值差异较大的任何数据点。
例如:
当一个学生的平均成绩在90%以上,而其他小组的成绩在70%,就会出现明显的离群现象。
通过分析某个客户的购买模式,突然出现了一个非常高价值的购买(如10万)。虽然某客户的交易额大多在1万左右波动。不管是什么原因,10万的购买量在整体数据中都是一个异数。
乌塞恩-博尔特--记录短跑绝对是排放当大多数运动员被考虑。
异常值存在的原因有很多。有可能是分析人员在输入数据时出错,也有可能是设备产生了测量误差,甚至有可能是故意离群。
如果有离群值/异常值,数据分布会有重尾。
离群有两种类型:一维和多维。
一维离群是指仅由一个变量的极端值组成的数据点,而多维离群/异常是指至少两个变量的综合异常值。假设我们有三个不同的变量--X,Y,Z。如果我们将这些变量绘制在三维空间中,就会形成一种云。所有位于在这之外的数据点都将是多维度的排放。
异常/离群值会严重影响分析和统计建模的结果。
大多数参数统计,如平均数、标准差和相关性,以及基于这些参数的任何统计,对离群值都非常敏感。
单纯地消除离群并不总是一个好主意。离群/异常值可以是相当合理的观察,有时也是最有趣的观察。在作出决定之前,必须研究离群值的性质。
如果某项异常值显然是由于输入或测量的数据不正确造成的,则应将其删除。
如果离群/异常值不改变结果,但影响假设,则可删除离群/异常值。不过,报告中值得注意的是这一点。你也可以建立一个有这个版本和没有这个版本的模型,看看结果。
如何查找离群/异常值情况?
1.通过可视化
2.通过数学计算
import pandas as pdimport matplotlib.pyplot as plt
%matplotlib inlinefrom sklearn.datasets import load_boston
boston = load_boston()
x = boston.data
y = boston.target
columns = boston.feature_names#create the dataframe
boston_df = pd.DataFrame(x)
boston_df.columns = columns
boston_df.head()
Box-plot
import seaborn as sns
sns.boxplot(x=boston_df['INDUS']);
剖析框图
sns.boxplot(x=boston_df['PTRATIO']);
sns.boxplot(x=boston_df['DIS']);
最后一张图显示的是10和12之间的三个辍学点,不包括在方框内的其他观察点,即公寓之间。
Scatter-plot
fig, ax = plt.subplots(figsize=(16,8))
ax.scatter(boston_df['INDUS'], boston_df['TAX'])
ax.set_xlabel('Proportion of non-retail business acres per town')
ax.set_ylabel('Full-value property-tax rate per $10,000')
plt.show();
你可以清晰地看到云外的点。
Z-Score
Z-Score是指观测点或数据的值超过观测值或测量值平均值的标准差的符号数。
from scipy import stats
import numpy as np
z = np.abs(stats.zscore(boston_df))
print(z)
threshold = 3
print(np.where(z > 3))
print(z[55][1])
3.375038763517309
例如,ZN中的第55个观测值(划为25,000平方英尺以上地段的住宅用地比例)就是一种离群。
IQR score
四分位数范围(IQR),又称平均数或50%平均数,或技术上称为H-spread,是衡量统计学分散度的指标,等于75%和25%之间的差值,或上四分位数和下四分位数之间的差值,IQR=Q3 - Q1。百度百科解释
Q1 = boston_df.quantile(0.25)
Q3 = boston_df.quantile(0.75)
IQR = Q3 - Q1
print(IQR)
CRIM 3.565378 ZN 12.500000 INDUS 12.910000 CHAS 0.000000 NOX 0.175000 RM 0.738000 AGE 49.050000 DIS 3.088250 RAD 20.000000 TAX 387.000000 PTRATIO 2.800000 B 20.847500 LSTAT 10.005000 dtype: float64
既然我们现在有了IQR估计,那么我们就选择离群值。下面的代码将产生带有真值和假值的结果。带有False的数据点表示这些值是有效的,而True则表示有释放。
print((boston_df < (Q1 - 1.5 * IQR)) | (boston_df > (Q3 + 1.5 * IQR)))
CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX \ 0 False False False False False False False False False False 1 False False False False False False False False False False 2 False False False False False False False False False False 3 False False False False False False False False False False 4 False False False False False False False False False False 5 False False False False False False False False False False 6 False False False False False False False False False False 7 False False False False False False False False False False 8 False False False False False False False False False False 9 False False False False False False False False False False 10 False False False False False False False False False False 11 False False False False False False False False False False 12 False False False False False False False False False False 13 False False False False False False False False False False 14 False False False False False False False False False False 15 False False False False False False False False False False 16 False False False False False False False False False False 17 False False False False False False False False False False 18 False False False False False False False False False False 19 False False False False False False False False False False 20 False False False False False False False False False False 21 False False False False False False False False False False 22 False False False False False False False False False False 23 False False False False False False False False False False 24 False False False False False False False False False False 25 False False False False False False False False False False 26 False False False False False False False False False False 27 False False False False False False False False False False 28 False False False False False False False False False False 29 False False False False False False False False False False .. ... ... ... ... ... ... ... ... ... ... 476 False False False False False False False False False False 477 True False False False False False False False False False 478 True False False False False False False False False False 479 True False False False False False False False False False 480 False False False False False False False False False False 481 False False False False False False False False False False 482 False False False False False False False False False False 483 False False False False False False False False False False 484 False False False False False False False False False False 485 False False False False False False False False False False 486 False False False False False False False False False False 487 False False False False False False False False False False 488 False False False False False False False False False False 489 False False False False False False False False False False 490 False False False False False False False False False False 491 False False False False False False False False False False 492 False False False False False False False False False False 493 False False False False False False False False False False 494 False False False False False False False False False False 495 False False False False False False False False False False 496 False False False False False False False False False False 497 False False False False False False False False False False 498 False False False False False False False False False False 499 False False False False False False False False False False 500 False False False False False False False False False False 501 False False False False False False False False False False 502 False False False False False False False False False False 503 False False False False False False False False False False 504 False False False False False False False False False False 505 False False False False False False False False False False PTRATIO B LSTAT 0 False False False 1 False False False 2 False False False 3 False False False 4 False False False 5 False False False 6 False False False 7 False False False 8 False False False 9 False False False 10 False False False 11 False False False 12 False False False 13 False False False 14 False False False 15 False False False 16 False False False 17 False False False 18 False True False 19 False False False 20 False False False 21 False False False 22 False False False 23 False False False 24 False False False 25 False True False 26 False False False 27 False True False 28 False False False 29 False False False .. ... ... ... 476 False False False 477 False False False 478 False False False 479 False False False 480 False False False 481 False False False 482 False False False 483 False False False 484 False False False 485 False False False 486 False False False 487 False False False 488 False False False 489 False True False 490 False True False 491 False False False 492 False False False 493 False False False 494 False False False 495 False False False 496 False False False 497 False False False 498 False False False 499 False False False 500 False False False 501 False False False 502 False False False 503 False False False 504 False False False 505 False False False [506 rows x 13 columns]
在ModelTestingTemplate中的影响措施。
聚类/分类。
1.K-means
2.隔离林
离群值/异常值怎么办?
识别异常值--分析有无异常值的结果模型--做出结论。
如果你确定数值是错误的,就修正它。
如果离群值不在利益分配范围内,则删除。
考虑到数据的差距。
使用抗离群值的统计工具,例如,稳健回归(用另一种参数估计方法)Robust_regression。
离群值的常见原因是两种分布的混合,可能是两个不同的子人群,也可能表明 "测量正确 "和 "测量误差";这通常是由混合模型来建模。 (Mixture model).
Python 之 异常值/离群值的处理相关推荐
- MATLAB箱型图异常值/离群值处理(箱型图红色加号)
MATLAB箱型图异常值/离群值处理(箱型图红色加号) 博主针对污染物小时浓度值绘制了年变化的箱型图,出现了大片的较高"异常值",其实是一些高污染事件,并不属于"异常值& ...
- python异常值处理箱型图_如何利用python处理异常值?
在数据清洗阶段,我们需要找到异常值,并对其进行相应的一些处理.在python中,异常值的处理常常需要结合一些数据模型或概率分布来解决.下面做一个简单的介绍. 1.打开pycharm开发工具,在运行窗口 ...
- 使用python进行异常值(outlier)检测实战:KMeans + PCA + IsolationForest + SVM + EllipticEnvelope
作者:Susan Li ,原文:https://towardsdatascience.com/time-series-of-price-anomaly-detection-13586cd5ff46 略 ...
- Python:异常值检测箱型图(附:正态分布3σ)
异常值检测的方法有很多,通过数据分布图型寻找异常值.算法模型(聚类.随机森林等),我这里就是记录一下工作中做初步的数据探查时用到的箱型图检测和正态分布检测,这两种都是根据数据分布情况来识别异常值的,没 ...
- python处理异常值循环_Python数据处理:异常值处理方法之3σ原则
原标题:Python数据处理:异常值处理方法之3σ原则 一.3σ原则定义 异常值是指样本中的个别值,其数值明显偏离其余的观测值.异常值也称离群点,异常值的分析也称为离群点的分析. 在进行机器学习过程中 ...
- python数据异常值处理_Python数据清洗(三):异常值识别与处理
作者 | 刘顺祥 来源 | 数据分析1480 原文 |Python数据清洗--缺失值识别与处理 在<Python数据清洗(一):类型转换和冗余数据删除>和<Python数据清洗(二) ...
- python处理异常值--箱型图查找异常值并替换
箱型图查找异常值并替换 定义为值大于上四分位或者小于下四分位的值位异常值,若是异常值,则用mean替换,项目中遇到的,但是这个可能或将0值也替换了,但是0值不是异常值,故而舍弃这种方法. import ...
- python异常值处理实例_利用Python进行异常值分析实例代码
前言 异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值.常用检测方法3σ原则和箱型图.其中,3σ原则只适用服从正态分布的数据.在3σ原则下,异常值被定义为观察值和平均值的偏差超过3倍 ...
- python时间序列异常值查找_(No.38)时间序列异常点检测算法
写在前面: 针对一个数值序列,识别出其中的异常波动点.例如: p = [1 1 1.1 1 0.9 1 1 1.1 1 0.9 1 1.1 1 1 0.9 1 1 1.1 1 1 1 1 1.1 0. ...
最新文章
- CSS 小结笔记之滑动门技术
- 二叉树前序、中序、后序遍历非递归写法的透彻解析
- 3D溜溜网站用的是php吗_三大免费开源的php语言cms系统 用好它们让你一天建好一个网站...
- 从wordpress到octopress
- 时序分析基本概念介绍<input/output delay>
- 佛祖保佑,永无BUG
- XILINX-DDR3IP核的使用
- 高等数学辅导讲义_历年真题,复习讲义的经验分享(数二127分)
- Autojs4脚本大合集(薅羊毛专业版的脚本)
- 几种统计图表的作用和区别
- win7设置视力保护色
- JAVA将多个PDF文件合并成一个PDF
- 为什么许多器件的片选信号低电平有效,而不是高电平有效?
- 人工智能轨道交通行业周刊-第14期(2022.9.12-9.18)
- 花之语第十四期:萱草花
- Android系统篇之—-Android中的run-as命令引出升降权限的安全问题(Linux中的setuid和setgid)
- SpringBoot 接口数据加解密实战
- 基于Python监测键盘输入并发出声音的坤音键盘
- 技术管理者对知识组织的认识
- java生成二值图,如何创建java poi条形图,结合两个条形值,如给定的图像?