离群点检测Outlier Detection

在《新奇检测Novelty Detection》我们已经介绍了关于异常检测的基本理论、方法和基于python算法one-class SVM实现其中新奇检测的基本逻辑。本篇介绍异常检测的另外一个主题——离群点检测。

离群点检测是异常值检测的一种,其思路与新奇检测一致;区别在于离群点检测的原始观测数据集中已经包含异常值,而新奇检测则不包括。

以下是利用Python中SKlearn机器学习库的EllipticEnvelope实现对离群点的检测。EllipticEnvelope是Sklearn协方差估计中对高斯分布数据集的离群值检验方法,且该方法在高维度下的表现效果欠佳。

  1. #coding:utf-8
  2. import numpy as np
  3. from sklearn.covariance import EllipticEnvelope
  4. xx, yy = np.meshgrid(np.linspace(-5, 5, 500), np.linspace(-5, 5, 500))
  5. # 生成训练数据
  6. X = 0.3 * np.random.randn(100, 2)
  7. X_train = np.r_[X+2, X-2]
  8. # 生成新用于测试的数据
  9. X = 0.3 * np.random.randn(10, 2)
  10. X_test = np.r_[X + 2, X - 2]
  11. # 模型拟合
  12. clf = EllipticEnvelope()
  13. clf.fit(X_train)
  14. y_pred_train = clf.predict(X_train)
  15. y_pred_test = clf.predict(X_test)
  16. print ("novelty detection result:",y_pred_test)


 

以下为代码输出结果:

  1. ('novelty detection result:', array([ 1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1]))


 


在该函数中,可配置的参数如下:

  1. class sklearn.covariance.EmpiricalCovariance(store_precision=True, assume_centered=False)


 

对比Python的这两种异常值检测方法,当数据集在高斯分布下时,基于鲁棒协方差估计的EmpiricalCovariance效果要好于OneClassSVM算法;但在非高斯分布情况下,OneClassSVM的应用效果要好于EmpiricalCovariance(例如数据集中包含两个核心)。

以下是在三种不同数据集的分布状态下,二者的应用效果对比:

在高斯分布下,EmpiricalCovariance效果好于OneClassSVM。plot_outlier_detection_0011111
在非高斯分布下,OneClassSVM效果好于EmpiricalCovariance。
plot_outlier_detection_0021111
在非高斯分布下,OneClassSVM效果好于EmpiricalCovariance。
plot_outlier_detection_0031111

除了上述算法外,Python 的Sklearn机器学习库还提供了EmpiricalCovariance和MinCovDet两种算法。EmpiricalCovariance是基于最大似然协方差估计的算法。MinCovDet是基于最小协方差行列式(Minimum Covariance Determinant,简称MCD)的算法,是鲁棒协方差估计。


 

尾巴

但整体来看,离群值检测的方法还主要集中在基于统计模型的监测上,这种算法的应用局限性在文章《新奇检测Novelty Detection》中已经提到。Python 的SKlearn中对于异常检测的算法支持不够丰富,而且其中除了OneClassSVM的使用场景相对广泛之外,其余的算法应用型比较局限。


====================【好书推荐,我为自己代言】====================

《Python数据分析与数据化运营》第二版上市啦!

50+数据流工作知识点
14个数据分析与挖掘主题
8个综合性运营分析案例
涵盖会员、商品、流量、内容4大主题
360°把脉运营问题并贴合数据场景落地


本书主要基于Python实现,其中主要用到的计算库是numpy、pandas和sklearn,其他相关库还包括:
  • 标准库:re、time、datetime、json、 base64、os、sys、cPickle、tarfile
  • Python调用R的rpy2
  • 统计分析:Statsmodels
  • 中文处理:结巴分词
  • 文本挖掘:Gensim
  • 数据挖掘和算法:XGboost、gplearn、TPOT
  • 爬虫和解析:requests、Beautiful Soup、xml
  • 图像处理:OpenCV和PIL/Pollow
  • 数据读取:xlrd、pymongo、pymysql
  • 数据预处理:imblearn
  • 展示美化类:Matplotlib、pyecharts、graphviz、prettytable、wordcloud、mpl_toolkits、pydotplus
如果你对以下内容感兴趣,那么本书将值得一看:
  • KMeans聚类的自动K均值的确立方法
  • 基于软方法的多分类模型组合评估模型的应用
  • 基于自动下探(下钻、细分)的应用
  • 基于增量学习的多项式贝叶斯分类
  • pipeline管道技术的应用
  • 基于超参数的自动参数值的优化方法
  • 特征自动选择
  • 文本分类、文本主题挖掘
  • 基于自动时间序列ARIMA的P、D、Q的调整
  • python决策树规则输出
  • 基于自定义图像的文本标签云
  • 非结构化数据,例如图像、音频、文本等处理
  • 对象持久化处理
  • 如何使用Python调用R实现数据挖掘
  • 自动化学习:增加了对于自动化数据挖掘与机器学习的理论、流程、知识和应用库介绍,并基于TPOT做自动化回归和分类学习案例演示
有关这本书的写作感受、详细内容介绍、附件(含数据和代)下载、关键知识和方法以及完整书稿目录,请访问《Python数据分析与数据化运营》第二版出版了!要购买此书,可以去京东当当天猫等查看。

发表评论

电子邮件地址不会被公开。 必填项已用*标注