使用TensorFlow或PyTorch构建贝叶斯模型的Python包

probflow的Python项目详细描述


Version BadgeBuild BadgeDocs BadgeCoverage Badge

ProbFlow是一个Python包,用于使用TensorFlow 2.0或{a6}构建概率贝叶斯模型,对这些模型进行随机变分推理,并评估模型的推论。它提供了构建贝叶斯神经网络的高级模块,以及用于构建定制贝叶斯模型的低级参数和分布。

这仍然是一项正在进行的工作。

入门

ProbFlow允许您快速、轻松地构建、调整和评估自定义贝叶斯模型(或ready-made个模型!)在TensorFlow 2.0TensorFlow Probability或{a6}之上运行。

对于ProbFlow,贝叶斯模型的核心构建块是参数和概率分布(当然还有输入数据)。参数定义自变量(特征)如何预测因变量(目标)的概率分布。

例如,一个简单的贝叶斯线性回归

https://raw.githubusercontent.com/brendanhasz/probflow/master/docs/img/readme/regression_equation.svg?sanitize=true

可以通过创建ProbFlow模型来构建:

importprobflowaspfimporttensorflowastfclassLinearRegression(pf.ContinuousModel):def__init__(self):self.weight=pf.Parameter(name='weight')self.bias=pf.Parameter(name='bias')self.std=pf.ScaleParameter(name='sigma')def__call__(self,x):returnpf.Normal(x*self.weight()+self.bias(),self.std())model=LinearRegression()

然后,可以使用随机变分推断来拟合模型,在one line中:

^{pr2}$

您可以为新数据生成预测:

# x_test is a Numpy array or pandas DataFrame
>>> model.predict(x_test)[0.983]

计算新数据的概率预测,置信区间为95%:

model.pred_dist_plot(x_test,ci=0.95)
https://raw.githubusercontent.com/brendanhasz/probflow/master/docs/img/readme/pred_dist.svg?sanitize=true

使用指标评估模型的性能:

>>> model.metric('mse',x_test,y_test)0.217

检查拟合模型参数的后验分布,置信区间为95%:

model.posterior_plot(ci=0.95)
https://raw.githubusercontent.com/brendanhasz/probflow/master/docs/img/readme/posteriors.svg?sanitize=true

通过检查预测间隔的准确度,调查模型捕捉不确定性的能力:

>>> model.pred_dist_coverage(ci=0.95)0.903

并诊断,其中您的模型在捕捉不确定性方面存在问题:

model.coverage_by(ci=0.95)
https://raw.githubusercontent.com/brendanhasz/probflow/master/docs/img/readme/coverage.svg?sanitize=true

ProbFlow还提供了更复杂的模块,例如构建贝叶斯神经网络所需的模块。此外,您可以将ProbFlow与TensorFlow(或PyTorch!)代码。例如,即使是这样一个有点复杂的多层贝叶斯神经网络:

https://raw.githubusercontent.com/brendanhasz/probflow/master/docs/img/readme/dual_headed_net.svg?sanitize=true

只需几行即可构建并与ProbFlow配合:

classDensityNetwork(pf.ContinuousModel):def__init__(self,units,head_units):self.core=pf.DenseNetwork(units)self.mean=pf.DenseNetwork(head_units)self.std=pf.DenseNetwork(head_units)def__call__(self,x):x=self.core(x)returnpf.Normal(self.mean(x),tf.exp(self.std(x)))# Create the modelmodel=DensityNetwork([x.shape[1],256,128],[128,64,32,1])# Fit it!model.fit(x,y)

为了方便起见,ProbFlow还包括几个标准任务的pre-built models(如线性回归、logistic回归和多层密集神经网络)。例如,通过使用ProbFlow现成的线性回归模型,上述线性回归示例可以用更少的工作量完成:

model=pf.LinearRegression(x.shape[1])model.fit(x,y)

使用ProbFlow现成的Denseregress模型,可以很容易地构建多层贝叶斯神经网络:

model=pf.DenseRegression([x.shape[1],128,64,1])model.fit(x,y)

使用参数和分布作为简单的构建块,ProbFlow允许无痛地创建更复杂的贝叶斯模型,比如 generalized linear modelsdeep time-to-event modelsneural matrix factorization型号,以及 Gaussian mixture models。看看examples和{a20}了解更多信息!

安装

在安装ProbFlow之前,首先需要安装PyTorch或TensorFlow 2.0和TensorFlow Probability。见more details here

然后,您可以安装ProbFlow本身:

pip install probflow

支持

GitHub issues中发布错误报告、功能请求和教程请求。

贡献

Pull requests完全欢迎!任何贡献都是值得赞赏的,从指出打字错误到编写新的应用程序和发行版这样重要的事情。

为什么叫这个名字,ProbFlow?在

因为这是一个概率建模的软件包,它是建立在TensorFlow上的。` \(ツ)´´

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何编写带有连接的动态JPA查询?   子列表上的java分区列表,其中相邻子列表的第一个和最后一个元素相同   java限定符注释方法找不到作为配置类的bean   java同时抛出主异常和子类型,有合适的方法吗?   LString将是一个链表类,它模仿标准的JavaString和StringBuilder类   spring上下文关闭时java停止ConcurrentTaskScheduler   Java继承基类使用派生类方法   java Google的zxing(斑马线)条形码库的位矩阵不是它应该位于的位置   java使用springhateoas反序列化包含(_链接和_嵌入)的JSON   java破坏者如何使用环形缓冲区读取文件?   java在Android中获得用户的日常路线?   javajenkins:依赖于其他工件/项目的构建作业   java家庭替换应用程序/视图网格使用哪种布局?   java如何从签名证书创建信任库和密钥库?