Retrocesso Linear Bayesiana: Um Guia Completo para Iniciantes…

Regressão Linear Bayesiana: Um Guia Completo para Iniciantes...

Um fluxo de trabalho e um passo a passo de código para edificar um protótipo de retrocesso bayesiana em STAN

Rumo à Ciência de Dados

Nota: Confira meus comentários anteriores item para uma discussão prática sobre por que a modelagem bayesiana pode ser a escolha certa para sua tarefa.

Leste tutorial se concentrará em um fluxo de trabalho + passo a passo de código para edificar um protótipo de retrocesso bayesiana em STANuma linguagem de programação probabilística. STAN é amplamente adotada e faz interface com a linguagem de sua escolha (R, Python, shell, MATLAB, Julia, Stata). Veja o instalação guia e documentação.

Eu vou usar O beicinho para nascente tutorial, simplesmente porque eu programo em Python. Mesmo se você usar outra linguagem, as práticas bayesianas gerais e a sintaxe da linguagem STAN que discutirei cá não variam muito.

Para o leitor mais prático, cá está um link para o caderno para nascente tutorial, secção do meu workshop de modelagem bayesiana na Northwestern University (abril de 2024).

Vamos reprofundar!

Vamos aprender porquê edificar um protótipo de retrocesso linear simples, o pão com manteiga de qualquer estatístico, o método bayesiano. Assumindo uma variável dependente E e covariável Xproponho o seguinte protótipo simples:

E =uma+b* X + ϵ

Onde ⍺ é a interceptação, β é a inclinação e ϵ é qualquer erro aleatório. Assumindo que,

ϵ ~Normal(0, σ)

podemos mostrar que

E ~ Normal (a + b * X, e)

Aprenderemos porquê codificar nascente formulário protótipo no STAN.

Gerar Dados

Primeiro, vamos gerar alguns dados falsos.

#Model Parameters
alpha = 4.0 #intercept
beta = 0.5 #slope
sigma = 1.0 #error-scale
#Generate fake data
x = 8 * np.random.rand(100)
y = alpha + beta * x
y = np.random.normal(y, scale=sigma) #noise
#visualize generated data
plt.scatter(x, y, alpha = 0.8)
Dados gerados para Retrocesso Linear (Imagem do código do Responsável)

Agora que temos alguns dados para modelar, vamos reprofundar em porquê estruturá-los e passá-los para o STAN junto com as instruções de modelagem. Isso é feito por meio do protótipo string, que normalmente contém 4 (ocasionalmente mais) blocos- dados, parâmetros, protótipoe gerado quantidades. Vamos discutir cada um desses blocos em detalhes.

Conjunto DATA

