离群点的判定
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
离群点的判定
摘要
本文首先对离群点进行了定义,离群点(outlier)是指数值中,远离数值的一般水平的极端大值和极端小值。
因此,也称之为歧异值,有时也称其为野值。
深入了解了形成离群点的原因,并建立数学模型来找出一维、n维数据中的离群点,主要利用聚类的离群挖掘法。
针对问题一,考虑到数据的杂乱性,先对数据进行排序,由于在实际生活中我们需要处理的数据量往往比较多,离群点的个数也不确定,就考虑对数据进行分类处理,利用离群值跳跃度比较大的特点,采用斜率比较的方法进行分类,在分类的过程中我们就会很容易的发现离群点。
最后再对完成分类的数据进行分析。
完成分类的数据往往差距更小,可以近似的认为数据服从正态分布,利用正态分布的性质可以找出每类数据中的离群点,这样就找出了数据中所有的离群点。
针对问题二,我们主要采用具体的数据绘制具体的图形来分析存在的离群点,并说明离群点带来的影响。
针对问题三,我们主要利用基于聚类的离群挖掘方法,先利用一趟算法对数据集进行聚类;然后再计算每个簇的离群因子,并按离群因子对簇进行排序,最终确定离群簇,也即确定离群对象。
确定算法以后再利用具体的数据进行检测,看该模型是否可行。
关键词:数据的分类处理聚类的离群挖掘方法(CBOD)
一、问题重述
A题:离群点的判定
离群点(outlier)是指数值中,远离数值的一般水平的极端大值和极端小值。
因此,也称之为歧异值,有时也称其为野值。
形成离群点的主要原因有:首先可能是采样中的误差,如记录的偏误,工作人员出现笔误,计算错误等,都有可能产生极端大值或者极端小值。
其次可能是被研究现象本身由于受各种偶然非正常的因素影响而引起的。
例如:在人口死亡序列中,由于某年发生了地震,使该年度死亡人数剧增,形成离群点;在股票价格序列中,由于受某项政策出台或某种谣传的刺激,都会出现极增,极减现象,变现为离群点。
不论是何种原因引起的离群点对以后的分析都会造成一定的影响。
从造成分析的困难来看,统计分析人员说不希望序列中出现离群点,离群点会直接影响模型的拟合精度,甚至会得到一些虚伪的信息。
因此,离群点往往被分析人员看作是一个“坏值”。
但是,从获得信息来看,离群点提供了很重要的信息,它不仅提示我们认真检查采样中是否存在差错,在进行分析前,认真确认,而且,当确认离群点是由于系统受外部突发因素刺激而引起的时候,他会提供相关的系统稳定性,灵敏性等重要信息。
问题一:针对一维数据,建立判别离群点的数学模型;并对模型的计算结果进行评价或检验。
问题二:如果数据中出现离群点应该如何处理?并举例说明该处理方法对后续建模分析的影响。
问题三:针对n维数据,建立判别离群点的数学模型;并对模型的计算结果进行评价或检验。
二、模型假设
假设一:一维数据为随机序列,排序后不会影响到离群点的判断。
假设二:一维数据中存在离群点,且离群数据差异不会很大。
假设三:n维数据中存在离群点,以二维为例进行检测。
三、符号说明
Ci——簇
OF4(Ci)——簇Ci离群因子
——标准差
__
x——均值
四、问题分析
问题一:要分离一维数据中的离群点,由于数据的随机性,首先要对杂乱无章的数据进行处理,将数据变成有序的、易于观察的序列。
离群点,就是与其他数据差异较大的一个数据,找出差异,就可以找出离群点。
问题二:离群点有别于其他的数据,如果后续数据处理会用到该项数据,该项数据肯定是不能直接使用的,可以选择直接剔除数据或者取均值来减小该项数据对后续建模的影响。
问题三:我们主要利用基于聚类的离群挖掘方法,先利用一趟算法对数据集进行聚类;然后再计算每个簇的离群因子,并按离群因子对簇进行排序,最终确定离群簇,也即确定离群对象。
确定算法以后再利用具体的数据进行检测,看该模型是否可行。
五、模型的建立与求解
问题一:
5、1模型建立
5、1、1数据整理:
原数组为:{x1,x2,… ,xn};
将数据进行重新排序,得新数组{T1,T2,…,Tn } 其中T1≤T2…≤Tn;
建立直角坐标系,x 轴为1,2,…,n,新数组数值作为y 轴数据,构建新的二维数组(1,T1),(2,T2),…,(N,Tn)。
5、1、2数据分类:
令 n
T1
-k Tn =;
如果 k ≤11
-Xt -Xt 则Xt ,Xt-1同类;
k X X >11
-t -t 则Xt ,Xt-1不同类 t=1,2,...,n ;
每两个分类点之间的数据为同一类
这样,数据分成L 组:A1,A2,…,AL 。
每组为一类数据;
5、1、3查找离群点
(1)若某类中有m 个数值,且m 相对于n 很小,则此类中数值作为离群点
(2)同类中查找离群点:
在假设成立的情况下,一类中的数据可看做服从正态分布。
取出一类中的y 值,剔除x 值,将二维数组转换成一维数组。
X ~N(μ,δ2)
由拉依达准则:|x i -x __
| > 3δ;
当某个可疑数据x i 符合上式时, 则认为该数据是异常值, 应予剔除。
即是说当可疑数据与测量数据的算术平均值的偏差的绝对值大于3倍(或两倍)的标准偏差时应将此可疑值舍去, 至于3s 或2s 与显著性水平a(随机变量落在置信区间以外的概率)有关, 3s 相当于a = 0.01, 2s 相当于a = 0.05。
(s 是标准差即δ) 举例论证:
原数组由visual c +
+整理后结果如下:
Y=[10.002,10.102 ,10.203,10.204,10.208,10.218,10.220,10.228,10.230,10.232,10.302,10.312,10.320,10.342,10.346]; 转变成二维数组: (1,10.002)(2,10.102)(3,10.203)(4,10.204)(5,10.208)(6,10.218)(7,10.220)(8,10.228)(9,10.230)(10,10.232)(11,10.302)(12,10.312)(13,10.320)(14,10.342)(15,10.346); 数据由visual c +
+分类后得到: A1={(1,10.002)}; A2={(2,10.102)};
A3={(3,10.203)(4,10.204)(5,10208)(6,10.218)(7,10.220)(8,10.228)(9,10.230)(10,10.232)}; A4={(11,10.302)(12,10.312)(13,10.320)(14,10.342)(15,10.346)}; 则A1,A2中的数据为离群点;
转变成一维数据后检验A3中的数值:
10.203,10.204,10.208,10.218,10.220,10.228,10.230,10.232; Matlab 计算可得:
均值__
x =10.2179,标准差s =0.0117;
在显著性水平0.05的情况下,[10.1945,10.2413]范围内为正常水平; 故A3中无离群点;
同理得A4中无离群点;
所以离群数据为:10.002 10.112;
5、1、4由拉依达准则检验: 剔除离群点后数据:
10.203,10.204,10.208,10.218,10.220,10.228,10.230,10.232,10.302,10.312,10.320,10.342,10.346; Matlab 计算可得:
均值__x =10.2588,标准差s =0.0558;
在显著性水平水平0.05的情况下,[10.1472,10.3704]范围内为正常水平; 结论:无离群点。
5、2问题二:
在数据中出现离群点时,应避免使用出现的离群点。
表2-1
原油价格
01000
200030004000
500060002002
2004
2006
2008
2010
2012
年份
元/吨
原油价格
年份 2003 2004 2005 2006 2007 2008 2009 2010 2011 国际原
油价格
(吨)
1861.47 2393.15 3197.83 3864.81 4127.76 5290.99 3062.19 4560.14 4694.
04
图2-1
例: 如上数据,在对国际原油价格进行预测的时候,2009年的数据明显是一个离群点,因为从走势来看,2009年的数据明显出现不正常的下降,所以无论用什么方法预测未来原油价格,如果用到2009年的数据,那么这项预测肯定是失败的,2009年的数据只能作为一个参考值来看待。
那么,在预测未来值的时候,要剔除2009年的原油价格这个数据。
5、3问题三:
5、3、1
假设数据集D 被聚类算法划分为k 个簇C={C1,C2,...,Ck},簇Ci 离群因子(Outlier Factor )OF4(Ci )定义为簇Ci 其他所有簇间间距离的加权平均值: OF4(Ci )=
),(,j i d .|
||
j |k
i j 1j C C D C ∑≠= 如果一个簇离几个大簇的距离都比较远,则表明该簇偏离整体较远,其离群因子
也较大。
OF4(Ci )度量了簇Ci 偏离整个数据集的程度,其值越大,说明Ci 偏离整体越远。
基于聚类的离群挖掘方法(CBOD )
5、3、2 CBOD 方法由两个阶段构成:
1.第一阶段是利用一趟算法对数据集进行聚类;
2.第二阶段是计算每个簇的离群因子,并按离群因子对簇进行排序,最终确定离群簇,也即确定离群对象。
5、3、3 CBOD 的算法描述如下:
1.第一阶段聚类:对数据集D 进行聚类,得到聚类结果C={C1,C2,...,Ck};
2.第二阶段确定离群簇:计算每个簇Ci,(1=<i=<k )的离群因子OF4(Ci )递减的顺序重新排列Ci (k i 1≤≤),求满足:
)
(10|
||
|1
<<≥∑=εεD Ci b
i 的最小b,将簇C1,C2,...,Cn 标志为‘outlier ’类(即其中每个对象均看成离群),而将Ch+2,...,Ck,标志位为‘normal ’类(即其中每个对象均看成正常)。
基于聚类的动态数据离群点检测。
基本思想如下:
在对训练集聚类的基础上,按照簇的离群因子排序簇,并按簇的离群因子排序簇,并按照一定的比例将簇标志为‘normal ’或‘outlier ’,以标志的簇作为分
类模型,按照对象与分类模型中最直接的簇的距离判断它是否离群点。
5、3、4 模型建立
第一步,聚类:对训练集T1进行聚类,得到聚类结果T1={C1,C2...,Ck};
第二步,给簇作标记:计算每个簇Ci (k i 1≤≤)的离群因子 OF4(Ci ),按 OF4(Ci )递减的顺序重新排列Ci (k i 1≤≤),求满足:
ε≥∑=T1
|
Ci |b
1
i
的最小b ,将C1,C2,...,Cb 标识为离群簇,而将Cb+1,...Ck 标志为正常簇。
将簇C1,C2,...,Cn 标志为‘outlier ’类(即其中每个对象均看成离群),而将Cb+2,...,Ck,标志位为‘normal ’类(即其中每个对象均看成正常)。
第三步,确定模型:以每个簇的摘要信息,聚类半径阈值r 作为模型。
对模型的计算结果进行检验: 以2维数据为例,数据集D : x 1 1 2 1 3 2 8 9 9 9 1.67 8.67 9 y
4
3
3
2
3
2
6
7
6
3
2.83
6.33
3
表3-1
0123456780
2
4
6
8
10
离群点散点图
1质心
图3-1
对于数据集D ,聚类后得到三个簇C={C1,C2,C3},簇心分别为C1(1.67,2.83),C2(8.67,6.33),C3(9,3),簇之间的距离分别为: d (C1,C2)=)33.683.2(67.8-67.12
2
-+)
(=7.83 d (C1,C3)=)()(3-83.29-67.12
2+=7.33
d (C2,C3)=)()(3-33.69-67.82
2 =3.35
进一步计算三个簇的离群因子,具体如下:
OF4(C1)=103d (C1,C2)+101
d (C1,C3)=3.082
OF4(C2)=106d (C2,C1)+101
d (C2,C3)=5.033
OF4(C3)=106d (C3,C1)+10
3
d (C3,C2)=5.403
可见簇C3的离群因子最大,其中包含的对象判定为离群点。
六、 模型的评价与推广
模型一:可以很好地给出离群点,但对数据的要求程度比较高,且只能处理一维数据。
模型二:基于聚类的离群挖掘方法(CBOD )可以首先对数据进行聚类,再判断离群点,这样能更准确地找出离群点,而且虽然原理复杂,但算法简单明了。
参考文献:
1、姜启源 谢金星 叶俊 《数学模型(第三版)》 北京 高等教育出版社 2010
2、谭浩强 《c 程序设计(第三版)》北京 清华大学出版社 2011
3、叶川 伍川辉 张嘉怡 计量测试中异常数据剔除方法比较 《计量与测试技术》 2007年第34卷第7期
附录:
#include"stdio.h" void main() {
int a[15]; int i,j ,t;
printf("input 15 numbers:\n"); for(i=0;i<15;i++)
scanf("%f",&a[i]); printf("\n"); for(j=0;j<15;j++)
for(i=0;i<15-j;i++) if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("the sorted numbers :\n");
for(i=0;i<15;i++)
printf("%f",a[i]);
printf("\n");
}。