非常简单的贝叶斯回归使用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第三方库


热门话题
使用安卓 studio和mysql进行第二次照片更新的java   java是我的pom。xml安装和生成失败   获取并处理java异常行   java 2d平台冲突错误   java使用SSH exec通道调用shell脚本,但忽略对其他shell脚本的调用   java如何将postgresSql查询重写为Springdata jpa查询   java无法使用IP地址和端口登录liferay 6.2   爪哇1。按钮不显示文本2。逻辑正确吗   java如何在片段中使用谷歌地图视图?   如何在java中连接字符?   Java右移输出负值   java@PropertySource()在@ImportResource()导入的XML中定义的bean中不起作用   Java、SWT使窗口(shell)部分透明   回溯回溯java中的DUCU