python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)

https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share

项目合作:QQ231469242

http://hao.jobbole.com/pymc/

PyMC是一个实现贝叶斯统计模型和马尔科夫链蒙塔卡洛采样工具拟合算法的Python库。PyMC的灵活性及可扩展性使得它能够适用于解决各种问题。除了包含核心采样功能,PyMC还包含了统计输出、绘图、拟合优度检验和收敛性诊断等方法。

特性

PyMC使得贝叶斯分析尽可能更加容易。以下是一些PyMC库的特性:

  • 用马尔科夫链蒙特卡洛算法和其他算法来拟合贝叶斯统计分析模型。
  • 包含了大范围的常用统计分布。
  • 尽可能地使用了NumPy的一些功能。
  • 包括一个高斯建模过程的模块。
  • 采样循环可以被暂停和手动调整,或者保存和重新启动。
  • 创建包括表格和图表的摘要说明。
  • 算法跟踪记录可以保存为纯文本,pickles,SQLite或MySQL数据库文档或HDF5文档。
  • 提供了一些收敛性诊断方法。
  • 可扩展性:引入自定义的步骤方法和非常规的概率分布。
  • MCMC循环可以嵌入在较大的程序中,结果可以使用Python进行分析。

使用

首先,在文件中定义你的模型,并命名为mymodel.py

# Import relevant modules
import pymc
import numpy as np

# Some data
n = 5*np.ones(4,dtype=int)
x = np.array([-.86,-.3,-.05,.73])

# Priors on unknown parameters
alpha = pymc.Normal('alpha',mu=0,tau=.01)
beta = pymc.Normal('beta',mu=0,tau=.01)

# Arbitrary deterministic function of parameters
@pymc.deterministic
def theta(a=alpha, b=beta):
"""theta = logit^{-1}(a+b)"""
return pymc.invlogit(a+b*x)

