-
异常值处理
2018-06-26 18:53:19机器学习异常值处理,数据预处理之异常值处理 一、什么样的值是异常值? 简单来说,即在数据集中存在不合理的值,又称离群点。 我们举个例子,做客户分析,发现客户的年平均收入是80万美元。 但是,有两个客户的年... -
pandas 异常值处理
2020-09-29 13:15:28目录缺失值及异常值处理缺失值处理方法判断缺失值填充缺失值 缺失值及异常值处理 缺失值处理方法 判断缺失值 df.isnull() #是否是缺失的判断 df['名字'].isnull() #确定列进行判断 填充缺失值缺失值及异常值处理
缺失值处理方法
判断缺失值
df.isnull() #是否是缺失的判断
df['名字'].isnull() #确定列进行判断
填充缺失值
由于数据没有缺失值,添加一行:
dit={'名字':'复仇者联盟3','投票人数':153456,'类型':'剧情/科幻','产地':'美国','上映时间':'20180504','时长':142,'评分':np.nan,'首映地点':'美国' } s=pd.Series(dit) s.name=11 #变量最后一行数字加1 s 名字 复仇者联盟3 投票人数 153456 类型 剧情/科幻 产地 美国 上映时间 20180504 时长 142 评分 NaN 首映地点 美国 Name: 11, dtype: object
df=df.append(s) df[-5:]
df[df['评分'].isnull()][:10]
df['评分'].fillna(np.mean(df['评分']),inplace=True) #用所有电影评分均值进行填充 df[-5:]
删除缺失值
df.dropna() 参数:
- how=‘all’ :删除全为空值的行或列
- inplace=True :覆盖之前的数据
- axis=0(默认为行):选择行或列
处理异常值
异常值,即在数据集中存在不合理的值,又称之为离群点。比如年龄为-1,电脑的重量为1吨等,都属于异常值的范围。
df[df.投票人数<0] #查看投票人数小于0的值 df[df['投票人数']%1!=0] #查看投票人数除以1不为0的情况
对于异常值,一般来说数量都会很少,在不影响数据分布情况下,我们直接删除就可以了。
数据保存
df.to_excel('电影修改.xlsx')
-
R语言︱异常值检验、离群点分析、异常值处理
2016-04-21 20:25:28异常值处理一般分为以下几个步骤:异常值检测、异常值筛选、异常值处理。 其中异常值检测的方法主要有:箱型图、简单统计量(比如观察极值) 异常值处理方法主要有:删除法、插补法、替换法。 提到异常值不得不说...每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~
———————————————————————————
笔者寄语:异常值处理一般分为以下几个步骤:异常值检测、异常值筛选、异常值处理。
其中异常值检测的方法主要有:箱型图、简单统计量(比如观察极值)
异常值处理方法主要有:删除法、插补法、替换法。
提到异常值不得不说一个词:鲁棒性。就是不受异常值影响,一般是鲁棒性高的数据,比较优质。
一、异常值检验
异常值大概包括缺失值、离群值、重复值,数据不一致。
1、基本函数
summary可以显示每个变量的缺失值数量.
2、缺失值检验
关于缺失值的检测应该包括:缺失值数量、缺失值比例、缺失值与完整值数据筛选。
#缺失值解决方案 sum(complete.cases(saledata)) #is.na(saledata) sum(!complete.cases(saledata)) mean(!complete.cases(saledata)) #1/201数字,缺失值比例 saledata[!complete.cases(saledata),] #筛选出缺失值的数值
3、箱型图检验离群值
箱型图的检测包括:四分位数检测(箱型图自带)+1δ标准差上下+异常值数据点。
箱型图有一个非常好的地方是,boxplot之后,结果中会自带异常值,就是下面代码中的sp$out,这个是做箱型图,按照上下边界之外为异常值进行判定的。
上下边界,分别是Q3+(Q3-Q1)、Q1-(Q3-Q1)。
sp=boxplot(saledata$"销量",boxwex=0.7) title("销量异常值检测箱线图") xi=1.1 sd.s=sd(saledata[complete.cases(saledata),]$"销量") mn.s=mean(saledata[complete.cases(saledata),]$"销量") points(xi,mn.s,col="red",pch=18) arrows(xi, mn.s - sd.s, xi, mn.s + sd.s, code = 3, col = "pink", angle = 75, length = .1) text(rep(c(1.05,1.05,0.95,0.95),length=length(sp$out)),labels=sp$out[order(sp$out)], sp$out[order(sp$out)]+rep(c(150,-150,150,-150),length=length(sp$out)),col="red")
代码中text函数的格式为text(x,label,y,col);points加入均值点;arrows加入均值上下1δ标准差范围箭头。
箱型图还有等宽与等深分箱法,可见另外一个博客:R语言︱噪声数据处理、数据分组——分箱法(离散化、等级化)
4、数据去重
数据去重与数据分组合并存在一定区别,去重是纯粹的所有变量都是重复的,而数据分组合并可能是因为一些主键的重复。
数据去重包括重复检测(table、unique函数)以及重复数据处理(unique/duplicated)。
常见的有unique、数据框中duplicated函数,duplicated返回的是逻辑值。
二、异常值处理
常见的异常值处理办法是删除法、替代法(连续变量均值替代、离散变量用众数以及中位数替代)、插补法(回归插补、多重插补)
除了直接删除,可以先把异常值变成缺失值、然后进行后续缺失值补齐。
实践中,异常值处理,一般划分为NA缺失值或者返回公司进行数据修整(数据返修为主要方法)
1、异常值识别
利用图形——箱型图进行异常值检测。
代码来自《R语言数据分析与挖掘实战》第四节。#异常值识别 par(mfrow=c(1,2))#将绘图窗口划为1行两列,同时显示两图 dotchart(inputfile$sales)#绘制单变量散点图,多兰图 pc=boxplot(inputfile$sales,horizontal=T)#绘制水平箱形图
2、盖帽法
整行替换数据框里99%以上和1%以下的点,将99%以上的点值=99%的点值;小于1%的点值=1%的点值。
(本图来自CDA DSC,L2-R语言课程,常老师所述)
#异常数据处理 q1<-quantile(result$tot_derog, 0.001) #取得时1%时的变量值 q99<-quantile(result$tot_derog, 0.999) #replacement has 1 row, data has 0 说明一个没换 result[result$tot_derog<q1,]$tot_derog<-q1 result[result$tot_derog>q99,]$tot_derog<-q99 summary(result$tot_derog) #盖帽法之后,查看数据情况 fix(inputfile)#表格形式呈现数据 which(inputfile$sales==6607.4)#可以找到极值点序号是啥
把缺失值数据集、非缺失值数据集分开。
#缺失值的处理 inputfile$date=as.numeric(inputfile$date)#将日期转换成数值型变量 sub=which(is.na(inputfile$sales))#识别缺失值所在行数 inputfile1=inputfile[-sub,]#将数据集分成完整数据和缺失数据两部分 inputfile2=inputfile[sub,]
3、噪声数据处理——分箱法
将连续变量等级化之后,不同的分位数的数据就会变成不同的等级数据,连续变量离散化了,消除了极值的影响。
4、异常值处理——均值替换
数据集分为缺失值、非缺失值两块内容。缺失值处理如果是连续变量,可以选择均值;离散变量,可以选择众数或者中位数。
计算非缺失值数据的均值,
然后赋值给缺失值数据。
#均值替换法处理缺失,结果转存 #思路:拆成两份,把缺失值一份用均值赋值,然后重新合起来 avg_sales=mean(inputfile1$sales)#求变量未缺失部分的均值 inputfile2$sales=rep(avg_sales,n)#用均值替换缺失 result2=rbind(inputfile1,inputfile2)#并入完成插补的数据
5、异常值处理——回归插补法
#回归插补法处理缺失,结果转存 model=lm(sales~date,data=inputfile1)#回归模型拟合 inputfile2$sales=predict(model,inputfile2)#模型预测 result3=rbind(inputfile1,inputfile2)
6、异常值处理——多重插补——mice包
注意:多重插补的处理有两个要点:先删除Y变量的缺失值然后插补
1、被解释变量有缺失值的观测不能填补,只能删除,不能自己乱补;
2、只对放入模型的解释变量进行插补。比较详细的来介绍一下这个多重插补法。笔者整理了大致的步骤简介如下:
缺失数据集——MCMC估计插补成几个数据集——每个数据集进行插补建模(glm、lm模型)——将这些模型整合到一起(pool)——评价插补模型优劣(模型系数的t统计量)——输出完整数据集(compute)
步骤详细介绍:
函数mice()首先从一个包含缺失数据的数据框开始,然后返回一个包含多个(默认为5个)完整数据集的对象。
每个完整数据集都是通过对原始数据框中的缺失数据进行插补而生成的。 由于插补有随机的成分,因此每个完整数据集都略有不同。
其中,mice中使用决策树cart有以下几个要注意的地方:该方法只对数值变量进行插补,分类变量的缺失值保留,cart插补法一般不超过5k数据集。
然后, with()函数可依次对每个完整数据集应用统计模型(如线性模型或广义线性模型) ,
最后, pool()函数将这些单独的分析结果整合为一组结果。最终模型的标准误和p值都将准确地反映出由于缺失值和多重插补而产生的不确定性。
#多重插补法处理缺失,结果转存 library(lattice) #调入函数包 library(MASS) library(nnet) library(mice) #前三个包是mice的基础 imp=mice(inputfile,m=4) #4重插补,即生成4个无缺失数据集 fit=with(imp,lm(sales~date,data=inputfile))#选择插补模型 pooled=pool(fit) summary(pooled) result4=complete(imp,action=3)#选择第三个插补数据集作为结果
结果解读:
(1)imp对象中,包含了:每个变量缺失值个数信息、每个变量插补方式(PMM,预测均值法常见)、插补的变量有哪些、预测变量矩阵(在矩阵中,行代表插补变量,列代表为插补提供信息的变量, 1和0分别表示使用和未使用);
同时 利用这个代码imp$imp$sales 可以找到,每个插补数据集缺失值位置的数据补齐具体数值是啥。
> imp$imp$sales 1 2 3 4 9 3614.7 3393.1 4060.3 3393.1 15 2332.1 3614.7 3295.5 3614.7
(2)with对象。插补模型可以多样化,比如lm,glm都是可以直接应用进去,详情可见《R语言实战》第十五章;
(3)pool对象。summary之后,会出现lm模型系数,可以如果出现系数不显著,那么则需要考虑换插补模型;
(4)complete对象。m个完整插补数据集,同时可以利用此函数输出。
其他:
mice
包提供了一个很好的函数md.pattern()
,用它可以对缺失数据的模式有个更好的理解。还有一些可视化的界面,通过VIM、箱型图、lattice来展示缺失值情况。可见博客:在R中填充缺失数据—mice包三、离群点检测
离群点检测与第二节异常值主要的区别在于,异常值针对单一变量,而离群值指的是很多变量综合考虑之后的异常值。下面介绍一种基于聚类+欧氏距离的离群点检测方法。
基于聚类的离群点检测的步骤如下:数据标准化——聚类——求每一类每一指标的均值点——每一类每一指标生成一个矩阵——计算欧式距离——画图判断。
Data=read.csv(".data.csv",header=T)[,2:4] Data=scale(Data) set.seed(12) km=kmeans(Data,center=3) print(km) km$centers #每一类的均值点 #各样本欧氏距离,每一行 x1=matrix(km$centers[1,], nrow = 940, ncol =3 , byrow = T) juli1=sqrt(rowSums((Data-x1)^2)) x2=matrix(km$centers[2,], nrow = 940, ncol =3 , byrow = T) juli2=sqrt(rowSums((Data-x2)^2)) x3=matrix(km$centers[3,], nrow = 940, ncol =3 , byrow = T) juli3=sqrt(rowSums((Data-x3)^2)) dist=data.frame(juli1,juli2,juli3) ##欧氏距离最小值 y=apply(dist, 1, min) plot(1:940,y,xlim=c(0,940),xlab="样本点",ylab="欧氏距离") points(which(y>2.5),y[which(y>2.5)],pch=19,col="red")
每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~
———————————————————————————
-
Matlab实现Hampel异常值处理
2021-04-07 13:29:40用于信号去噪、异常值处理的Hampel算法,可应用于CSI信号预处理,CSI数据包可直接修改读取路径使用。 -
python异常值处理实例_Python机器学习:异常值查找和处理
2021-03-06 04:11:39再一次的通过写文章的方式...由于目前学习到的3种算法(线性回归、逻辑回归、随机森林),所以还是处理异常值处理异常值可以像处理缺失值的方法一样:删除或用特殊值代替如何查找到异常值?查看数据的描述统计信息d...再一次的通过写文章的方式强化记忆,本文内容均来源于以上文章。先说如何处理检测到的异常值?
有些算法对异常值很敏感,如逻辑回归算法。如果不处理,用该算法拟合出来的模型的效果、精确度会很低。有些算法对异常值不敏感,可以不处理异常值。由于目前学习到的3种算法(线性回归、逻辑回归、随机森林),所以还是处理异常值
处理异常值可以像处理缺失值的方法一样:删除或用特殊值代替如何查找到异常值?查看数据的描述统计信息describe()
import pandas
df.describe() #只针对数值类型数据
2. 绘制散点图
3. 绘制数据分布图3σ原则:如果数据呈正态分布,异常值定义为超过3倍标准差的数值
如果数据不满足正态分布,也可以用远离平均值多少倍标准差来定义异常值
4. 四分位距法只取上四分位数(Q1)到下四分位数(Q3)之间的数据。
四分位距法:将数据从小到大排列,只取中间的50%。也就是25%到75%段的数据。可以有效剔除异常值(极大/极小值)。
计算四分位数 Q1、Q3
【例】给出一组数据:2 3 1 4 2 3 9 7 15 99 38 888 19
将它们从小到大重新排序:1 2 2 3 3 4 7 9 15 19 38 99 888
找出从整个数据的中位数Q2:7
找出从极小值到Q2这段数据的中位数Q1:3
找出Q2到极大值这段数据的中位数Q3:19
5. Tukey's test只取最小估计值到最大估计值之间的数据。
最小估计值=Q1-k(Q3-Q1)
最大估计值=Q1+k(Q3-Q1)
k=1.5 中度异常 k=3 极度异常
用numpy包里的percentile函数来实现tukey's test
import numpy
percentile=numpy.percentile(df['length'],[0,25,50,75,100])
Min=percentile[1]-1.5*(percentile[3]-percentile[1])
Max=percentile[1]+1.5*(percentile[3]-percentile[1])
6. 绘制箱型图boxplot
import seaborn
from matplotlib import pyplot
f,ax=pyplot.subplots(figsize=(10,8))
seaborn.boxplot(y='length',data=df,ax=ax)
pyplot.show()
以上是检测异常值的常用的简单方法。还有一些复杂的算法可以检测异常值,之后再根据需要和兴趣继续学习
-
python封装的异常值处理函数(包括箱线图去除异常值等)
2020-12-21 20:51:23# 这里我包装了一个异常值处理的代码,可以随便调用。 def outliers_proc(data, col_name, scale=3): """ 用于清洗异常值,默认用 box_plot(scale=3)进行清洗 :param data: 接收 pandas 数据格式 :param col_... -
箱线图怎么判断异常值_异常值处理
2020-12-30 12:15:10异常值处理一.简介异常值,即在数据集中存在不合理的值,又称离群点。异常值判断二.判别方法1.简单统计分析对属性值进行一个描述性的统计(规定范围),从而查看哪些值是不合理的(范围以外的值)。2.3δ原则若数据...异常值处理
一.简介
异常值,即在数据集中存在不合理的值,又称离群点。
异常值判断
二.判别方法
1.简单统计分析
对属性值进行一个描述性的统计(规定范围),从而查看哪些值是不合理的(范围以外的值)。
2.3δ原则
若数据服从正态分布:根据正态分布的定义可知,距离平均值3δ之外的概率为 P(|x-μ|>3δ) <= 0.003 ,这属于极小概率事件,在默认情况下我们可以认定,距离超过平均值3δ的样本是不存在的。因此,当样本距离平均值大于3δ,认为该样本为异常值。
根据概率值的大小可以判断 x 是否属于异常值。
3.使用距离检测多元离群点
当数据不服从正态分布时,可以通过远离平均距离多少倍的标准差来判定,多少倍的取值需要根据经验和实际情况来决定。
4.箱线图
Q3+1.5IQR和Q1-1.5IQR
四分位距IQR=Q3-Q1
箱形图提供了一种只用5个点对数据集做简单总结的方式。这5个点包括中点、Q1、Q3、分部状态的高位和低位。箱形图很形象的分为中心、延伸以及分布状态的全部范围。
箱形图的绘制步骤
1、画数轴,度量单位大小和数据批的单位一致,起点比最小值稍小,长度比该数据批的全距稍长。
2、画一个矩形盒,两端边的位置分别对应数据批的上下四分位数(Q3和Q1)。在矩形盒内部中位数(Xm)位置画一条线段为中位线。
3、在Q3+1.5IQR和Q1-1.5IQR处画两条与中位线一样的线段,这两条线段为异常值截断点,称其为内限;在Q3+3IQR和Q1-3IQR处画两条线段,称其为外限。处于内限以外位置的点表示的数据都是异常值,其中在内限与外限之间的异常值为温和的异常值(mild outliers),在外限以外的为极端的异常值(extreme outliers)。四分位距IQR=Q3-Q1。
4、从矩形盒两端边向外各画一条线段直到不是异常值的最远点,表示该批数据正常值的分布区间。
5、用“〇”标出温和的异常值,用“*”标出极端的异常值。相同值的数据点并列标出在同一数据线位置上,不同值的数据点标在不同数据线位置上。至此一批数据的箱形图便绘出了。
三.处理方法
- 删除含有异常值的记录
- 将异常值视为缺失值,使用缺失值处理方法来处理
- 用平均值来修正
- 不处理
-
数据预处理异常值处理_处理数据集中的异常值
2020-10-14 23:03:54数据预处理异常值处理表中的内容(Table of Content) Definition of Outliers离群值的定义Different types of Outliers不同类型的离群值Ways to deal with Outliers处理离群值的方法Optional Content about SD & ... -
python处理异常值循环_Python数据处理:异常值处理方法之3σ原则
2021-01-13 23:42:37原标题:Python数据处理:异常值处理方法之3σ原则一、3σ原则定义异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称离群点,异常值的分析也称为离群点的分析。在进行机器学习过程中,需要对数据集... -
数据预处理--01 缺失值处理\异常值处理
2019-07-16 18:07:18数据预处理 数据常见的预处理方法 (异常值剔除,空值填充,归一化,离散化 等) 异常值(空值)处理 异常值主要分为NULL值\重复值\明显不在数据范围内等等 ...异常值处理方法: 删除记录\数据填充\不处理 ... -
数据清洗之 异常值处理
2020-04-20 15:26:49数据清洗异常值处理 -
python实现数据清洗(缺失值与异常值处理)
2020-09-18 08:43:03今天小编就为大家分享一篇python实现数据清洗(缺失值与异常值处理),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
【010期】SPSS 异常值处理.docx
2021-01-25 11:02:59【010期】SPSS 异常值处理.docx -
python异常值处理箱型图_Python数据处理:五分钟搞定异常值和重复值
2020-12-20 08:56:02一、异常值处理异常值之前,需要明确哪些是异常值。有很多种规则和方法来筛选异常值,这里我们以Z标准化得到的阈值作为判断标准。利用正态分布定位异常值Z标准化会将数据转换为标准差为1,均值为0且符合正态分布的... -
R语言︱处理缺失数据&&异常值检验、离群点分析、异常值处理
2020-10-19 09:48:07R语言︱处理缺失数据&&异常值检验、离群点分析、异常值处理 -
数据挖掘:数据处理-异常值处理
2020-04-22 20:31:42数据挖掘:数据处理-异常值处理 1,什么是异常值? 异常值即是样本数据中的离群点,将那些明显与其他样本不同的数据视为异常值。异常值虽然数量较少,但是对于模型(对异常值敏感的模型)的影响很大,所以必须... -
22.数据预处理之异常值处理
2020-02-09 22:47:48指那些偏离正常范围的值,不是错误值 异常值出现频率较低,但又会对实际项目分析造成偏差 ...#对价格做异常值处理 x_bar=df['Price'].mean()#均值 x_std=df['Price'].std()#标准差 #返回一个值false或True any(... -
01相关性 异常值处理
2020-03-13 01:39:14相关性:皮尔逊相关系数,协方差,互信息(信息增益) 异常值处理:1.5倍IQR ,3倍标准差 -
数据清洗-对异常值处理并可视化.html
2021-03-29 17:02:11数据清洗-对异常值处理并可视化.html