原文地址:https://machinelearningmastery.com/how-to-identify-outliers-in-your-data/
许多机器学习算法对输入数据特征值的范围和分布敏感。异常值(离群值)会在训练过程中干扰机器学习的结果,造成训练时间拉长,模型准确率降低,效果极差等结果。
甚至在预测模型之前的准备训练数据阶段,异常值会误导数据的表达,以及数据的解释性。异常值会在描述性统计诸如均值、标准差;在绘制直方图、散点图中干扰数据的总结性分布,压缩数据的主体。
异常值检测建模:
异常值是远离其他观察对象的极值。比如,在正态分布中,异常值可能就是分布尾巴部分的值。
识别异常值的过程在数据挖掘和机器学习中都有很多叫法,比如异常值挖掘、离群点建模、新奇点发现、离群值检测等。
离群点检测的主要方式有:
a、极值分析:在基础数据分布下识别统计尾部。
b、概率统计模型:从数据的概率模型中确定不可能的实例。比如高斯混合模型优化使用期望最大化。
c、线性模型:使用投影方法利用数据的线性相关性对数据进行降维操作。比如,主成分分析,如果数据存在较大残差很有可能就是离群值。
d、基于近邻度的模型:通过聚类、密度或最近邻分析出原理数据簇的数据实例。
e、信息论模型:离群值是那些增加了数据集复杂性的实例。
f、高维数据异常检测:在子空间搜索异常值的方式突破了高维数据中距离的度量(维度诅咒)【不是很理解】。
正式开始:
针对离群点检测的方法和研究有很多。提出一些假设,并在你能非常清楚的观察到这些假设对模型的表现或者准确度度量上发生的作用的时候设计一些实验。
我建议通过极值分析、近邻分析、投影方法逐步进行处理。
一、极值分析:
用极值方法分析,不需要你了解高深的统计方法去观察、分析和过滤极值。
a、关注单变量方法;
b、用散点图、直方图、箱型图和晶须图来查找极值;
c、假设一个分布(比如高斯),然后查找大于均值2到3个标准差的值或者与第一个或者第三个四分位数相差1.5倍的值。
d、从训练集中过滤掉离群候选值,并且评估模型的表现。
二、近邻分析:
如果你已经对极值进行了分析,可以考虑接下来用近邻分析。
a、用类似k-means的聚类方法识别数据的自然簇;
b、标记簇的质心;
c、找出那些远离质心一定距离或者多少百分比的数据实例;
d、从训练集中过滤掉离群候选值,并且评估模型的表现。
三、投影方法:
投影方法是相对简单的方法,能快速突出异常值。
a、用投影方法将数据总结成2维(比如PCA,SOM或者Sammon's mapping);
b、可视化映射并且手动标记异常值;
c、用近邻算法对投影数据进行异常点识别;
d、从训练集中过滤掉离群候选值,并且评估模型的表现。
四、对离群点健壮的算法:
比如使用中指而非均值,比如决策树。
注:
效果较好的两个离群点算法LOF 以及 Isolation Forest
LOF通过计算一个数值score来反映一个样本的异常程度。这个数值的大致意思是:一个样本点周围的样本点所处位置的平均密度比上该样本点所在位置的密度。比值越大于1,则该点所在位置的密度越小于其周围样本所在位置的密度,这个点就越有可能是异常点。
LOF
在孤立森林(iForest)中,异常被定义为“容易被孤立的离群点 (more likely to be separated)”,可以将其理解为分布稀疏且离密度高的群体较远的点。 在特征空间里,分布稀疏的区域表示事件发生在该区域的概率很低,因而可以认为落在这些区域里的数据是异常的。孤立森林是一种适用于连续数据(Continuous numerical data)的无监督异常检测方法,即不需要有标记的样本来训练,但特征需要是连续的。对于如何查找哪些点容易被孤立(isolated),iForest使用了一套非常高效的策略。在孤立森林中,递归地随机分割数据集,直到所有的样本点都是孤立的。在这种随机分割的策略下,异常点通常具有较短的路径。
直观上来讲,那些密度很高的簇是需要被切很多次才能被孤立,但是那些密度很低的点很容易就可以被孤立。
Isolation Forest
领取专属 10元无门槛券
私享最新 技术干货