机器学习&数据挖掘笔记_18(PGM练习二:贝叶斯网络在遗传图谱在的应用)
前言:
这是coursera课程:Probabilistic Graphical Models上的第二个实验,主要是用贝叶斯网络对基因遗传问题进行一些计算。具体实验内容可参考实验指导教材:bayes network for genetic inheritance. 大家可以去上面的链接去下载实验材料和stard code,如实验内容有难以理解的地方,欢迎私底下讨论。下面是随便写的一些笔记。
完成该实验需要了解一些遗传方面的简单知识,可参考:Introduction to heredity(基因遗传简单介绍)
关于实验的一些约定和术语:
同位基因(也叫等位基因)中有一个显现基因(dominant allele)和一个隐性基因(recessive allele)。
homozygous:纯合体
heterozygous:杂合体
一个factor表不仅可以表示联合概率,也可以表示条件概率,这里约定规则是: 最左边的那个元素表示条件输出,即它是在后面元素出现条件下的输出。
关于变量的命名,因为在图模型中,会出现很多变量,这些变量在实际编程中是要取名字的,一般是按照某种顺序规则来取,本次实验的规则是:依照家谱图中每个人的名字依次取,假设有k个人,则每个人对应了2个factor,所以前k个变量表示这k个人的基因型标量,后k个变量表示这k个人的表现型变量。如果把每个人的基因对应的2个染色体分开考虑,则需要3k个变量,前k个表示每个人的第一条染色体对应处的基因,中间k个表示每个人的第二条染色体对应处的基因,后k个变量和以前的一样,表示这k个人的表现型变量。
程序中的alleleFreqs是个n*1的向量,n为单个等位基因的个数。
程序中的alphaList是个m*1的向量,m为2个等位基因组合的个数。
例如,某个基因家谱图可如下:
matlab知识:
matlab在使用元胞数组时,需要先用cell来定义大小。对元胞使用小括号访问时返回的是对应位置的数据类型,而不是其内容,要想得到其内容,需要用大括号访问。
结构体的定义要么直接对其赋值,这时候需调用其field,要么用关键字struct来定义。
tf = isfield(S, 'fieldname'):
tf=1表示结构体成员S中含有变量fieldname.
实验中的一些函数:
phenotypeFactor = phenotypeGivenGenotypeMendelianFactor(isDominant, genotypeVar, phenotypeVar):
练习1需要完成的内容。该函数功能是生成一个factor,该factor每一项是一个条件概率,表示在基因类型变量(genotypeVar)下的表现类型(phenotypeVar)的概率,即P(person’s phenotype | person’s genotype)。其概率值是按照孟德尔模型(mendelian model)来分配的。
v = GetValueOfAssignment(F, A):
得到facotr F在assignment A处的值。
F = SetValueOfAssignment(F, A, v):
该函数实现对factor F的一个assignment对应的值进行更新,更新后的值为v.注意一定要将这个函数的返回值赋给F才有效。
phenotypeFactor = phenotypeGivenGenotypeFactor(alphaList, genotypeVar, phenotypeVar):
练习2需要完成的内容。这个函数也是实现表现型在基因型下的条件概率,但此时概率不一定为0或者1,因为不严格满足孟德尔模型,所以参数列表中多了一个alphaList变量,该变量存储的是各种基因型下出现某种病的概率值。genotypeVar, phenotypeVar分别为基因类型变量和表现型变量,仅仅是个变量名而已。
[allelesToGenotypes,genotypesToAlleles]= generateAlleleGenotypeMappers(numAlleles):
numAlleles为等位基因的个数,假设个数为n,则allelesToGenotypes为一个n*n的矩阵,代表的是2不同等位基因组合后的编码(行号和列号分别代表这2个基因序号),因为这个编码矩阵是对称的,所以只有m=n*(n-1)/2+n个编码。genotypesToAlleles为一个m*2大小的矩阵,每一行的两个元素代表该基因编码下的2个基因序号。
[allelesToGenotypes,genotypesToAlleles]= generateAlleleGenotypeMappers(numAlleles):
用同位基因的个数numAlleles作为参数,来产生2个矩阵。其中allelesToGenotypes(i,j)表示编号为i的同位基因和编号为j的同位基因在基因类型(每个基因类型由2个基因构成)中的序号。 genotypesToAlleles由2列构成,每一行对应一个基因类型的序号,这2个列元素表示该基因序列对应的2个同位基因的编号。
genotypeFactor = genotypeGivenAlleleFreqsFactor(alleleFreqs, genotypeVar):
练习3需要完成的内容。某个基因可能有多个等位基因,而每个等位基因的概率不同,概率值保存在alleleFreqs中。这个函数的作用就是由这些等位基因组合产生的每个基因类型的概率,这相当于一个先验分布,因为没有去考虑由父母亲的基因交叉得到下一代。genotypeVar表示这个基因类型的变量名。
genotypeFactor=genotypeGivenParentsGenotypesFactor(numAlleles, genotypeVarChild, genotypeVarParentOne, genotypeVarParentTwo):
练习4需要完成的内容。该函数的作用是已知父亲和母亲某个等位基因的分布,求出儿子对应基因的概率分布。其中numAlleles是等位基因的个数,genotypeVarChild, genotypeVarParentOne, genotypeVarParentTwo分别表示儿子,父亲,母亲对应的基因变量。输出的genotypeFactor是一个变量值val为3维矩阵的factor. 这个函数与上面那个函数不同,这里的输出factor是在考虑了父母亲factor情况下的。
factorList = constructGeneticNetwork(pedigree, alleleFreqs, alphaList):
练习5需要完成的内容。在给定家谱(家谱中包含了成员的名字,父母亲等信息)pedigree、等位基因的概率分布alleleFreqs、不同基因组合导致生并的概率分布alphaList后,就可以求出这个家庭中每个成员的2个factor:一个是关于自己的基因类型的,这由其父母亲的基因类型决定;另一个是关于自己的表现类型的,这与他的基因类型有关。在完成该函数的代码中会调用前面的函数genotypeGivenAlleleFreqsFactor(), genotypeGivenParentsGenotypesFactor(), phenotypeGivenGenotypeFactor().所以前面很多工作都是为后面服务的。
phenotypeFactor=phenotypeGivenCopiesFactor(alphaList, numAlleles, geneCopyVarOne, geneCopyVarTwo, phenotypeVar):
练习6所需完成的内容。geneCopyVarOne和geneCopyVarTwo一个来自母亲的基因,一个来自父亲的的基因。phenotypeVar为下一代表现型标量。该函数的作用是给定来自父母亲的2个基因,求这个组合下的下一代出现病的概率,当然了,因为不服从孟德尔模型,所以还需要参考概率值alphaList.
geneCopyFactor = childCopyGivenFreqsFactor(alleleFreqs, geneCopyVar):
该函数的作用是得获得染色体中一个等位基因的概率,该概率来源于通用的先验alleleFreqs. 该factor表格大小为n*1.
geneCopyFactor = childCopyGivenParentalsFactor(numAlleles, geneCopyVarChild, geneCopyVarOne, geneCopyVarTwo):
该函数的作用也是得获得染色体中一个等位基因的概率,只是这取决于父母亲各自那个等位基因。所以这个factor表格大小为n*3,且每个条件概率只可能取3个 值:0, 0.5, 1.
factorList = constructDecoupledGeneticNetwork(pedigree, alleleFreqs, alphaList):
实验7所需完成内容。该函数是构造Decoupled的贝叶斯网络,这里的Decoupled是指家谱中每个人染色体的2个等位基因分布来考虑。所以每个人都对应有3个factor,一个是基因1的概率,n*3大小(如果家谱中没有父母亲,则是n*1大小),一个是基因2的概率,n*3大小(如果家谱中没有父母亲,则是n*1大小),另一个是对应的表现型分布2n^2*3大小。
phenotypeFactor=constructSigmoidPhenotypeFactor(alleleWeights, geneCopyVarOneList, geneCopyVarTwoList, phenotypeVar):
这是练习8的内容。一种病可能由多个基因决定,而每个基因又可能有多个等位基因。这里的alleleWeights矩阵中alleleWeights{i}(j)表示的意思是第i个基因的第j号等位基因对这种病的影响权值。当把某种病对应的所有基因的等位基因权值都考虑进来,那么得这种病的概率则与这些权值之和有关,本实验假设它们最后的关系是服从sigmoid分布。geneCopyVarOneList和geneCopyVarTwoList都是列向量(因为一种病可能由多个基因决定),所以在计算phenotypeFactor.var时需要这2个向量转置。
课件中的一些内容:
贝叶斯推理的3种形式:因果推理,证据推理,内部因果推理(注意explean away现象)。
active trail(路径中不能出现V型结构,除非V型中间节点或者其子孙节点被观测到)。
变量之间的独立性判断、条件独立性判断(可以通过联合概率与某2个factor的乘积的关系来判断)。
一个图能够被因式分解,则有可能推导出独立性。如果有D-separation,则一定可以推导出独立性。
分布P能够分解图G ,则G是P的一个I-map,反之,如果G是P的一个I-map,则P能分解G.
为了简化时序模型,一般会有马尔科夫和时序不变性这2个假设。
时序转移模型(Template Transition Model),可以包含内部时序转移和外部时序转移。
Ground Network(unrolled network)指的是不同时间内的结构依次复制。
2TBN是一个动态贝叶斯网络,它有一个初始化以及unrolled network,所以有2个转移概率。
HMM中的状态转移概率是稀疏的。
Plate model可以嵌套,可以重叠
参考资料:
机器学习&数据挖掘笔记_18(PGM练习二:贝叶斯网络在遗传图谱在的应用)的更多相关文章
- PGM学习之五 贝叶斯网络
本文的主题是“贝叶斯网络”(Bayesian Network) 贝叶斯网络是一个典型的图模型,它对感兴趣变量(variables of interest)及变量之间的关系(relationships) ...
- 机器学习实战笔记(Python实现)-03-朴素贝叶斯
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
- 使用 Python 第三方库 daft 绘制 PGM 中的贝叶斯网络
daft 的官方文档请见 DAFT:BEAUTIFULLY RENDERED PROBABILISTIC GRAPHICAL MODELS. from matplotlib import rc rc( ...
- 机器学习&数据挖掘笔记_20(PGM练习四:图模型的精确推理)
前言: 这次实验完成的是图模型的精确推理.exact inference分为2种,求边缘概率和求MAP,分别对应sum-product和max-sum算法.这次实验涉及到的知识点很多,不仅需要熟悉图模 ...
- 机器学习&数据挖掘笔记_23(PGM练习七:CRF中参数的学习)
前言: 本次实验主要任务是学习CRF模型的参数,实验例子和PGM练习3中的一样,用CRF模型来预测多张图片所组成的单词,我们知道在graph model的推理中,使用较多的是factor,而在grap ...
- 机器学习&数据挖掘笔记_19(PGM练习三:马尔科夫网络在OCR上的简单应用)
前言: 接着coursera课程:Probabilistic Graphical Models上的实验3,本次实验是利用马尔科夫网络(CRF模型)来完成单词的OCR识别,每个单词由多个字母组合,每个字 ...
- 概率图模型(PGM)学习笔记(二)贝叶斯网络-语义学与因子分解
概率分布(Distributions) 如图1所看到的,这是最简单的联合分布案例,姑且称之为学生模型. 图1 当中包括3个变量.各自是:I(学生智力,有0和1两个状态).D(试卷难度,有0和1两个状态 ...
- 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...
- [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...
随机推荐
- MVC特性
MVC与ASP.NET MVC基础概念 MVC是Model-View-Controller的缩写. MVC将应用程序划分为3大组件:模型\视图\控制器. MVC不是ASP.NET所特有,它只是一种开发 ...
- jquery ajax post 中文乱码解决
jquery ajax post 方式默认传递的是UFT-8字符,即使页面设置了gbk编码也无效.字符传到后台时如果后台设置的gbk或者其他编码,就会出现乱码.解决很容易,将后台页面设置成UTF-8编 ...
- How and Where Concurrent Asynchronous I/O with ASP.NET Web API 对异步编程分析的非常的好
How and Where Concurrent Asynchronous I/O with ASP.NET Web API http://www.tugberkugurlu.com/archive/ ...
- UML-用例图
用例图是指由参与者.用例以及它们之间的关系构成的用于描述系统功能的视图.用例图是被称为参与者的外部用户所能观察到的系统功能的模型图,呈现了一些参与者和一些用例,以及它们之间的关系,主要用于对系统.子系 ...
- Java语法糖3:泛型
泛型初探 在泛型(Generic type或Generics)出现之前,是这么写代码的: public static void main(String[] args) { List list = ne ...
- Linux head和tail命令
200 ? "200px" : this.width)!important;} --> 介绍 head和tail是一组想对应的命令,默认分别显示文件的开头和末尾10行记录. ...
- Java序列化格式详解
RPC的世界,由于涉及到进程间网络远程通信,不可避免的需要将信息序列化后在网络间传送,序列化有两大流派: 文本和二进制. 文本序列化 序列化的实现有很多方式,在异构系统中最常用的就是定义成人类可读的文 ...
- WebApi系列~开放的CORS,跨域资源访问对所有人开放
回到目录 之前有客户问我,如何AJAX跨域post,这个问题挺有意思,在我们看来,我是不被允许的,因为它是不安全的,但随着web api的火热,这个东西也被人们一步步的接受了,确实,有时,我们的接口希 ...
- MVVM架构~Knockoutjs系列之js接收C#数据集合的方式
返回目录 在controller里将数据拿到,并且存储到ViewBag对象里,最后在View上显示出来,这是传统的MVC开发方式,事实上引入Knockoutjs以后,这种方式还是适合的,Knockou ...
- [Java面试九]脚本语言知识总结.
核心内容概述 1.JavaScript加强,涉及到ECMAScript语法.BOM对象.DOM对象以及事件. 2.Ajax传统编程. 3.jQuery框架,九种选择器为核心学习内容 4.JQuery ...