热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器学习feature的异常检测与处理

原文链接:https:blog.csdn.netqq_41080850articledetails866958461什么是异常值?模型通常是对整体样本

原文链接:https://blog.csdn.net/qq_41080850/article/details/86695846


1 什么是异常值?


  1. 模型通常是对整体样本数据结构的一种表达方式,这种表达方式通常抓住的是整体样本一般性的性质,而那些在这些性质上表现完全与整体样本不一致的点,我们就称其为异常点

  2. 异常点在某些场景下极为重要,如疾病预测,通常健康人的身体指标在某些维度上是相似,如果一个人的身体指标出现了异常,那么他的身体情况在某些方面肯定发生了改变,当然这种改变并不一定是由疾病引起(通常被称为噪音点),但异常的发生和检测是疾病预测一个重要起始点。相似的场景也可以应用到信用欺诈,网络攻击等等。


2 异常值的检测方法


1. 简单统计


  • 直接观察整体数据,使用pandas.describe()观察数据的统计描述(统计数据应当为连续性)
  • 简单使用散点图,从图中即可看出

在这里插入图片描述


2. 3σ\sigmaσ原则

前提条件:数据分布需要服从正态分布
这个是根据正态分布的性质而得出的方法
一个正态分布的横轴区间(μ−3σ,μ+3σ)(\mu-3\sigma,\mu+3\sigma)(μ3σ,μ+3σ)内的面积为99.730020%。
若是不服从正态分布,可以使用原理n倍标准差来描述,具体n由应用场景确定


3.箱型图

