基于KNN的outlier detection是一种很简单高效的离群点检测算法,其核心思想是:通过计算对象与其k个近邻的距离之和作为离群值OF,OF值越高,越有可能是离群点。

基于KNN的outlier detection的Matlab版实现:

function [outputArg1,outputArg2] = KNN(inputArg1,inputArg2)
%KNN 此处显示有关此函数的摘要
%   此处显示详细说明
x=load('Normalization_wbc.txt');
y=load('Normalization_wbc.txt');
ADLabels=load('Label_wbc.txt');
[m,n]=size(x);
k=10;%近邻个数
Abnormal_number=20;%离群对象个数
Dist=pdist2(x,x);
SortDist=sort(Dist,2,'ascend');
Nei_k=SortDist(:,1:k+1);%因为对象离其自身的距离为0,所以再多考虑一个对象
OF=sum(Nei_k,2);
auc = Measure_AUC(OF, ADLabels);
disp(auc)
[OF_value,index_number]=sort(OF);
ODA_AbnormalObject_Number=index_number(m-Abnormal_number+1:end,:);%outlier detection algorithm 算法认定的异常对象的编号
ODA_NormalObject_Number=index_number(1:m-Abnormal_number,:);%outlier detection algorithm算法认定的正常对象的编号
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%算法实际的检测率/准确率/误报率等评价指标的计算%%%%%%%%%%%%%%%%%%%%%%%%
Label=load('Label_wbc.txt');
%%%%Real_NormalObject_Number表示数据集中真正的正常对象的编号,Real_AbnormalObject_Number表示数据集中真正异常对象的编号
[Real_NormalObject_Number,Real_Normal]=find(Label==0);
[Real_AbnormalObject_Number,Real_Abnormal]=find(Label==1);%正例是异常对象,反例是正常对象
TP=length(intersect(Real_AbnormalObject_Number,ODA_AbnormalObject_Number));
FP=length(Real_AbnormalObject_Number)-TP;
TN=length(intersect(Real_NormalObject_Number,ODA_NormalObject_Number));
FN=length(Real_NormalObject_Number)-TN;%准确率
ACC=(TP+TN)/(TP+TN+FP+FN);
fprintf('准确率ACC= %8.5f\n',ACC*100)
%检测率==查全率=R
DR=TP/(TP+FN);
fprintf('检测率DR= %8.5f\n',DR*100)
%查准率P
P=TP/(TP+FP);
fprintf('查准率P= %8.5f\n',P*100)
%误报率
FAR=FP/(TN+FP);
fprintf('误报率FAR= %8.5f\n',FAR*100)%绘制混淆矩阵
Confusion_matrix=[TP,FN;FP,TN];
Figure_Confusion_matrix=heatmap(Confusion_matrix);
end

请配合计算AUC值的函数一起使用

function AccumAuc = Measure_AUC(Scores, Labels)
% Area Under Curve for Amonaly
%
% Scores: predicted scores;
% Labels: groundtruth labels, PosLabel = 1& NegLabel = 0;NumInst = length(Scores);% sort Scores and Labels
[Scores, index] = sort(Scores, 'descend');
Labels = Labels(index);PosLabel = 1;
NegLabel = 0;NumPos = length(find(Labels == PosLabel));
NumNeg = length(find(Labels == NegLabel));AccumPos = 0;
AccumNeg = 0;
AccumAuc = 0;UnitPos = 1 / NumPos;
UnitNeg = 1 / NumNeg;i = 1;
while i <= NumInsttemp = AccumPos;if (i < NumInst - 1) && (Scores(i) == Scores(i + 1))while (i < NumInst - 1) && (Scores(i) == Scores(i + 1))if Labels(i) == NegLabelAccumNeg = AccumNeg + 1;elseif Labels(i) == PosLabelAccumPos = AccumPos + 1;elsedisp('Label is not defined!');endi = i + 1;endif Labels(i) == NegLabelAccumNeg = AccumNeg + 1;elseif Labels(i) == PosLabelAccumPos = AccumPos + 1;elsedisp('Label is not defined!');endAccumAuc = AccumAuc + (AccumPos + temp) * UnitPos * AccumNeg * UnitNeg / 2;AccumNeg = 0;elseif Labels(i) == NegLabelAccumNeg = AccumNeg + 1;AccumAuc = AccumAuc + AccumPos * UnitPos * AccumNeg * UnitNeg;AccumNeg = 0;elseif Labels(i) == PosLabelAccumPos = AccumPos + 1;elsedisp('Label is not defined');endendi = i + 1;
end

