机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)

通常的协方差最大似然估计对数据集里的异常点(outliers)是非常敏感的。在这样的情况下,使用稳健的协方差估计,保证对即使数据集存在错误的观测,估计量也是一致的。

极小极大协方差行列式估计

极小极大协方差行列式估计量(Minimum Covariance Determinant Estimator, MCDE), 通常被用来估计高度污染(contaminated)的数据集的协方差。数据集的受污染程度,可以达到
nsamples−nfeatures−12\dfrac{n_{samples}-n_{features}-1}{2}2nsamples​−nfeatures​−1​个离群点。它的基本思想是,找到nsamples+nfeatures+12\dfrac{n_{samples}+n_{features}+1}{2}2nsamples​+nfeatures​+1​个观测,它们的经验协方差有最小的行列式。这样就产生了一个“纯”的观测子集,根据它计算标准的协方差估计量。为了弥补估计量仅从一部分原始数据得到的偏差,我们需要经过一个校正步,并与稳健的协方差估计作比较。

评价

在这个例子里,我们在受污染的正态总体的数据集上对比不同估计量的估计误差:

  • 完整数据集的均值和经验协方差,它受离群点的影响。

  • 稳健的MCDE误差较小,但需满足“样本数大于特征数”的条件。

  • 观测的均值和协方差是已知的,这里作为perfect估计,方便估计量的比较。

