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

在这个例子里,我们使用GraphicalLasso估计量从一个小样本里学习协方差和稀疏的精度矩阵。
为了估计一个概率模型,比如说高斯模型,估计它的精度矩阵,即,协方差阵的逆,是非常重要的估计过程。事实上,一个高斯模型由精度矩阵参数化。

为了验证结果,我们从具有稀疏的可逆协方差阵的模型抽样数据。另外,我们要确保数据的相关性较弱,这样就限制了精度矩阵的最大系数。还要确保所有的系数都能估计出来。

在这里,样本量稍微大于维数,这使得经验协方差阵仍然是可逆的。然而,如果观测之间强烈相关,经验协方差阵是病态的(ill-conditioned). 结果导致它的逆——经验精度矩阵远离真实情况。

如果我们使用L2惩罚的Ledoit-Wolf估计量,因为样本量小,我们需要压缩很多系数。结果是, Ledoit-Wolf精度非常接近真实的精度,但精度矩阵的非对角线的结构被破坏了。

L1惩罚的估计量能部分恢复非对角线的结构。它能学习一个精度矩阵,但是不能精确地恢复稀疏结构:它估计了太多的非零稀疏。最后,L1估计精度稀疏偏向于0:因为惩罚的缘故,这些系数都小于真实值。

注意到,为了改善图的可视化效果,下图左的精度矩阵的颜色范围被捏在了一起。设置模型稀疏性的GraphicalLasso alpha参数,由函数GraphLassoCV的交叉验证设置。结果的下图右,计算交叉验证分数的坐标格,在最大似然的邻近区域被迭代地改善了。

实例代码

print(__doc__)
# author: Gael Varoquaux <gael.varoquaux@inria.fr>
# License: BSD 3 clause
# Copyright: INRIAimport numpy as np
from scipy import linalg
from sklearn.datasets import make_sparse_spd_matrix
from sklearn.covariance import GraphLassoCV, ledoit_wolf
import matplotlib.pyplot as plt# #############################################################################
# Generate the data
n_samples = 60
n_features = 20prng = np.random.RandomState(1)
prec = make_sparse_spd_matrix(n_features, alpha=.98,smallest_coef=.4,largest_coef=.7,random_state=prng)
cov = linalg.inv(prec)
d = np.sqrt(np.diag(cov))
cov /= d
cov /= d[:, np.newaxis]
prec *= d
prec *= d[:, np.newaxis]
X = prng.multivariate_normal(np.zeros(n_features), cov, size=n_samples)
X -= X.mean(axis=0)
X /= X.std(axis=0)# #############################################################################
# Estimate the covariance
emp_cov = np.dot(X.T, X) / n_samplesmodel = GraphLassoCV(cv=5)
model.fit(X)
cov_ = model.covariance_
prec_ = model.precision_lw_cov_, _ = ledoit_wolf(X)
lw_prec_ = linalg.inv(lw_cov_)# #############################################################################
# Plot the results
plt.figure(figsize=(10, 6))
plt.subplots_adjust(left=0.02, right=0.98)# plot the covariances
covs = [('Empirical', emp_cov), ('Ledoit-Wolf', lw_cov_),('GraphicalLassoCV', cov_), ('True', cov)]
vmax = cov_.max()
for i, (name, this_cov) in enumerate(covs):plt.subplot(2, 4, i + 1)plt.imshow(this_cov, interpolation='nearest', vmin=-vmax, vmax=vmax,cmap=plt.cm.RdBu_r)plt.xticks(())plt.yticks(())plt.title('%s covariance' % name)# plot the precisions
precs = [('Empirical', linalg.inv(emp_cov)), ('Ledoit-Wolf', lw_prec_),('GraphicalLasso', prec_), ('True', prec)]
vmax = .9 * prec_.max()
for i, (name, this_prec) in enumerate(precs):ax = plt.subplot(2, 4, i + 5)plt.imshow(np.ma.masked_equal(this_prec, 0),interpolation='nearest', vmin=-vmax, vmax=vmax,cmap=plt.cm.RdBu_r)plt.xticks(())plt.yticks(())plt.title('%s precision' % name)if hasattr(ax, 'set_facecolor'):ax.set_facecolor('.7')else:ax.set_axis_bgcolor('.7')# plot the model selection metric
plt.figure(figsize=(4, 3))
plt.axes([.2, .15, .75, .7])
plt.plot(model.cv_alphas_, np.mean(model.grid_scores_, axis=1), 'o-')
plt.axvline(model.alpha_, color='.5')
plt.title('Model selection')
plt.ylabel('Cross-validation score')
plt.xlabel('alpha')plt.show()

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

【Python实例第24讲】稀疏的可逆协方差估计相关推荐

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

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

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

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

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

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

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

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

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

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

  6. Python实例集锦

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

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

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

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

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

  9. python实例编程_浅谈如何编程Python3——Python实例(3)

    浅谈如何编程Python3--Python实例(3) # 测试实例一 print("测试实例一") str= "runoob.com"print(str.isa ...

  10. 占位符%字符串格式化输出 - python实例

    目录 1. %占位符 概念 and python 实例 格式化字符串转换符 表 2. format 2.1基础语法 format可以实现%所实现的,但功能更强大 2.2 高阶 1. %占位符 概念 a ...

最新文章

  1. 第二百二十节,jQuery EasyUI,Slider(滑动条)组件
  2. [BUAA-SE-2018]结对作业测试报告
  3. java 用于xcopy复制_java调用copy复制子文件夹及文件到指定目录(非xcopy)
  4. 致技术创业的朋友:其实销售很简单(Z)
  5. Java泛型简介–第6部分
  6. Android之sqlite的使用 (转载)
  7. 信息学奥赛C++语言:整数的个数
  8. 小程序picker组件中的(普通选择器:mode = selector)
  9. centOS 6.5上安装mysql5.7压缩版
  10. 最新麦子学院33G完整版Web前端Web前端开发从入门到精通
  11. 主机电子游戏攻略资源分享
  12. 未来,我们终将共同沐浴在实时光追之下
  13. paypal ipn java_javashop中paypal使用指南
  14. 计算机断电硬盘数据会丢失吗,为什么突然停电后电脑硬盘数据会丢失?
  15. Interfacing with Pixhawk using the NSH
  16. try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行
  17. 鸿蒙手机分身,小米详解MIUI 8手机分身:相当于开启了两个平行空间
  18. GDUFS 2018信息学院程序设计新手赛(正式赛)Java版题解
  19. 41份艾媒舆情-舆情相关行业报告
  20. 信息网络传播中的服务器标准,信息网络传播权侵权认定标准适用研究

热门文章

  1. OGNL(Object-Graph Navigation Language对象图定位语言)和struts2标签
  2. IOS用正则验证手机号
  3. Kubernetes详解(七)——Service对象部署和应用
  4. Leetcode 刷题笔记(二) —— 数组类型解题方法二:双指针法
  5. 开启Mac原生NTFS支持
  6. 通过一个视频剖析数据可视化的秘密
  7. C++ 面向对象编程
  8. 基于注解的 Spring MVC 简单入门
  9. 科来无线抓包基础知识扫盲
  10. [原创]手动配置Ubuntu Linux系列3-缺省网关和主机名