python - 编码自定义似然 Pymc3
问题描述
我正在努力在 pymc3 中以自定义可能性实现线性回归。
我之前在 CrossValidated 上发布了这个问题,建议在此处发布,因为该问题更面向代码(在此处关闭帖子)
假设您有两个自变量 x1、x2 和一个目标变量 y,以及一个称为 delta 的指示变量。
- 当 delta 为 0 时,似然函数是标准最小二乘法
- 当 delta 为 1 时,只有当目标变量大于预测值时,似然函数才是最小二乘贡献
观察数据的示例片段:
x_1 x_2 observed_target
10 1 0 100
20 2 0 50
5 -1 1 200
10 -2 1 100
有谁知道如何在 pymc3 中实现这一点?作为一个起点...
model = pm.Model()
with model as ttf_model:
intercept = pm.Normal('param_intercept', mu=0, sd=5)
beta_0 = pm.Normal('param_x1', mu=0, sd=5)
beta_1 = pm.Normal('param_x2', mu=0, sd=5)
std = pm.HalfNormal('param_std', beta = 0.5)
x_1 = pm.Data('var_x1', df['x1'])
x_2 = pm.Data('var_x2', df['x2'])
mu = (intercept + beta_0*x_0 + beta_1*x_1)
解决方案
如果这有帮助,从阅读文档来看,这些方面的内容可能会起作用,但我无法对其进行测试,而且评论太长了。
model = pm.Model()
with model as ttf_model:
intercept = pm.Normal('param_intercept', mu=0, sd=5)
beta_0 = pm.Normal('param_x1', mu=0, sd=5)
beta_1 = pm.Normal('param_x2', mu=0, sd=5)
std = pm.HalfNormal('param_std', beta = 0.5)
x_1 = pm.Data('var_x1', df['x1'])
x_2 = pm.Data('var_x2', df['x2'])
delta = pm.Data('delta', df['delta']) # Or whatever this column is
target = pm.Data('target', df['observed_target'])
ypred = (intercept + beta_0*x_0 + beta_1*x_1) # Intermediate result
target_ge_ypred = pm.math.ge(target, ypred) # Compare target to intermediate result
zero = pm.math.constant(0) # Use this if delta==1 and target<ypred
# EDIT: Check delta
alternate = pm.math.switch(target_ge_ypred, ypred, zero) # Alternative result
mu = pm.math.switch(pm.math.eq(delta, zero), ypred, alternate) # Actual result wanted?
推荐阅读
- cucumber - 尽管添加了依赖项,但未找到 @Given 符号
- adobe - 为什么 Adobe AE 这么慢?
- math - 根据玩过的游戏计算加权平均值
- node.js - 在 mongodb 中搜索文本和整数
- python - 如何使用 cartopy 将显示坐标转换为地理坐标(纬度、经度)?
- python - 如何使用训练和测试从最近 50 次观察中进行预测:LightGBM 与步进预测
- python - Discordbot TypeError:只能将str(不是“NoneType”)连接到str
- python - Python Numpy 使用先验值计算——无循环
- c++ - 调用recv时需要偏移指针吗?
- javascript - 使用打字稿泛型检查对象是否为空