首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python异常值检测——kNN算法

异常值检验发现和剔除异常观测值的统计检验方法。异常值或离群值,是观测或试验过程中由于过失误差破坏了原有统计规律性而产生的观测值。

异常值检验在许多生物工程、环境工程等相关领域有着极为广泛的应用,其可以有利于做环境监测和环境治理,生物重点疫苗研制等等。

异常值检验方法有很多,针对不同数据特点,时间序列数据和截面数据的检测方法不完全相同,其时常要考虑到数据特性,本次主要介绍相关的时序数据异常值检测算法

今天介绍kNN算法(k--NearestNeighbor算法),又称k-近邻算法。简单来说就是近朱者赤近墨者黑。kNN的工作原理是对数据进行分类,整个过程分为三步:

1. 假设有一个带有标签的样本数据集(训练样本集),其中包含每条数据与所属分类的对应关系。

2. 输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较。

A. 计算新数据与样本数据集中每条数据的距离。

通常距离的度量用欧式距离计算,即对于两个n维向量x和y,两者的欧式距离定义为:

其他距离度量方式,如曼哈顿距离

再比如闵可夫斯基距离

其实,欧式距离是闵可夫斯基距离距离在p=2时的特例,而曼哈顿距离是p=1时的特例。

B. 对求得的所有距离进行排序(从小到大,越小表示越相似)。

C. 取前 k (k 一般小于等于 20 )个样本数据对应的分类标签。

3. 求 k 个数据中出现次数最多的分类标签作为新数据的分类。

简单来说,对于给定训练数据,输入新数据,在训练数据中找到和新数据最邻近的k个数据集,如果k个数据集中的多数属于某个类,则把新数据分为这个类。

实现过程:

读入数据

2. 绘制三维散点图

3.得到异常点检测图

以上详细代码可关注微信公众号“TES工作室”获取。

kNN小结:

kNN算法中k值的选择对于k近邻算法得结果会有比较大的影响,较小的k值会导致模型整体变得更为复杂,容易出现过拟合,较大的k值容易导致学习的近似误差增大,预测容易发生错误,因此对于k值的选择需要慎重。

kNN算法检测时序数据异常值的优势在于训练时间短,对数据无假设,准确性高,并比较适合样本容量大的雷雨自动分类,可用于非线性回归,缺点是计算量大,对于稀有类别准确率低,可解释性差。

参考文献:

[1]陶晶. 基于聚类和密度的离群点检测方法[D]. 华南理工大学, 2014.

[2]王雪英. 离群点预处理及检测算法研究[D]. 西南交通大学, 2009.

[3]胡婷婷. 数据挖掘中的离群点检测算法研究[D]. 厦门大学, 2014.

[4]谭(美). 数据挖掘导论[M]. 人民邮电出版社, 2007.

[5]刘建.Pinard https://www.cnblogs.com/pinard/p/9314198.html

出品/TES工作室

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200802A0CFEI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券