python - 使用 PyMC3 的 Softmax 回归(多项逻辑)

标签 python bayesian pymc3 softmax

我正在尝试实现逻辑多项式回归(也称为 softmax 回归)。在这个例子中,我试图对 iris 数据集进行分类

我在指定模型时遇到问题,find_MAP() 出现优化错误。如果我避免使用 find_MAP() 如果我使用 Categorical 作为可能性,我会得到一个所有零向量的“样本”,或者一个与先验完全相同的后验如果我使用 Mutinomial(n=1, p=p)

import pymc3 as pm
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

iris = sns.load_dataset("iris")
y_2 = pd.Categorical(iris['species']).labels
x_n = iris.columns[:-1]
x_2 = iris[x_n].values
x_2 = (x_2 - x_2.mean(axis=0))/x_2.std(axis=0)
indice = list(set(y_2))

with pm.Model() as modelo_s:

    alfa = pm.Normal('alfa', mu=0, sd=100, shape=3)
    beta = pm.Normal('beta', mu=0, sd=100, shape=(4,3))

    mu = (alfa[indice] + pm.dot(x_2, beta[:,indice])).T
    p = pm.exp(mu)/pm.sum(pm.exp(mu), axis=0)

    yl = pm.Categorical('yl', p=p, observed=y_2)
    #yl = pm.Multinomial('yl', n=1, p=p, observed=y_2)

    start = pm.find_MAP()
    step = pm.Metropolis()
    trace_s = pm.sample(1000, step, start)

最佳答案

问题可能是缺少矢量值变量的吉布斯更新。因此,仅当所有二进制值都产生良好的 logp 时才会接受跳转。这个 PR 可能会有帮助:#799

所以你可以试试:pip install git+ https://github.com/pymc-devs/pymc3@gibbs然后做 Metropolis(gibbs='random')。

关于python - 使用 PyMC3 的 Softmax 回归(多项逻辑),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35368902/

相关文章:

python - 使用 PyMC3 进行贝叶斯校准,Kennedy O'Hagan

python - 从 pymc2 到 PyMC3 的 CAR 模型

python - 当所有权正确时,为什么 `killpg` 会返回 “not permitted”?

python - 用于在hadoop中转换表的Python代码

python - 通过 python IMAP 使用消息 ID 检索/搜索电子邮件

r - R 中的 MCMC 变点模型

machine-learning - 贝叶斯设置中 l2 正则化的参数形式应该是什么?

pymc - 在 PyMC3 中使用复似然

python - cv2 imread 返回 None