# Binomial likelihood for data
d = pymc.Binomial('d', n=n, p=theta, value=np.array([0.,1.,3.,5.]),\
observed=Tr

   
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Mon Jul 24 10:56:07 2017
  4.  
  5. @author: toby
  6. """
  7.  
  8. # Import relevant modules
  9. import pymc
  10. import numpy as np
  11.  
  12. # Some data
  13. n = 5*np.ones(4,dtype=int)
  14. x = np.array([-.86,-.3,-.05,.73])
  15.  
  16. # Priors on unknown parameters
  17. alpha = pymc.Normal('alpha',mu=0,tau=.01)
  18. beta = pymc.Normal('beta',mu=0,tau=.01)
  19.  
  20. # Arbitrary deterministic function of parameters
  21. @pymc.deterministic
  22. def theta(a=alpha, b=beta):
  23. """theta = logit^{-1}(a+b)"""
  24. return pymc.invlogit(a+b*x)
  25.  
  26. # Binomial likelihood for data
  27. d = pymc.Binomial('d', n=n, p=theta, value=np.array([0.,1.,3.,5.]),\
  28. observed=True)

测试脚本

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Mon Jul 24 11:21:23 2017
  4.  
  5. @author: toby
  6. """
  7.  
  8. import pymc
  9. import mymodel
  10.  
  11. S = pymc.MCMC(mymodel, db='pickle')
  12. S.sample(iter=10000, burn=5000, thin=2)
  13. pymc.Matplot.plot(S)

import pymcimport mymodelS = pymc.MCMC(mymodel, db='pickle')S.sample(iter=10000, burn=5000, thin=2)pymc.Matplot.plot

   

这个例子会产生10000个后验样本。这个样本会存储在Python序列化数据库中。

教程示例

教程会指导用户完成常见的PyMC应用。

如何用MCMC来拟合模型

PyMC提供了一些可以拟合概率模型的方法。最主要的拟合模型方法是MCMC,即马尔科夫蒙特卡洛算法。生成一个MCMC对象来处理我们的模型,导入disaster_model.py并将其作为MCMC的参数。

调用MCMC中的sample()方法(或者交互采样函数isample())来运行采样器

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Mon Jul 24 11:26:27 2017
  4.  
  5. @author: toby
  6. """
  7.  
  8. from pymc.examples import disaster_model
  9. from pymc import MCMC
  10. M = MCMC(disaster_model)
  11. M.sample(iter=10000, burn=1000, thin=10)

等待几秒钟后,便可以看到采样过程执行完成,模型已经完成拟合。

http://blog.csdn.net/dmsgames/article/details/52525636

1、一个统计模型

有这样一个数据集,它按照时间顺序,收录了英国从1851年到1962年每年的矿难发生次数。如下图所示:

我们可以假设,矿难发生的概率服从一个Poisson过程,在某一年泊松过程的参数发生了变化,在时间轴的早些时候,矿难发生的概率较高,后来矿难发生的概率比较低。

我们将上述概念模型转化为统计模型:

以上模型参数定义如下:

  • D_t: 第t年矿难发生的次数;
  • r_t: 第t年Posson过程的参数;
  • s: 泊松过程参数发生改变的那一年;
  • e: 第s年之前,泊松过程的参数;
  • l:第s年之后,泊松过程的参数;
  • t_l,t_h: 年份t的下限和上限;
  • r_e,r_l:e和l的先验分布
由于在模型中我们定义了D依赖于s,e,l,所以我们把D称作s,e,l的子变量,类似的,s,e,l称为D的父变量。

2、变量的两种类型

PyMC包中定义类两种随机变量类型,分别为stochastic和Deterministic。

模型中唯一的Deterministic变量是r,因为当我们知道r的父参数(s,l,e)后,我们可以准确地计算出r的值。

另一方面,s,D(在观察到数据之前)是stochastic变量,因为即使观察到他们的父变量,任然不能确定它们的值。

我们将模型写在一个名为 disaster_model.py 的Python脚本中:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
"""
导入numpy和pymc
"""
from pymc import DiscreteUniform, Exponential, deterministic, Poisson, Uniform
import numpy as np
"""
导入英国矿难数据集
"""
disasters_array = \
np.array([ 4, 5, 4, 0, 1, 4, 3, 4, 0, 6, 3, 3, 4, 0, 2, 6,
3, 3, 5, 4, 5, 3, 1, 4, 4, 1, 5, 5, 3, 4, 2, 5,
2, 2, 3, 4, 2, 1, 3, 2, 2, 1, 1, 1, 1, 3, 0, 0,
1, 0, 1, 1, 0, 0, 3, 1, 0, 3, 2, 2, 0, 1, 1, 1,
0, 1, 0, 1, 0, 0, 0, 2, 1, 0, 0, 0, 1, 1, 0, 2,
3, 3, 1, 1, 2, 1, 1, 1, 1, 2, 4, 2, 0, 0, 1, 4,
0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1])
 
"""
定义转折点s:
取值范围0-110
均匀离散分布
"""
switchpoint = DiscreteUniform('switchpoint', lower=0, upper=110, doc='Switchpoint[year]')
 
"""
定义e、l
指数分布
"""
early_mean = Exponential('early_mean', beta=1.)
late_mean = Exponential('late_mean', beta=1.)
 
"""
定义r
"""
@deterministic(plot=False)
def rate(s=switchpoint, e=early_mean, l=late_mean):
''' Concatenate Poisson means '''
out = np.empty(len(disasters_array))
out[:s] = e
out[s:] = l
return out
 
"""
定义矿难发生次数
服从泊松分布
"""
disasters = Poisson('disasters', mu=rate, value=disasters_array, observed=True)
来自CODE的代码片
snippet_file_0.txt

3、父变量与子变量

我们已经使用PyMC创建了统计模型,PyMC中提供方法查看模型中参数之间的关系,试例代码如下:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
from pymc.examples import disaster_model
disaster_model.switchpoint.parents #显示s的父参数
#输出{'lower': 0, 'upper': 110}
disaster_model.disasters.parents #显示disasters的父参数
#输出{'mu': <pymc.PyMCObjects.Deterministic 'rate' at 0x000000000B791BE0>}
disaster_model.rate.children #显示rate的子参数
#输出{<pymc.distributions.new_dist_class.<locals>.new_class 'disasters' at 0x000000000B791C18>}
来自CODE的代码片
snippet_file_0.txt

4、变量的值

所有的PyMC变量都具有value属性,查看value值示例代码如下:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
disaster_model.disasters.value
"""输出
array([4, 5, 4, 0, 1, 4, 3, 4, 0, 6, 3, 3, 4, 0, 2, 6, 3, 3, 5, 4, 5, 3, 1,
4, 4, 1, 5, 5, 3, 4, 2, 5, 2, 2, 3, 4, 2, 1, 3, 2, 2, 1, 1, 1, 1, 3,
0, 0, 1, 0, 1, 1, 0, 0, 3, 1, 0, 3, 2, 2, 0, 1, 1, 1, 0, 1, 0, 1, 0,
0, 0, 2, 1, 0, 0, 0, 1, 1, 0, 2, 3, 3, 1, 1, 2, 1, 1, 1, 1, 2, 4, 2,
0, 0, 1, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1])
"""
disaster_model.switchpoint.value
#输出 array(40)
 
disaster_model.early_mean.value
#输出 array(1.1444157379406001)
 
disaster_model.late_mean.value
#输出 array(0.027985496189503425)
来自CODE的代码片
snippet_file_0.txt

5、使用马尔科夫链蒙特卡洛(MCMC)拟合模型

PyMC提供MCMC方法拟合模型,使用方法如下:

  1. 1
  2. 2
  3. 3
  4. 4
from pymc.examples import disaster_model
from pymc import MCMC
M = MCMC(disaster_model)
M.sample(iter=10000, burn=1000, thin=10)
来自CODE的代码片
snippet_file_0.txt
MCMC算法输出模型中每个变量的样本,获得样本方法如下:
  1. 1
  2. 2
M.trace('switchpoint')[:]
#输出array([43,43,44,...44,44])
来自CODE的代码片
snippet_file_0.txt

画出每个变量的采样序列图、后验边缘分布直方图、自相关性图,代码如下:

  1. 1
  2. 2
from pymc.Matplot import plot
plot(M)
来自CODE的代码片
snippet_file_0.txt
采样序列图可以判断MCMC是否收敛,如果采样序列分布近似于白噪声,那么可以判断MCMC已经收敛。

 https://study.163.com/provider/400000000398149/index.htm?share=2&shareId=400000000398149( 欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章)

 

pymc的更多相关文章

  1. Windows下PyMC安装

    先安装Anaconda2 然后conda install -c https://conda.binstar.org/pymc pymc

  2. 打开MCMC(马尔科夫蒙特卡洛)的黑盒子 - Pymc贝叶斯推理底层实现原理初探

    我们在这篇文章里有尝试讨论三个重点.第一,讨论的 MCMC.第二,学习 MCMC 的实现过程,学习 MCMC 算法如何收敛,收敛到何处.第三,将会介绍为什么从后验分布中能返回成千上万的样本,也许读者和 ...

  3. Python 资源大全中文版

    Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列 ...

  4. 11个并不广为人知,但值得了解的Python库

    这是一篇译文,文中提及了一些不常见但是有用的Python库 原文地址:http://blog.yhathq.com/posts/11-python-libraries-you-might-not-kn ...

  5. windows和linux中搭建python集成开发环境IDE——如何设置多个python环境

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  6. [Machine Learning] 国外程序员整理的机器学习资源大全

    本文汇编了一些机器学习领域的框架.库以及软件(按编程语言排序). 1. C++ 1.1 计算机视觉 CCV —基于C语言/提供缓存/核心的机器视觉库,新颖的机器视觉库 OpenCV—它提供C++, C ...

  7. [转载]Python 资源大全

    原文链接:Python 资源大全 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex  ...

  8. python常用库

    本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载!英文出处:vinta.欢迎加入翻译组. Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 ...

  9. 二项分布和Beta分布

    原文为: 二项分布和Beta分布 二项分布和Beta分布 In [15]: %pylab inline import pylab as pl import numpy as np from scipy ...

随机推荐

  1. BUAAMOOC-Alpha版本发布说明

    BUAAMOOC-Alpha版本发布说明 本说明为BUAAMOOCv1.0版发布说明. 软件截图 上届软件截图 可以看到上届的界面做的很简陋,对于登录.查看课程列表.观看视频等操作需要跳转多个页面,视 ...

  2. [BUAA软工]第0次个人作业

    [BUAA软工]第0次个人作业 本次作业所属课程 : 2019BUAA软件工程 本次作业要求: 第0次个人作业 我在本课程的目标: 熟悉软件工程流程,规范开发习惯 本次作业的帮助: 熟悉课程流程 Pa ...

  3. IEEE 802.11 无限局域网

    (1)无线通讯的两个重要特征 ——Hidden node problem 双方虽然听不到对方的讯号,但同时传送给相同的对象导致了碰撞(这个时候双方都不知道发生了碰撞) ——Exposed node p ...

  4. 0506Scrum项目1.0

    1.确定选题. 应用NABCD模型,分析你们初步选定的项目,充分说明你们选题的理由. 录制为演说视频,上传到视频网站,并把链接发到团队博客上. 截止日期:2016.5.6日晚10点 团队名称:虫洞 团 ...

  5. Linux内核0.11 makefile文件说明

    # # if you want the ram-disk device, define this to be the # size in blocks. # 如果要使用 RAM 就定义块的大小(注释掉 ...

  6. python杂谈:Python中\r的用法示例

    \r 默认表示将输出的内容返回到第一个指针,这样的话,后面的内容会覆盖前面的内容 import sys import time def view_bar(num,total): rate = floa ...

  7. 解决MySQL复制出错 Last_SQL_Errno:1146

    背景:我们在做数据迁移或者拆分的时候,使用Tablespace transcation 这种解决方案时,很有可能就会遇到 从库复制出错,报: Last_SQL_Errno: 1146 那么具体错误内容 ...

  8. P2617 Dynamic Rankings

    题目描述 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]……a[j]中第k小的数是多少(1≤k≤ ...

  9. 洛谷P3676 小清新数据结构题 【树剖 + BIT】

    题目链接 洛谷P3676 题解 我们先维护\(1\)为根的答案,再考虑换根 一开始的答案可以\(O(n)\)计算出来 考虑修改,记\(s[u]\)表示\(u\)为根的子树的权值和 当\(u\)节点产生 ...

  10. 【SDOI2015】序列统计 解题报告

    2119: [BZOJ3992][SDOI2015]序列统计 Description 小\(C\)有一个集合\(S\),里面的元素都是小于\(M\)的非负整数. 他用程序编写了一个数列生成器,可以生成 ...