首页 > 编程知识 正文

狄利克雷分布的含义,隐含狄利克雷分布模型

时间:2023-05-06 20:32:22 阅读:235520 作者:4530

转载请标明作者

首先是瘦瘦的铃铛分布的三维实现,由于没法保证下面的坐标值加起来唯一,所以我采用了抽样的方法,从dirchidirichlet~(1,1,1)中抽的三维图像的坐标值,我只去前两个作为我的x,y值,代码如下:

import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dfrom scipy import statsglobal LENLEN=1000#抽样rv=stats.dirichlet.rvs([1,1,1],3000)#将前两个值作为我的x,y值rvs=rv[:,0:2]list=[]for x in rv: #计算其对应的pdf值 pdf=stats.dirichlet.pdf(x,alpha=[5,10,7]) list.append(float(pdf))fig=plt.figure()ax=fig.gca(projection="3d")ax.scatter(rvs[:,0],rvs[:,1],list)plt.show()

由于,我采用的是抽样的方式,所以如果数据少的话,会出现空白部位,得到的图像为: 

接下来介绍一下 stick-breaking的实现,一般用于瘦瘦的铃铛过程中数据的抽样,代码如下 :

import matplotlib.pyplot as pltimport numpy as np#my stick breaking sampling#使用的基函数是dddxrz#dp~dp(alpha,gaussian(0,1))def stick_breaking(alpha,sample_num): x_list=[] y_list=[] for x in range(sample_num): data_x=np.random.normal(0,1,1) beta=np.random.beta(1,alpha,1) y=(1-sum(y_list))*beta x_list.append(data_x) y_list.append(y) return x_list,y_listalpha=1000sample_num=500#样本数x_list,y_list=stick_breaking(alpha,sample_num)plt.stem(x_list,y_list)plt.show()

得到的图像如下:

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。