生成关于X,Y,Z的联合分布,使得(X⊥Y),(X⊥Z),(Y⊥Z),而(X,Y⊥Z)不成立.(probabilistic graphic models Exercise 3.1)

probabilistic graphic models Exercise 3.1

起因

学完了一章,看题,怎么都不会?

经过

想了好久

结果

从最简单的开始,令X,Y,Z的取值为{0,1},则只需构造8个项的概率,记作 v 0 , v 1 , v 2 , ⋯   , v 7 v_0,v_1,v_2,\cdots,v_7 v0,v1,v2,,v7,按照X,Y,Z的取值进行编号,X的值对应v下标的最高二进制位,X取0的概率记作 P x P_x Px.
那么
v 0 + v 1 + v 2 + v 3 = P x v 0 + v 1 + v 4 + v 5 = P y v 0 + v 3 + v 5 + v 7 = P z v_0+v_1+v_2+v_3=P_x\\ v_0+v_1+v_4+v_5=P_y\\ v_0+v_3+v_5+v_7=P_z v0+v1+v2+v3=Pxv0+v1+v4+v5=Pyv0+v3+v5+v7=Pz
再由已知条件 ( X ⊥ Y ) , ( X ⊥ Z ) , ( Y ⊥ Z ) (X\perp Y),(X\perp Z),(Y\perp Z) (XY),(XZ),(YZ)有,
v 0 + v 1 = P a P b v 0 + v 2 = P a P c v 0 + v 4 = P b P c v_0+v_1=P_aP_b\\ v_0+v_2=P_aP_c\\ v_0+v_4=P_bP_c v0+v1=PaPbv0+v2=PaPcv0+v4=PbPc
由概率的定义有
∑ i = 0 7 v i = 1 \sum\limits_{i=0}^7v_i=1 i=07vi=1
8个变量,7个方程,于是再加上一个条件,给定 v 0 v_0 v0的值,则可以相应的解出其它的值.

#include <iostream>
#include <matrix.hpp>
#include <mat_algos.hpp>
#include <string>

using namespace std;

int main() {
    double pa,pb,pc,v0;
    cout<<"find three-variable binary joint distribution."<<endl;
    cout<<"please input P(a0) P(b0) P(c0) P(a0,b0,c0):";
    cin>>pa>>pb>>pc>>v0;
    mine::Matrix m(8,9,{
        1,  0,  0,  0,  0,  0,  0,  0,  v0,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  
        1,  1,  1,  1,  0,  0,  0,  0,  pa,
        1,  1,  0,  0,  1,  1,  0,  0,  pb,
        1,  0,  1,  0,  1,  0,  1,  0,  pc,
        1,  1,  0,  0,  0,  0,  0,  0,  pa*pb,
        1,  0,  1,  0,  0,  0,  0,  0,  pa*pc,
        1,  0,  0,  0,  1,  0,  0,  0,  pb*pc
    });
    mine::gaussCR(m);//自己写的矩阵库,
    mine::solveUpper(m);//用来求解方程,最后一列即为最终的结果.
    for(int i=0;i<8;++i){
        printf("%f",m[i][8]);
        if((i+1)%4==0)cout<<endl<<"---------------------"<<endl;
        else if((i+1)%2==0)cout<<endl;
        else cout<<' ';
    }
    return 0;
}

求解结果可能会出现负概率,对输入进行调整,试几次,就会有结果了.

find three-variable binary joint distribution.
please input P(a0) P(b0) P(c0) P(a0,b0,c0):0.1 0.2 0.3 0
0.000000 0.020000
0.030000 0.050000
---------------------
0.060000 0.120000
0.210000 0.510000
---------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值