基于KNN的离群点检测算法的Matlab版实现相关推荐

  1. 离群点检测算法——LOF(Local Outlier Factor)

    异常检测 异常检测的实质是寻找观测值和参照值之间有意义的偏差.数据库中的数据由于各种原因常常会包含一些异常记录,对这些异常记录的检测和解释有很重要的意义.异常检测目前在入侵检测.金融欺诈.股票分析等领 ...

  2. 解读ICDE‘22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法

    摘要:本文提出了两个用于无监督的具备可解释性和鲁棒性时间序列离群点检测的自动编码器框架. 本文分享自华为云社区<解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法&g ...

  3. 异常检测/离群点检测算法汇总

    不存在普遍意义上的最优模型,不过有些模型的表现一直不错,建议优先考虑.对于大数据量和高纬度的数据集,Isolation Forest算法的表现比较好.小数据集上,简单算法KNN和MCD的表现不错. 模 ...

  4. python离群点检测例子_异常点/离群点检测算法

    异常点/离群点检测算法 发布时间:2018-07-24 14:45, 浏览次数:456 sklearn中关于异常检测的方法主要有两种: 1).novelty detection:当训练数据中没有离群点 ...

  5. 基于改进FCOS的钢带表面缺陷检测算法

    本文转载自人工智能技术与咨询.新机器视觉 摘要 针对现有钢带表面缺陷检测所存在的检测效率低.适用范围有限等缺陷,提出一种基于改进FCOS的钢带表面缺陷检测算法.该算法使用含形变卷积的卷积神经网络提取缺 ...

  6. 大盘点 | 基于Range-View的数据处理及3D检测算法

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 后台回复[自动驾驶课程]获取全套图宾根大学自动驾驶入门课程! 基于Range ...

  7. java基于聚类的离群点检测_挑子学习笔记:基于两步聚类的离群点检测

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/anomaly_detection.html 本文主要针对IBM SPSS Modeler 18.0中离群点检 ...

  8. java基于聚类的离群点检测_基于两步聚类的离群点检测

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/anomaly_detection.html 本文主要针对IBM SPSS Modeler 18.0中离群点检 ...

  9. 基于用户行为建模和异常检测算法的内部威胁检测

    Insider Threat Detection Based on User Behavior Modeling and Anomaly Detection Algorithms 内部威胁是授权用户的 ...

  10. 中科院张士峰:基于深度学习的通用物体检测算法对比探索

    https://www.toutiao.com/a6674792954369933838/ 人工智能论坛如今浩如烟海,有硬货.有干货的讲座却百里挑一.由中国科学院大学主办,中国科学院大学学生会承办,读 ...

最新文章

  1. ipad html 自定义裁剪图片大小,移动端图片裁剪上传插件 Mavatar.js(原创)
  2. UA MATH567 高维统计专题3 含L1-norm的凸优化6 Stochastic Gradient Descent简介
  3. 一年学遍吴恩达、李飞飞、周志华等16大精品课!(ML、CV、NLP一应俱全)
  4. 构建高性能ASP.NET站点
  5. 最新麦子学院33GWeb前端+Web前端开发从入门到精通完整版
  6. 单片机入门教程之认识单片机
  7. Java集合高频面试题(最新版)
  8. P1137【旅行计划】
  9. 将C盘里的Users文件夹移动到D盘
  10. 杀毒软件需要开源吗?
  11. QT动态翻译中英文语言
  12. 线性代数(2)向量线性组合、向量内积的意义
  13. PHPStudy 安装amqp扩展
  14. 【观察】华为IoT首席架构师王启军:云计算时代全栈工程师的养成
  15. 计算机组成原理调研报告,[调研报告]计算机组成原理课程设计报告模板2011.doc...
  16. 算法可以申请专利么_国内提供计算机视觉(CV)算法岗位的公司名单
  17. DNA序列存储为tfr文件并读取
  18. PAT(乙级)1076.Wifi密码(15)
  19. 【JZOJ4920】降雷皇
  20. python股票接口_小小- python用雅虎财经(yahoo)接口写简易爬虫获取A股上证所有股票(可以单独选择个股)历史数据...

热门文章

  1. 基于51单片机的温度检测监测报警系统设计
  2. 将文件从ubuntu拷贝到linux开发板
  3. 工业数据采集网关的特点及应用场景
  4. 计算机编辑文档教程,列举Word文档中常用编辑操作
  5. 数梅派4b 显示器_无显示器配置树莓派4B
  6. 计算机232接口接线,9针rs232串口接线图以及接线方法
  7. Stolz定理及其证明
  8. linux主机安装sctp协议栈
  9. WIN10环境下VS2003的安装
  10. 【Funpack】蓝牙技术 QA