实例代码

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_managerfrom sklearn.covariance import EmpiricalCovariance, MinCovDet# example settings
n_samples = 80
n_features = 5
repeat = 10range_n_outliers = np.concatenate((np.linspace(0, n_samples / 8, 5),np.linspace(n_samples / 8, n_samples / 2, 5)[1:-1])).astype(np.int)# definition of arrays to store results
err_loc_mcd = np.zeros((range_n_outliers.size, repeat))
err_cov_mcd = np.zeros((range_n_outliers.size, repeat))
err_loc_emp_full = np.zeros((range_n_outliers.size, repeat))
err_cov_emp_full = np.zeros((range_n_outliers.size, repeat))
err_loc_emp_pure = np.zeros((range_n_outliers.size, repeat))
err_cov_emp_pure = np.zeros((range_n_outliers.size, repeat))# computation
for i, n_outliers in enumerate(range_n_outliers):for j in range(repeat):rng = np.random.RandomState(i * j)# generate dataX = rng.randn(n_samples, n_features)# add some outliersoutliers_index = rng.permutation(n_samples)[:n_outliers]outliers_offset = 10. * \(np.random.randint(2, size=(n_outliers, n_features)) - 0.5)X[outliers_index] += outliers_offsetinliers_mask = np.ones(n_samples).astype(bool)inliers_mask[outliers_index] = False# fit a Minimum Covariance Determinant (MCD) robust estimator to datamcd = MinCovDet().fit(X)# compare raw robust estimates with the true location and covarianceerr_loc_mcd[i, j] = np.sum(mcd.location_ ** 2)err_cov_mcd[i, j] = mcd.error_norm(np.eye(n_features))# compare estimators learned from the full data set with true# parameterserr_loc_emp_full[i, j] = np.sum(X.mean(0) ** 2)err_cov_emp_full[i, j] = EmpiricalCovariance().fit(X).error_norm(np.eye(n_features))# compare with an empirical covariance learned from a pure data set# (i.e. "perfect" mcd)pure_X = X[inliers_mask]pure_location = pure_X.mean(0)pure_emp_cov = EmpiricalCovariance().fit(pure_X)err_loc_emp_pure[i, j] = np.sum(pure_location ** 2)err_cov_emp_pure[i, j] = pure_emp_cov.error_norm(np.eye(n_features))# Display results
font_prop = matplotlib.font_manager.FontProperties(size=11)
plt.subplot(2, 1, 1)
lw = 2
plt.errorbar(range_n_outliers, err_loc_mcd.mean(1),yerr=err_loc_mcd.std(1) / np.sqrt(repeat),label="Robust location", lw=lw, color='m')
plt.errorbar(range_n_outliers, err_loc_emp_full.mean(1),yerr=err_loc_emp_full.std(1) / np.sqrt(repeat),label="Full data set mean", lw=lw, color='green')
plt.errorbar(range_n_outliers, err_loc_emp_pure.mean(1),yerr=err_loc_emp_pure.std(1) / np.sqrt(repeat),label="Pure data set mean", lw=lw, color='black')
plt.title("Influence of outliers on the location estimation")
plt.ylabel(r"Error ($||\mu - \hat{\mu}||_2^2$)")
plt.legend(loc="upper left", prop=font_prop)plt.subplot(2, 1, 2)
x_size = range_n_outliers.size
plt.errorbar(range_n_outliers, err_cov_mcd.mean(1),yerr=err_cov_mcd.std(1),label="Robust covariance (mcd)", color='m')
plt.errorbar(range_n_outliers[:(x_size // 5 + 1)],err_cov_emp_full.mean(1)[:(x_size // 5 + 1)],yerr=err_cov_emp_full.std(1)[:(x_size // 5 + 1)],label="Full data set empirical covariance", color='green')
plt.plot(range_n_outliers[(x_size // 5):(x_size // 2 - 1)],err_cov_emp_full.mean(1)[(x_size // 5):(x_size // 2 - 1)],color='green', ls='--')
plt.errorbar(range_n_outliers, err_cov_emp_pure.mean(1),yerr=err_cov_emp_pure.std(1),label="Pure data set empirical covariance", color='black')
plt.title("Influence of outliers on the covariance estimation")
plt.xlabel("Amount of contamination (%)")
plt.ylabel("RMSE")
plt.legend(loc="upper center", prop=font_prop)plt.show()

精彩内容,请关注微信公众号:统计学习与大数据

【Python实例第25讲】稳健的 vs 经验的协方差估计相关推荐

  1. python实例豆瓣代码_Python实例:通过selenium模拟登陆豆瓣

    前几天写的<Python实例:分析豆瓣影片评论Ver 1.0版本>文章中,关于爬取数据过频繁导致IP被封禁的事情让我对豆瓣数据的爬取中断了.忽然想到之前有写过关于关于使用selenium库 ...

  2. python快速入门精讲_Python快速入门精讲

    基础入门篇 第0章从零开始3 0.1克服编程恐惧3 0.2如何写出好程序4 0.3为什么选择Python5 0.4Python的发展和应用6 0.5一些建议8 0.6多平台搭建Python开发环境10 ...

  3. python写文件读文件-Python 实例:读写文件

    原标题:Python 实例:读写文件 读写文件是最常见的IO操作.内置了读写文件的函数,用法和的读写文件非常类似.在磁盘上读写文件的功能都是由提供的,现代不允许普通的程序直接操作磁盘,所以,读写文件就 ...

  4. python教程实例-Python实例教程

    转自:http://codingdict.com/article/9026 Python 100例-01 题目: 输有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数? Python 1 ...

  5. 使用docker安装部署Spark集群来训练CNN(含Python实例)

    使用docker安装部署Spark集群来训练CNN(含Python实例) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需 ...

  6. python中bool函数的用法_python3实战python函数每日一讲 - bool([x])

    bool([x]) 英文说明:Convert a value to a Boolean, using the standard truth testing procedure. If x is fal ...

  7. Python实例集锦

    Python实例集锦 Python实例之一 有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 使用三次循环 for x in range(1,5):for y in r ...

  8. 在python中浮点数怎样转整数_python 浮点数 转 整数python函数每日一讲 - all()

    W WW.002pc .COM对<python 浮点数 转 整数python函数每日一讲 - all()>总结来说,为我们python培训很实用. all(iterable) 版本:该函数 ...

  9. Python实例15:霍兰德人格分析雷达图

    Python实例15:霍兰德人格分析雷达图 雷达图是多特性直观展示的重要方式: 霍兰德认为:人格兴趣与职业之间应有一种内在的对应关系: 人格分类:研究型.艺术型.社会型.企业型.传统型.现实型: 职业 ...

  10. 【第105期】Python将提速2-5倍!你期待吗

    整理 | 于轩 出品 | CSDN(ID:CSDNnews) 作为一门异常受欢迎的编程语言,Python的优点有很多,比如:易于学习.用途广泛.有成千上万个用于数据科学的有用的库.但同时,Python ...

最新文章

  1. 自学Python十二 战斗吧Scrapy!
  2. c++ 析构函数 ~
  3. Android --- java.lang.RuntimeException: Can‘t create handler inside thread that has not called Loop
  4. ChannelFactory.Endpoint 上的地址属性为空。ChannelFactory 的终结点必须指定一个有效的地址。...
  5. PHP代码审计基础手册
  6. 自我学习的技巧和建议
  7. .NET Core开发实战(第22课:异常处理中间件:区分真异常与逻辑异常)--学习笔记(下)...
  8. Codeforces Round #655 (Div. 2) B. Omkar and Last Class of Math 数学
  9. 漫画:什么是一致性哈希
  10. 用Python开始机器学习(4:KNN分类算法)
  11. 日常小问题汇总(1)
  12. react-json渲染
  13. HTML5 创建热点图
  14. 巨人网络:已组建研发团队对元宇宙游戏开展自研探索
  15. NBSI2内部功能实现大揭谜
  16. 模型预测控制与机器学习
  17. U8v10.1 出纳票据打印在 Nantian PR2E上打印不正确问题的解决方法
  18. 新手CrossApp 之CAbutton小结
  19. 分享几个国外模板网站(网页素材的下载)
  20. 计算机派位录取,北京幼升小多校划片电脑派位是什么意思

热门文章

  1. 个人.NET ORM全攻略,提供最新版本下载
  2. COJ 1079 树上的查询 (离线LCA)
  3. 5.1--5.1.2 Permutations of a Multiset 多重集合的排列
  4. HCIE-Security Day16:防火墙双机热备实验(四)防火墙直路部署,上行连接路由器(OSPF),下行连接交换机
  5. html div重叠上方,html – 将父div上方的子div对齐到右边,不要重叠
  6. Wireshark网络封包分析软件——过滤表达式
  7. Vulnhub-HackInOS
  8. HDOJ--4548--美素数
  9. 深度强化学习DQN(Deep Q Network)原理及例子:如何解决迷宫问题,附源码
  10. 计算机基础教程7 - 数字系统