使用PyMC3进行Softmax回归(多项式逻辑回归)

4
我正在尝试实现一个逻辑多项式回归模型(也称为softmax回归)。在这个例子中,我正在尝试对鸢尾花数据集进行分类。
我遇到了一个问题,在使用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)
1个回答

0
问题可能是向量值变量的 Gibbs 更新不足导致的。因此,仅当所有二进制值产生良好的 logp 时才接受跳跃。此 PR 可能有所帮助:#799
因此,您可以尝试:pip install git+https://github.com/pymc-devs/pymc3@gibbs 然后执行 Metropolis(gibbs='random')。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接