使用箱型图的**四方位居(IQR)**对异常进行检测,也叫Tukey`s test

举例:

#计算df中某列的25%分位,下分位
Q1 = np.percentile(df[col], 25)
#计算df中某列的75%分位,上分位
Q2 = np.percentile(df[col], 75)
IQR = Q2-Q1

一般使用IQR的1.5倍为标准:


  • 值大于上四分位+1.5*IQR为异常值
  • 值小于"下四分位-1.5*IQR"为异常值


举例:

这只是举例检测异常的一个函数


def detect_outliers(df,n,features):&#39;&#39;&#39;features&#xff1a;检测这个特征集然后检测特征集中某个特征是否含有异常值&#xff0c;将含有异常值的index记录下来若是某个index中(即某行)含有的异常值超过n个&#xff0c;就将其加入到outlier_indices&#39;&#39;&#39;outlier_indices&#61;[]for col in features:# 1st quartile(25%)Q1 &#61; np.percentile(df[col],25)#3rd quartile (75%)Q3 &#61; np.percentile(df[col],75)# 四分位IQR &#61; Q3-Q1#异常值范围outlier_step &#61; 1.5*IQRoutlier_list_col &#61; df[(df[col]<Q1-outlier_step)|(df[col]>Q3 &#43; outlier_step)].indexoutlier_indices.extend(outlier_list_col)outlier_indices &#61; Counter(outlier_indices)multiple_outliers &#61; list(k for k,v in outlier_indices.items() if v > n)return multiple_outliers

使用seaborn中的boxplot或者boxenplot画图
图上的菱形黑点就是异常值

在这里插入图片描述


4. 基于模型检测

这种方法一般会构建一个概率分布模型&#xff0c;并计算对象符合该模型的概率&#xff0c;把具有低概率的对象视为异常点。


  • 如果模型是簇的集合&#xff0c;则异常是不显著属于任何簇的对象&#xff1b;
  • 如果模型是回归时&#xff0c;异常是相对远离预测值的对象。

离群点的概率定义:离群点是一个对象&#xff0c;关于数据的概率分布模型&#xff0c;它具有低概率。这种情况的前提必须知道数据集服从什么分布&#xff0c;如果估计错误就造成了重尾分布。

比如特征工程中的RobustScaler方法&#xff0c;在做数据特征值缩放的时候&#xff0c;它会利用数据特征的分位数分布&#xff0c;将数据根据分位数划分为多段&#xff0c;只取中间段来做缩放&#xff0c;比如只取25%分位数到75%分位数的数据做缩放。这样减小了异常数据的影响。

优缺点


  • &#xff08;1&#xff09;有坚实的统计学理论基础&#xff0c;当存在充分的数据和所用的检验类型的知识时&#xff0c;这些检验可能非常有效&#xff1b;
  • &#xff08;2&#xff09;对于多元数据&#xff0c;可用的选择少一些&#xff0c;并且对于高维数据&#xff0c;这些检测可能性很差。

5.基于近邻度的离群点检测

统计方法是利用数据的分布来观察异常值&#xff0c;一些方法甚至需要一些分布条件&#xff0c;而在实际中数据的分布很难达到一些假设条件&#xff0c;而在实际中数据的分布很难达到一些假设条件&#xff0c;在使用上有一定的局限性

确定数据集的有意义的邻近性度量比确定它的统计分布更容易。这种方法比统计学方法更一般、更容易使用&#xff0c;因为一个对象的离群点得分由到它的k-最近邻&#xff08;KNN&#xff09;的距离给定。

需要注意的是&#xff1a;离群点得分对kkk取值高度敏感。如果k太小&#xff0c;则少量的邻近离群点可能导致较低的离群点得分&#xff1b;如果KKK太大&#xff0c;则点数少于kkk的簇中所有的对象可能都成了离群点。为了使该方案对于kkk的选取更具有鲁棒性&#xff0c;可以使用kkk个最近邻的平均距离。

优缺点&#xff1a;


  1. 简单&#xff1b;
  2. 缺点&#xff1a;基于邻近度的方法需要O(m2)O(m^2)O(m2)时间&#xff0c;大数据集不适用&#xff1b;
  3. 该方法对参数的选择也是敏感的&#xff1b;
  4. 不能处理具有不同密度区域的数据集&#xff0c;因为它使用全局阈值&#xff0c;不能考虑这种密度的变化。

6. 基于密度的离群点检测

从基于密度的观点来说&#xff0c;离群点是在低密度区与的对象。

基于密度的离群点检测与基于邻近度的离群点检测密切相关&#xff0c;因为密度通常用邻进度定义。


  • 一种常用的定义密度的方法是&#xff0c;定义密度为到k个最近邻的平均距离的倒数。如果该距离小&#xff0c;则密度高&#xff0c;反之亦然。
  • 另一种密度定义是使用DBSCAN聚类算法使用的密度定义&#xff0c;即一个对象周围的密度等于该对象指定距离d内对象的个数。

优缺点&#xff1a;


  1. 给出了对象是离群点的定量度量&#xff0c;并且即使数据具有不同的区域也能够很好的处理&#xff1b;
  2. 与基于距离的方法一样&#xff0c;这些方法必然具有O(m2)的时间复杂度。对于低维数据使用特定的数据结构可以达到O(mlogm)&#xff1b;
  3. 参数选择是困难的。虽然LOF算法通过观察不同的k值&#xff0c;然后取得最大离群点得分来处理该问题&#xff0c;但是&#xff0c;仍然需要选择这些值的上下界。

7.基于聚类的方法来做异常点检测

一个对象是基于聚类的离群点&#xff0c;如果该对象不属于任何簇&#xff0c;那么该对象属于离群点

离群点对初始聚类的影响:

如果通过聚类检测离群点&#xff0c;则由于离群点影响聚类&#xff0c;存在一个问题&#xff1a;结构是否有效。
这也是k-means算法的缺点&#xff0c;对离群点敏感。
为了处理该问题&#xff0c;可以使用如下方法&#xff1a;对象聚类&#xff0c;删除离群点&#xff0c;对象再次聚类&#xff08;这个不能保证产生最优结果&#xff09;。

优缺点&#xff1a;


  1. 基于线性和接近线性复杂度&#xff08;k均值&#xff09;的聚类技术来发现离群点可能是高度有效的&#xff1b;
  2. 簇的定义通常是离群点的补&#xff0c;因此可能同时发现簇和离群点&#xff1b;
  3. 产生的离群点集和它们的得分可能非常依赖所用的簇的个数和数据中离群点的存在性&#xff1b;
  4. 聚类算法产生的簇的质量对该算法产生的离群点的质量影响非常大。

8.专门的离群点检测

其实以上说到聚类方法的本意是是无监督分类&#xff0c;并不是为了寻找离群点的&#xff0c;只是恰好它的功能可以实现离群点的检测&#xff0c;算是一个衍生的功能。

除了以上提及的方法&#xff0c;还有两个专门用于检测异常点的方法比较常用&#xff1a;One Class SVM和Isolation Forest&#xff0c;详细内容不进行深入研究。


3 异常值的处理方法


  • 删除含有异常值的记录
  • 视为缺失值&#xff1a;将异常值视为缺失值&#xff0c;按照缺失值进行处理
  • 平均值修正&#xff1a;可用前后两个观测值的平均值修正该异常值
  • 不处理&#xff1a;不直接在具有异常值的数据集上进行数据挖掘

是否要删除异常值可根据实际情况考虑。因为一些模型对异常值不很敏感&#xff0c;即使有异常值也不影响模型效果&#xff0c;但是一些模型比如逻辑回归LR对异常值很敏感&#xff0c;如果不进行处理&#xff0c;可能会出现过拟合等非常差的效果。


推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • SSL协议、TLS协议,使用哪一种更安全?
    在金融银行业,保护机密信息的安全至关重要。由于财务记录完全通过在线数据库维护,因此实施保护客户、银行和金融机构免受黑客攻击的安全功能比以往任何时候都更加重要。安全套接字层(SSL) ... [详细]
  • 找出字符串中重复字符
    2019独角兽企业重金招聘Python工程师标准packagejavaBasic;importjava.util.HashMap;importjava.util.Map; ... [详细]
  • Linux负载均衡LVS(IPVS)
    一、LVS简介LVS是LinuxVirtualServer的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,现在已经是Linux ... [详细]
  • 自编码器(Autoencoder,AE)基本意思就是一个隐藏层的神经网络,输入输出都是x,并且输入维度一定要比 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
  • PRML读书会第十四章 Combining Models(committees,Boosting,AdaBoost,决策树,条件混合模型)...
    主讲人网神(新浪微博:豆角茄子麻酱凉面)网神(66707180)18:57:18大家好,今天我们讲一下第14章combiningmodel ... [详细]
  • 支持向量机训练集多少个_25道题检测你对支持向量机算法的掌握程度
    介绍在我们学习机器算法的时候,可以将机器学习算法视为包含刀枪剑戟斧钺钩叉的一个军械库。你可以使用各种各样的兵器,但你要明白这些兵器是需要在合适的时间合理 ... [详细]
author-avatar
Hcl
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有