非常简单的贝叶斯回归使用numpyro。

shabadoo的Python项目详细描述


沙巴多:非常简单的贝叶斯回归

Imgur

"That's the worst name I ever heard."

badgebadgecodecovPyPI - Python VersionPyPI

沙巴多是最糟糕的机器学习。它不会自动执行任何操作;您的模型将不能很好地执行,这将是您自己的错误。在

BEWARE. Shabadoo is in an open alpha phase. It is authored by someone who does not know how to manage open source projects. Things will change as the author identifies mistakes and corrects (?) them.

Shabadoo是为那些想做贝叶斯回归但不想写概率编程代码的人设计的。您只需要为特性分配优先级,并将pandas数据帧传递给.fit()/.predict()API。在

shabado运行在numpyro上,基本上是numpyro Bayesian regression tutorial的包装器。在

快速启动

安装

pip install shabadoo

或者

^{pr2}$

指定沙巴多贝叶斯模型

Shabadoo的设计目的是让人们尽可能容易地测试关于功能及其前驱的想法。模型是使用一个类定义的,该类包含指定模型应该如何运行的配置。在

您需要定义一个继承自Shabadoo模型的新类。目前实现了Normal、Poisson和Bernoulli。在

importnumpyasnpimportpandasaspdfromnumpyroimportdistributionsasdistfromshabadooimportNormal# random number generator seed, to reproduce exactly.RNG_KEY=np.array([0,0])classModel(Normal):dv="y"features=dict(const=dict(transformer=1,prior=dist.Normal(0,1)),x=dict(transformer=lambdadf:df.x,prior=dist.Normal(0,1)),)df=pd.DataFrame(dict(x=[1,2,2,3,4,5],y=[1,2,3,4,3,5]))

dv属性指定要预测的变量。features是一个字典字典,每个特性有一个条目。上面定义了两个特性(constx)。{{cd7}每一个功能都需要。在

转换器指定如何获得给定源数据帧的特性。前者指定了您对该特性的模型系数的信念。在

拟合和预测模型

shabado模型实现了众所周知的.fit/.predictapi模式。在

model=Model().fit(df,rng_key=RNG_KEY)# sample: 100%|██████████| 1500/1500 [00:04<00:00, 308.01it/s, 7 steps of size 4.17e-01. acc. prob=0.89]model.predict(df)"""0    1.3518741    2.2195102    2.2195103    3.0871464    3.9547825    4.822418"""

可信区间

使用model.predict(df, ci=True)获得模型预测的可信区间。这个区间说明了估计模型系数的误差,但并没有解释模型点估计的误差(PRs welcome ya'll!)。在

model.predict(df,ci=True)"""          y  ci_lower  ci_upper0  1.351874  0.730992  1.9466591  2.219510  1.753340  2.6546782  2.219510  1.753340  2.6546783  3.087146  2.663617  3.5264344  3.954782  3.401837  4.5484205  4.822418  4.047847  5.578753"""

检查模型

Shabadoo的模型类附带了许多模型检查方法。它应该很容易理解你的模型的组成和沙巴多它是!在

打印模型公式

MCMC样本的平均值和标准差通常用于提供系数的大致含义。在

print(model.formula)"""y = (    const * 0.48424(+-0.64618)  + x * 0.86764(+-0.21281))"""

看后面的样本

可以使用model.samples(对于原始设备数组)和model.samples_df(对于整洁的数据帧)访问来自已安装模型的示例。在

model.samples['x']"""DeviceArray([[0.9443443 , 1.0215557 , 1.0401363 , 1.1768144 , 1.1752374 ,..."""model.samples_df.head()"""                 const         xchain sample                    0     0       0.074572  0.944344      1       0.214246  1.021556      2      -0.172168  1.040136      3       0.440978  1.176814      4       0.454463  1.175237"""

测量预测精度

Model.metrics()方法包含了功能。您不必编写大量代码来评估模型的预测精度!在

获取汇总统计信息非常简单:

model.metrics(df){'r':0.8646920305474705,'rsq':0.7476923076923075,'mae':0.5661819464378061,'mape':0.21729708806356265}

对于逐点错误,请使用aggerrs=False。将返回一个pandas数据帧,您可以使用它的索引加入源数据。在

model.metrics(df,aggerrs=False)"""   residual         pe        ape0 -0.351874 -35.187366  35.1873661 -0.219510 -10.975488  10.9754882  0.780490  26.016341  26.0163413  0.912854  22.821353  22.8213534 -0.954782 -31.826066  31.8260665  0.177582   3.551638   3.551638"""

您可以使用grouped_metrics来理解组内错误。在这种情况下,预测和实际的dv按聚合(默认总和)分组,并在每个组内计算度量。在

df["group"]=[1,1,1,2,2,2]model.grouped_metrics(df,'group'){'r':1.0,'rsq':1.0,'mae':0.17238043177407247,'mape':0.023077819594065668}
model.grouped_metrics(df,"group",aggerrs=False)"""       residual        pe       apegroup                              1     -0.209107 -3.485113  3.4851132     -0.135654 -1.130450  1.130450"""

保存和恢复保存的模型

Shabadoo模型有to_jsonfrom_dict方法,可以精确地保存和恢复模型。在

importjson# export to a JSON stringmodel_json=model.to_json()# recover the modelmodel_recovered=Model.from_dict(json.loads(model_json))# check the predictions are the samemodel_recovered.predict(df).equals(model.predict(df))True

发展

要进行开发安装,请根据需要设置Python3.6或3.7 virtualenv,并设置Shabadoo的可编辑安装,如下所示:

$ git clone https://github.com/nolanbconaway/shabadoo.git 
$ cd shabadoo
$ pip install -e .[test]

您应该能够通过以下方式运行完整的测试套件:

$ tox -e py36  # or py37 if thats what you installed

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

推荐PyPI第三方库


热门话题
java动态地将圆添加到Arraylist   什么是好的“错误检查”模式(Java)?   java是我们可以在应用程序中使用的云服务,它需要存储最大大小为5MB的小文件   JavaGooglePhotosAPI是静态内容上传项目的永久url   java AES密钥存储   java文件正在下载,但没有任何内容   每次循环迭代和threadsleep的java日志记录都是不好的做法?   java不会切换到另一个。单击submit时使用jsp。春季mvc   java我很难从我的maclaurin系列中获得sin x的准确输出   java使用类似的<Object>?   需要java Hibernate映射吗?   java如何在https和客户端证书请求后面生成web服务代理   java如何通过注释有条件地使用自定义JsonSerializer   java如何在html页面和Restful WebResource方法之间实现JaxB?   读取文件Libgdx Android时发生java错误   java如何在处理主活动之前从另一个方法中获取值?   java在一个SQLquery中使用多个语句,还是使用批处理?