data 
yhat[n] = normal_rng(alpha + x[n] * beta, sigma);
//generate samples from model
log_lik[n] = normal_lpdf( y[n]

O dados conjunto é talvez o mais simples, ele diz ao STAN internamente quais dados ele deve esperar, e em qual formato. Por exemplo, cá nós passamos-

Não: o tamanho do nosso conjunto de dados porquê tipo Inteiro. O secção declara que N≥0. (Embora seja óbvio cá que o comprimento dos dados não pode ser negativo, declarar esses limites é uma boa prática padrão que pode facilitar o trabalho do STAN.)

x: a covariável porquê um vetor de comprimento N.

e: o dependente porquê um vetor de comprimento N.

Ver docs cá para uma gama completa de tipos de dados suportados. O STAN oferece suporte para uma ampla gama de tipos porquê arrays, vetores, matrizes etc. Porquê vimos supra, o STAN também tem suporte para codificação limites em variáveis. Limites de codificação são recomendados! Isso leva a modelos melhor especificados e simplifica os processos de amostragem probabilística operando sob o capô.

Sua visita nos ajuda a continuar oferecendo o melhor para você! ph pi dy ok pj pk ea on nr pl pm pn nv po pp pq nz pr ps pt pu bk">Conjunto de protótipo

O próximo é o protótipo conjunto, onde informamos ao STAN a estrutura do nosso protótipo.

//simple model block 
model

O conjunto do protótipo também contém um elemento importante e muitas vezes confuso: anterior especificação. Priores são uma quintessencial secção da modelagem bayesiana e deve ser especificada adequadamente para a tarefa de amostragem.

Veja meu anterior item para uma introdução ao papel e à percepção por trás dos priores. Para somar, o anterior é uma forma funcional pressuposta para a distribuição de valores de parâmetros — frequentemente referida, simplesmente, porquê crença anterior. Mesmo que os anteriores não tem que exatamente corresponder a solução final, eles devem nos permitir modelo a partir dele.

Em nosso exemplo, usamos priores normais de média 0 com variâncias diferentes, dependendo de quão seguros estamos do valor médio fornecido: 10 para princípio (muito inseguro), 1 para beta (um tanto seguro). Cá, forneci o universal crença que, embora princípio possa assumir uma ampla gama de valores diferentes, a inclinação geralmente é mais restrita e não terá uma grande magnitude.

Portanto, no exemplo supra, o prior para princípio é ‘mais fraco’ que beta.

À medida que os modelos se tornam mais complicados, o espaço de solução de amostragem se expande e o fornecimento de crenças ganha relevância. Caso contrário, se não houver uma percepção possante, é uma boa prática unicamente fornecer menos crença ao protótipo, ou seja, usar um fracamente informativo anterior e permanecer maleável aos dados recebidos.

A forma para y, que você já deve ter reconhecido, é a equação de retrocesso linear padrão.

Quantidades geradas

Por último, temos nosso conjunto para quantidades geradas. Cá informamos ao STAN quais quantidades queremos calcular e receber porquê saída.

generated quantities  alpha + x[n] * beta, sigma);

Nota: O STAN suporta vetores a serem passados ​​diretamente para equações ou porquê iterações 1:N para cada elemento n. Na prática, descobri que esse suporte muda com diferentes versões do STAN, portanto é bom tentar a enunciação iterativa se a versão vetorizada falhar na compilação.

No exemplo acima-

lembrar: gera amostras para y a partir dos valores dos parâmetros ajustados.

log_lik: gera verosimilhança de dados oferecido o protótipo e o valor do parâmetro ajustado.

O propósito desses valores ficará mais simples quando falarmos sobre avaliação de modelos.

No totalidade, especificamos completamente nosso primeiro protótipo de retrocesso bayesiana simples:

