非常简单的贝叶斯回归使用numpyro。
shabadoo的Python项目详细描述
沙巴多:非常简单的贝叶斯回归
"That's the worst name I ever heard."
沙巴多是最糟糕的机器学习。它不会自动执行任何操作;您的模型将不能很好地执行,这将是您自己的错误。在
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
是一个字典字典,每个特性有一个条目。上面定义了两个特性(const
和x
)。{{cd7}每一个功能都需要。在
转换器指定如何获得给定源数据帧的特性。前者指定了您对该特性的模型系数的信念。在
拟合和预测模型
shabado模型实现了众所周知的.fit
/.predict
api模式。在
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_json
和from_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
- 项目
标签: