2016-02-12 4 views
3

Я пытаюсь реализовать логическую многочленную регрессию (регрессия AKA softmax). В этом примере я пытаюсь классифицировать набор данных диафрагмыРегрессия Softmax (многокомпонентная логистика) с PyMC3

У меня проблема с заданием модели, я получаю ошибку оптимизации с 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) 

ответ

0

Вопрос, вероятно, является недостатком гиббсовского обновления векторнозначных переменных. Таким образом, скачок принимается только в том случае, если все двоичные значения создают хороший логp. Этот PR может быть полезным: # 799

Итак, вы можете попробовать: pip install git + https://github.com/pymc-devs/[email protected], а затем сделать Metropolis (gibbs = 'random').

Смежные вопросы