model = """
data

Sua visita nos ajuda a continuar oferecendo o melhor para você! ob oc od gn bk">Tudo o que resta é compilar o protótipo e executar a amostragem.

#STAN takes data as a dict
data = {'N': len(x), 'x': x, 'y': y}

O STAN recebe dados de ingresso na forma de um léxico. É importante que esse dict contenha todas as variáveis ​​que dissemos ao STAN para esperar no conjunto model-data, caso contrário o protótipo não será compilado.

#parameters for STAN fitting
chains = 2
samples = 1000
warmup = 10
# set seed
# Compile the model
ulterior = stan.build(model, data=data, random_seed = 42)
# Train the model and generate samples
fit = ulterior.sample(num_chains=chains, num_samples=samples)The .sample() method parameters control the Hamiltonian Monte Carlo (HMC) sampling process, where —
  • num_chains: é o número de vezes que repetimos o processo de amostragem.
  • num_amostras: é o número de amostras a serem retiradas em cada calabouço.
  • aquecimento: é o número de amostras iniciais que descartamos (pois leva qualquer tempo para atingir a vizinhança universal do espaço da solução).

Saber os valores corretos para esses parâmetros depende da complicação do nosso protótipo e dos recursos disponíveis.

Tamanhos de amostragem maiores são, é simples, ideais, mas para um protótipo mal especificado eles provarão ser unicamente perda de tempo e computação. Curiosamente, tive modelos de dados grandes que tive que esperar uma semana para terminar de executar, unicamente para desenredar que o protótipo não convergiu. É importante principiar vagarosamente e verificar a sanidade do seu protótipo antes de executar uma amostragem completa.

Avaliação de protótipo

As quantidades geradas são utilizadas para

  • avaliando a qualidade do ajuste, ou seja, convergência,
  • previsões
  • verificação de modelos

Sua visita nos ajuda a continuar oferecendo o melhor para você! hs nl nm nn hv no np nq nr ns nt nu nv nw nx ny nz oa ob oc od gn bk">Convergência

O primeiro passo para estimar o protótipo, no busto bayesiano, é visual. Observamos os sorteios amostrais do Hamiltoniano de Monte Carlo (HMC) processo de amostragem.

Convergência de modelos: avaliação visual da sobreposição de cadeias de amostragem independentes (Imagem do código do responsável)

Em termos simplistas, o STAN extrai amostras iterativamente para nossos valores de parâmetros e os avalia (o HMC não faz isso). caminho mais, mas isso está além do nosso escopo atual). Para um bom ajuste, os sorteios de modelo devem converge para alguma superfície universal generalidade que seria, idealmente, a global ótimo.

A figura supra mostra os sorteios de amostragem do nosso protótipo em duas cadeias independentes (vermelha e azul).

  • À esquerda, plotamos a distribuição universal do valor do parâmetro ajustado, ou seja, mais tarde. Esperamos um normal distribuição se o protótipo e seus parâmetros forem muito especificado. (Por que é isso? Muito, uma distribuição normal unicamente implica que existe uma certa tira de valores de melhor ajuste para o parâmetro, o que fala em espeque à nossa forma de protótipo escolhida). Ou por outra, devemos esperar uma considerável sobreposição através das cadeias SE o protótipo está convergindo para um ótimo.
  • À direita, plotamos as amostras reais retiradas em cada iteração (unicamente para ser extra simples). Cá, mais uma vez, desejamos ver não unicamente uma estreito alcance, mas também muito sobreposição entre os sorteios.

Nem todas as métricas de avaliação são visuais. Gelman et al. [1] também propõe o Barato diagnóstico que é forçoso é uma medida matemática da similaridade da modelo entre as cadeias. Usando Rhat, pode-se definir um ponto de namoro além do qual as duas cadeias são julgadas muito diferentes para convergir. O namoro, no entanto, é difícil de definir devido à natureza iterativa do processo e aos períodos de aquecimento variáveis.

A verificação visual é, portanto, um componente crucial, independentemente dos testes de diagnóstico

Um pensamento frequentista que você pode ter cá é que, “muito, se tudo o que temos são cadeias e distribuições, qual é o valor real do parâmetro?” Leste é exatamente o ponto. A formulação bayesiana lida unicamente com distribuiçõesNÃO indicar estimativas com suas estatísticas de teste difíceis de interpretar.

Dito isto, o ulterior ainda pode ser resumido usando credível intervalos porquê o Pausa de Subida Densidade (IDH), que inclui todos os pontos com maior densidade de verosimilhança x%.

95% IDH para beta (Imagem do código do responsável)

É importante contrastar o Bayesiano credível intervalos com frequentista crédito intervalos.

  • O pausa credível fornece uma verosimilhança distribuição no valores possíveis para o parâmetro ou seja, a verosimilhança do parâmetro assumir cada valor em qualquer pausa, dados os dados.
  • O pausa de crédito diz reverência à parâmetro valor porquê fixoe estima em vez disso a crédito de que repetido aleatório Amostragens dos dados seria corresponder.

Daí o

A abordagem bayesiana permite que os valores dos parâmetros sejam fluidos e toma os dados pelo seu valor nominal, enquanto a abordagem frequentista exige que exista um único valor de parâmetro verdadeiro… se ao menos tivéssemos aproximação a todos os dados.

Ufa. Deixe isso penetrar, leia novamente até que isso aconteça.

Outra implicação importante da utilização de intervalos credíveis, ou por outras palavras, permitir que o parâmetro seja variávelé que as previsões que fazemos capturam isso incerteza com transparênciacom um evidente IDH% informando a melhor traço de ajuste.

Risca de melhor ajuste de 95% do IDH (Imagem do código do responsável)

Conferência de modelos

No quadro bayesiano, a Métrica de Informação Watanabe-Akaike (WAIC) é a escolha amplamente aceita para verificação de modelos. Uma explicação simples da pontuação WAIC é que ela estima o protótipo verosimilhança enquanto regularizando para o número de parâmetros do protótipo. Em palavras simples, pode ser responsável pelo overfitting. Leste também é o principal atrativo da estrutura bayesiana — não se faz não necessariamente precisar para segurar um protótipo validação conjunto de dados. Portanto,

A modelagem bayesiana oferece uma vantagem crucial quando os dados são escassos.

A pontuação WAIC é uma comparativo medida, ou seja, ela só tem significado quando comparada entre diferentes modelos que tentam explicar os mesmos dados subjacentes. Assim, na prática, pode-se continuar adicionando mais complicação ao protótipo enquanto o WAIC aumenta. Se em qualquer ponto desse processo de soma de complicação maníaca, o WAIC principiar a desabar, pode-se fechar o dia — qualquer complicação a mais não oferecerá uma vantagem informacional na descrição da distribuição de dados subjacente.

Peroração

Para somar, o conjunto do protótipo STAN é simplesmente uma string. Ele explica ao STAN o que você vai dar a ele (protótipo), o que deve ser encontrado (parâmetros), o que você acha que está acontecendo (protótipo) e o que ele deve lhe dar de volta (quantidades geradas).

Quando ligado, o STAN simplesmente gira a manivela e emite sua saída.

O verdadeiro repto está em definir um protótipo adequado (referir-se a prioris), estruturar os dados adequadamente, perguntar ao STAN exatamente o que você precisa deles e estimar a sanidade de sua saída.

Depois que tivermos essa secção, podemos nos aprofundar no poder real do STAN, onde especificar modelos cada vez mais complicados se torna unicamente uma tarefa sintática simples. Na verdade, em nosso próximo tutorial, faremos exatamente isso. Vamos edificar sobre nascente exemplo de retrocesso simples para explorar a retrocesso bayesiana Hierárquico modelos: um padrão da indústria, estado da arte, de indumento… o que você quiser. Veremos porquê juntar efeitos radom ou fixos em nível de grupo em nossos modelos e nos maravilharemos com a facilidade de juntar complicação, mantendo a comparabilidade na estrutura bayesiana.

Inscreva-se se nascente item ajudou e fique ligado para mais novidades!

Referências

[1] Andrew Gelman, John B. Carlin, Hal S. Stern, David B. Dunson, Aki Vehtari e Donald B. Rubin (2013). Estudo de Dados Bayesianos, Terceira Edição. Chapman e Hall/CRC.

Tags:

Crédito: Nascente Original

Adriano Pina

Adriano Pina

Análise de Sistemas | SEO e Google Ads | Fundador da Loja Script PHP Aqui & Marca Shoslh de tecnologia

Especialista em transformar ideias em soluções digitais e acelerar o crescimento online.

Deixe um comentário

Tem perguntas? Nos envia sua mensagem 24/7!

(17) 99100-0874

Endereço & Contato

Centro, Interior de São Paulo
E-mail: [email protected]

Links Úteis
BAIXAR APP | SCRIPT PHP AQUI
Certificados
0
    0
    Seu carrinho
    Seu carrinho está vazio

    Usamos cookies para garantir que oferecemos a melhor experiência em nosso site. 

       

    X

    Clique em um de nossos representantes abaixo para conversar no WhatsApp ou envie um email para: 📧 [email protected]

    Precisa de ajuda fale conosco?