一种基于噪声阈值距离度量的离群点检测方法
文献发布时间:2023-06-19 11:21:00
技术领域
本发明属于数据挖掘技术领域,具体涉及一种基于噪声阈值距离度量的离群点检测方法。
背景技术
离群点检测在数据挖掘领域发挥着重大作用,可以广泛应用到各个领域。例如,将离群点检测技术应用到医学数据中,可以检测出发生异常的数据从而可以判断出一条医学数据是否正常。
离群点检测的方法可以按照不同的分类标准进行分类。根据对离群点与其余数据做出的假定,可以把离群点检测方法分为统计学方法,基于邻近性的方法和基于聚类的方法。基于邻近性的方法,即K Nearest Neighbors(KNN) 假定一个对象是离群点,如果它最近邻的点离它较远,显著偏离其他数据点和它们的最近邻。该方法能较好的发现基于距离的离群点,但是对于包含密度不同的簇的数据集的检测效果不是很好。为了解决这个问题,Breunig等人在2000年提出了一种基于局部离群因子的算法LOF(Local Outlier Factor),该方法能够较好的检测基于密度的离群点。为了检测高维数据中的离群点,有研究提出了基于角度的离群点检测方法ABOD(Angle-based Outlier Detection),结合距离和角度对离群点建模,能够较好的应用到高维数据上,但是由于需要计算基于角度的离群因子,时间开销很大。
随后有研究提出用单类支持向量机的方法进行离群点检测,即OCSVM (One ClassSupport Vector Machine),它是一种线性模型,可以将离群点看做一类,其他数据看做一类,实现对数据的分类。近年来,有学者用深度学习的方法进行离群点检测,比如2018年提出的一种基于生成式对抗性学习框架的非监督离群点检测方法,在该文章中,作者提出了两种方法,单目标生成式对抗性学习SOGAAL(Single-Objective Generative AdversarialActive Learning)和多目标生成式对抗性学习MO-GAAL(Multiple-Objective Gen-erative Adversarial Active Learning),通过用生成器和辨别器对离群点进行判断检测。实验结果显示该方法能够较好的识别离群点,但是对于一些医学数据结果不是很好。
发明内容
本发明提供一种基于噪声阈值距离度量的离群点检测方法,以解决现有技术中对于医疗数据离群点检测不准确,效果不太好的问题,本发明与其他的离群点检测算法进行对比,在合成数据集和真实数据集上都有较好的离群点检测结果。
为达到上述目的,本发明采用如下技术方案:
一种基于噪声阈值距离度量的离群点检测方法,通过计算医学数据的最小生成树结构,进行聚类,从而实现检测出医学数据中的异常数据,具体方法为:首先设置一个迷你MST的数据结构,先用prim算法计算出一个精确的最小生成树,然后对最小生成树中的边的权重,即边的起点和终点之间的欧式距离,按照从小到大的顺序进行排序存放到边数组sorted_mst中,计算出所有边的权重的平均值和标准方差,将两者之和作为噪声阈值noise_th;由于最短边是密度最大的簇中的边,选择最短边的起点P作为迷你MST计算的起点加入迷你MST中,从P开始计算没有加入树中的点到树中点的距离,除以噪声阈值noise_th作为边的权重;
根据计算出的边的权重,选择最短的边和对应的端点加入到迷你MST 中,每次加完一个点及对应的边后,计算已经加入MST中的边的平均值和标准方差之和,作为判断一个簇是否形成的阈值,若新加入的边的权重不满足阈值条件,则说明将要加入的点属于当前簇,将该边加入当前的MST中,继续当前簇的计算;若满足阈值条件,则说明形成一个簇,退出当前簇的计算,再从sorted_mst中下一条边开始新的簇的计算,先判断该边的权重是否大于噪声阈值,若大于,则说明剩下的点为噪声或离群点,退出循环,完成数据集的分类;若不大于,则说明是正常的簇,循环从sorted_mst中选下一条边计算新的簇,直到满足退出循环的条件结束计算。
进一步地,具体包括以下步骤:
步骤1:用Prim算法计算一个精确的最小生成树,记为emst,最小生成树中的每一条边,用一个三元组表示,包含边的起点、终点和权值;
步骤2:对emst中的所有边按照从小到大的顺序进行排序,存入数组 sorted_mst;
步骤3:计算emst中所有边的权重的平均值和标准方差,将两者之和作为噪声阈值noise_th;
步骤4:初始化两个数组node_unfinished和node_finished;node_unfinished 表示原始的医学数据集中没有加入树中的点,node_finished表示医学数据集中已经加入树中的点;
步骤5:初始化一个迷你MST,选择步骤2中的sorted_mst的最短边的起点P作为起始点加入迷你MST中,同时将P加入node_finished中;
步骤6:计算没有加入树中的点到树中点的距离,除以步骤3中的噪声阈值noise_th作为边的权重,将树中的点,不在树中的点,和对应的边的权重作为一条边的三元组,得到若干个这样的三元组后,组成一个边的数组 edge_array;
步骤7:选择edge_array中权重最小的边,将该边记为 to_add=[start,end,weight],其中,start表示边的起点,end表示终点,weight表示权重;
步骤8:判断to_add的权重是否大于步骤4中迷你MST中所有边的权重的平均值;若是,执行步骤11,否则执行步骤9;
步骤9:将to_add加入到迷你MST中,判断to_add的起点和终点是否在node_unfinished数组中,如果在node_unfinished中,则将其移到 node_finished中,如果不在,说明之前已经加入node_finished中,则不进行任何操作;
步骤10:判断node_unfinished是否还有元素,若是,重复步骤6-步骤9,否则,转到步骤12;
步骤11:选择步骤2中sorted_mst中下一条边,判断端点是否已经加入树中,若是,则继续检查下一条边,若没有,判断该边的权值是否大于步骤 3计算的噪声阈值,若大于,则将node_unfinished中剩下的点标记为离群点,否则的话,从该边开始,重复步骤5-步骤10;
步骤12:判断步骤9得到的迷你MST中的点数是否大于簇最少点数,若是,将该簇标记为正常簇,否则,将簇中所有点标记为离群点。
进一步地,步骤1中Prim算法具体为:
步骤1.1:初始化一棵不包含任何点的树MST;
步骤1.2:从原始数据集中随机选取一个点加入到树MST中,其他点均不在树中;
步骤1.3:计算所有不在树中的点,到树中的点两两点对之间的距离,分别将不在树中的点、树中的点和距离作为边的起点、终点和权值,选取权值最小的一条边加入树中;
步骤1.4:重复步骤1.3,直到数据集中所有点均已加入到树中,得到的树即为最小生成树。
进一步地,步骤7计算权重的方法为两点之间的欧式距离除以噪声阈值:
其中,i为维度索引编号,d为医学数据集中点的维度,x和y为边的两个端点,w为步骤3计算的噪声阈值。
进一步地,步骤12中计算簇中最少点数的方法为:
其中,N为数据集的大小。
与现有技术相比,本发明具有以下有益的技术效果:
本发明先对医学数据计算出一个精确的MST,对所有边进行排序,最短边所在簇一定是医学数据中密度最大的簇,也就是正常的数据,从密度最大的簇开始构造迷你的MST,因为满足终止条件后退出,只是在一部分点上进行运算,对于计算完的数据删除,可以提高算法的效率,通过和现有的其他离群点检测算法进行对比,本发明在合成数据集和真实数据集上都有较好的离群点检测结果。
进一步地,用新的距离度量,欧式距离除以上一次加入的边的权重表示边的权重,可以提高算法对于密度不同的簇的检测效果。
附图说明
图1是在三个簇和若干个离群点数据集上的测试结果,其中(a)为KNN 算法的离群点检测结果,(b)为ABOD算法离群点检测的结果,(c)为LOF 算法离群点检测的结果,(d)为HBOS算法离群点检测的结果,(e)为LODA 算法离群点检测的结果,(f)为MOGAAL算法离群点检测的结果,(g)为 LSCP算法离群点检测的结果,(h)为OCSVM算法离群点检测的结果,(i)为本发明中算法离群点检测的结果;
图2是在四个不同密度簇和6个离群点数据集上的测试结果,其中(a) 为KNN算法的离群点检测结果,(b)为ABOD算法离群点检测的结果,(c) 为LOF算法离群点检测的结果,(d)为HBOS算法离群点检测的结果,(e) 为LODA算法离群点检测的结果,(f)为MOGAAL算法离群点检测的结果, (g)为LSCP算法离群点检测的结果,(h)为OCSVM算法离群点检测的结果,(i)为本发明中算法离群点检测的结果;
图3是在一个簇和若干个离群点数据集上的测试结果,其中(a)为KNN 算法的离群点检测结果,(b)为ABOD算法离群点检测的结果,(c)为LOF 算法离群点检测的结果,(d)为HBOS算法离群点检测的结果,(e)为LODA 算法离群点检测的结果,(f)为MOGAAL算法离群点检测的结果,(g)为 LSCP算法离群点检测的结果,(h)为OCSVM算法离群点检测的结果,(i)为本发明中算法离群点检测的结果;
图4是在真实数据集上的测试结果。
具体实施方式
下面对本发明做进一步详细描述:
本发明通过计算若干个迷你MST来减少数据集的规模,提高计算效率,通过一种新的距离度量来提高算法的精确度。
首先用prim算法计算出一个精确的最小生成树(Minimum Spanning Tree, MST),然后对最小生成树中的边按照从小到大的顺序进行排序。计算出所有边的权重的平均值和标准方差,作为噪声阈值。选择最短边的端点作为迷你MST计算的起点。满足阈值条件后退出,形成一个簇,再循环计算剩下的点。因此,本发明需要两个数组,分别用来记录已经加入MST中的点和还没有加入到MST中的点,记为node_finisheed和node_unfinished。
具体步骤为:
1、用Prim算法计算一个精确的MST,记为emst,每一个元素为一条边,用一个三元组表示,包含边的起点、终点和权值;
具体地,包括
步骤1.1:初始化一棵不包含任何点的树MST;
步骤1.2:从原始数据集中随机选取一个点加入到树MST中,其他点均不在树中;
步骤1.3:计算所有不在树中的点,到树中的点两两点对之间的距离,分别将不在树中的点、树中的点和距离作为边的起点、终点和权值,选取权值最小的一条边加入树中;
步骤1.4:重复步骤1.3,直到数据集中所有点均已加入到树中,得到的树即为最小生成树
2、对emst中的所有边按照从小到大的顺序进行排序,存入数组 sorted_mst;
3、计算emst中所有边的权重的平均值和标准方差,将两者之和作为噪声阈值noise_th;
步骤4:初始化两个数组node_unfinished和node_finished;node_unfinished 表示原始的医学数据集中没有加入树中的点,node_finished表示医学数据集中已经加入树中的点;
步骤5:初始化一个迷你MST,选择步骤2中的sorted_mst的最短边的起点P作为起始点加入迷你MST中,同时将P加入node_finished中;
步骤6:计算没有加入树中的点到树中点的距离,除以步骤3中的噪声阈值noise_th作为边的权重,将树中的点,不在树中的点,和对应的边的权重作为一条边的三元组,得到若干个这样的三元组后,组成一个边的数组 edge_array;
步骤7:选择edge_array中权重最小的边,将该边记为 to_add=[start,end,weight],其中,start表示边的起点,end表示终点,weight表示权重;
其中,i为维度索引编号,d为医学数据集中点的维度,x和y为边的两个端点,w为步骤3计算的噪声阈值;
步骤8:判断to_add的权重是否大于步骤4中迷你MST中所有边的权重的平均值;若是,执行步骤11,否则执行步骤9;
步骤9:将to_add加入到迷你MST中,判断to_add的起点和终点是否在node_unfinished数组中,如果在node_unfinished中,则将其移到 node_finished中,如果不在,说明之前已经加入node_finished中,则不进行任何操作,;
步骤10:判断node_unfinished是否还有元素,若是,重复步骤6-步骤9,否则,转到步骤12;
步骤11:选择步骤2中sorted_mst中下一条边,判断端点是否已经加入树中,若是,则继续检查下一条边,若没有,判断该边的权值是否大于步骤 3计算的噪声阈值,若大于,则将node_unfinished中剩下的点标记为离群点,否则的话,从该边开始,重复步骤5-步骤10;
步骤12:判断步骤9得到的迷你MST中的点数是否大于簇最少点数,若是,将该簇标记为正常簇,否则,将簇中所有点标记为离群点。
簇中最少点数表示为:
其中,N为数据集的大小。
下面结合实施例对本发明做进一步详细描述:
本发明采用3个合成数据集和1个真实的医疗数据集进行测试,选取了 KNN,LOF,ABOD,HBOS,LODA,MOGAAL,LSCP,OCSVM作为对比算法,其中KNN是基于邻近性的方法,LOF是基于密度的方法,ABOD 是基于角度的方法,HBOS(Histogram-based Outlier Score)是一种基于频数直方图的无监督异常点检测算法,LODA(Lightweight On-line Detector ofAnomalies)是一种轻量级的在线的离群点检测方法,能够更好的用在实时数据或数据流上。OCSVM是基于支持向量机的方法,MOGAAL是一种基于深度学习进行离群点检测的方法。
本发明提出了一种用迷你最小生成树的结构和新的阈值度量进行离群点检测的方法,命名为MMOD,实验结果参照附图1到4,其中附图1到3为不同算法在不同合成数据集上的离群点检测结果,其中星号表示离群点,圆点表示正常点。
图1是三个包含3个不同簇和部分离群点的结果。从图1可以看出,KNN 和ABOD算法能够检测出一部分离群点,LOF算法检测出的离群点数相对较少,HBOS把三个簇中的一部分内部点当做是离群点输出,LODA把一个簇中的部分点误认为是离群点,MOGAAL不能检测出离群点,LSCP检测出的离群点较多,但是有两个簇中的正常点被认为是离群点,OCSVM输出的离群点均为正常点,本发明中算法能够检测出最多的离群点,结果相对较好。
图2是包含3个不同密度簇和6个离群点的结果。从图2可以看出,KNN 只能检测出3个离群点,且其中两个为稀疏簇中的正常点,ABOD能够检测出6个离群点,但有两个离群点是正常点,LOF算法检测出了5个正确的离群点,只有一个离群点未检测出来,HBOS和MOGAAL不能检测出正确的离群点,LSCP可以检测出两个离群点,另外五个则是正常点被误认为是离群点,OCSVM可以检测出5个离群点,但是同时也把稀疏簇中的三个正常点认为是离群点输出,本发明算法能够区分出所有的正常点和离群点。
图3是只包含一个正常簇,外围都是离群点的数据集。从图3可以看出, MOGAAL未输出任何的离群点,OCSVM输出的两个离群点均为正常点, LOF,HBOS,LODA均把一部分正常点当做是离群点输出,而又一部分离群点未检测出来,LSCP输出了少量离群点,KNN,ABOD和本发明的算法都能较好的检测出所有离群点。
此外,为了验证本发明在判断医学数据上的有效性,选取了Parkinsons 数据集,一共有50个数据,其中有两个是患病的,其他为正常。每个数据有 22个特征维度。用precision,recall和F-measure表示算法的效果,其中, precision表示的算法的精确度,recall指的是召回率,F-measure是两者的调和平均,三个度量指标的取值均在-1到1之间,值越大表明算法效果越好。各个算法结果参照表1和图4。
表1不同算法在Pakinsons数据集上的测试结果
由表1可以看出,HBOS算法的精确度达到最大值,但是召回率比较低, KNN,LODA,LSCP算法的精确度相对较好,但是同样召回率比较低,本发明的算法在精确度上较好,召回率可以达到最大值,也就是说本发明的算法能够检测出所有的离群点,即医学数据中的异常数据,因此,本发明的算法和其他离群点检测算法相比F-measure取值最大,说明效果最好。图4将不同算法在三个度量指标上的结果以折线图的形式直观显示出来,从图中可以看出,本发明的算法结果相对较好。
- 一种基于噪声阈值距离度量的离群点检测方法
- 一种基于Shearlet变换的自适应阈值地震随机噪声压制方法