Introduction à la modélisation statistique bayésienne avec python ~ Essai de régression linéaire avec MCMC ~

introduction

L'approche complète basée sur les données est-elle correcte? Utilisez plus de savoir-faire humain pour la modélisation!

«Je pense que l'approche du big data et du machine learning de nos jours est d'apprendre toutes les règles à partir des données. «Cependant, en fait, il est rare que ** une grande quantité de données complètes sur tous les événements soit accumulée **.


Statistiques bayésiennes (de base)

Ici, je n'introduirai que l'idée minimale (image) et le théorème de base. ――Il existe de nombreux livres faciles à comprendre pour des explications précises et détaillées des statistiques bayésiennes, veuillez donc vous y référer.

Pensée bayésienne

Les statistiques bayésiennes déduisent la «cause» du «résultat»

«Habituellement, les personnes qui commencent à étudier les statistiques commencent souvent par des statistiques de la théorie des fréquences, mais je pense que c'est l'une des raisons pour lesquelles les statistiques bayésiennes sont difficiles à comprendre.

image.png

Dans les statistiques bayésiennes, les variables sont subjectivement «déterminées provisoirement» et corrigées (mises à jour) avec les données observées.

image.png

Théorème de Bayes

image.png

A part: Interpréter le théorème de Bayes à partir de termes qui apparaissent dans l'apprentissage automatique

――Ce qui suit est un aparté, donc si vous n'êtes pas intéressé, veuillez l'ignorer. ---- P (X | θ) est appelé vraisemblance --La ** méthode d'estimation la plus probable **, qui apparaît également dans l'apprentissage automatique, recherche θ qui maximise ce P (X | θ).

Méthode de calcul

  1. Distribution a priori conjuguée naturelle --Il existe des combinaisons de distributions de probabilité qui ont les mêmes distributions a priori et postérieur (par exemple, distribution de Bernoulli et distribution bêta). ――Il s'agit d'une méthode pour calculer analytiquement des paramètres en tirant parti de ses caractéristiques. ――Cependant, la distribution est très limitée pour satisfaire la condition de combinaison, elle est donc rarement utilisée dans la pratique à l'heure actuelle.
  1. MCMC
  1. Raisonnement variable ――Il s'agit d'une méthode pour rechercher une distribution proche de la distribution postérieure par la méthode du gradient. --Définir la fonction de perte (distance) de la distribution approximative et de la distribution postérieure avec divergence KL, et rechercher la valeur approximative en minimisant la fonction de perte (c'est une approche souvent utilisée dans les réseaux de neurones).

――Dans cet article, nous présenterons l'estimation des paramètres par MCMC.

Modèle de régression démo-linéaire-

HardC'est difficile à comprendre dans les phrases, alors je vais l'essayer avec python immédiatement.

Créer des exemples de données

#Créer des exemples de données
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(123)

#Exemples de paramètres de génération de données
N = 100
alpha_real = 2.5
beta_real = 0.9
eps_real = np.random.normal(0, 0.5, size=N)

#modèle: y = α + βx + Noise
x = np.random.normal(10, 1, N)
y_real = alpha_real + beta_real *x
y = y_real + eps_real

#Visualisation de données
plt.plot(x, y, '.')
plt.xlabel('x')
plt.ylabel('y')
plt.plot(x, y_real, 'orange')
plt.show()

image.png

Modèle de régression linéaire avec MCMC

conda install pymc3==3.6

Procédure de base de pyMC

  1. Définition du modèle et exécution MCMC
  2. Confirmation / évaluation de la distribution postérieure de chaque paramètre
  3. Inférence utilisant la distribution postérieure (visualisation de la prédiction / intervalle de confiance)

Comment écrire un modèle avec pyMC

--Dans pyMC, vous devez décrire le modèle comme suit ――J'ai écrit diverses choses, mais le point est ** 1. Définition du modèle, 2. Calcul des probabilités, 3. Exécution de MCMC **. -Si vous cochez Official Document, diverses autres options (réglage de la valeur initiale et autres algorithmes MCMC) sont introduites. ―― Tout d'abord, il est préférable de comprendre la méthode de description minimale du modèle ci-dessous, puis d'essayer d'autres options si nécessaire.

#Dans PyMC, le modèle est défini par with ward
with pm.Model() as model:
    # 1.Définition de la distribution antérieure (définissez la variable que vous souhaitez utiliser comme paramètre)
    '''
Diverses distributions de probabilité sont préparées par pyMC, et la distribution normale est utilisée ici.
Définissez le nom de la distribution sous forme de chaîne de caractères, puis définissez les paramètres de distribution précédents.
    '''
    α = pm.Normal('alpha', mu=0, sd=10)#Distribution normale (moyenne=0,écart-type=10)
    β = pm.Normal('beta', mu=0, sd=1)#Distribution normale (moyenne=0,écart-type=1)
    noise = pm.Normal('noise', mu=0, sd=1)
    # 2.Calcul de la probabilité
    '''
La mise à jour des probabilités est effectuée en donnant la valeur observée à
    '''
     y_pred = pm.Normal('y_pred', mu=α*x+β, sd=noise, observed=y)
    # 3.Exécutez MCMC
    '''
Il existe différents paramètres tels que les valeurs initiales et les algorithmes, mais c'est basique et polyvalent."NUTS"Utilisez l'algorithme
    draws=Nombre de nombres aléatoires à générer, chains=Nombre de processus parallèles
    '''
    trace = pm.sample(draws=5000, chains=1) #5000 échantillons*1 parallèle=Générer 5000 nombres aléatoires

Effectuer une modélisation bayésienne

import pymc3 as pm    
    
#modèle
with pm.Model() as model:
    # 1.Distribution antérieure
    alpha = pm.Normal('alpha', mu=0, sd=10)#0 en moyenne pour α,En supposant une distribution normale avec un écart type de 10
    beta = pm.Normal('beta', mu=0, sd=1)#0 en moyenne pour β,En supposant une distribution normale avec un écart type de 1
    epsilon = pm.HalfCauchy('epcilon', 5)#En supposant une distribution semi-cauchy avec une fréquence maximale de 5 pour le bruit
    # 2.Calcul de la probabilité
    y_pred = pm.Normal('y_pred', mu=alpha+beta*x, sd=epsilon, observed=y)
    # 3.Exécutez MCMC
    trace = pm.sample(11000, chains=1)
#Confirmation / évaluation de la distribution postérieure de chaque paramètre (graphique)
trace_n = trace[1000:]#Jeter les 1000 premiers cas (voir ci-dessous:"Brûler")
pm.traceplot(trace_n)

#Confirmation / évaluation de la distribution postérieure de chaque paramètre (statistiques)
pm.summary(trace_n)

image.png

--Brûler

Enfin, utilisez les résultats de la simulation pour tracer une droite de régression et évaluer les résultats d'inférence du modèle.

# α,Acquisition de la valeur β (la valeur moyenne des résultats de la simulation est utilisée comme valeur représentative de chaque paramètre)
alpha_m = trace_n['alpha'].mean()
beta_m = trace_n['beta'].mean()

#Visualisation
plt.plot(x, y, '.')
plt.plot(x, y_real, 'orange', label='True')
plt.plot(x, alpha_m + beta_m*x, 'red', label='Estimated')
plt.legend()

image.png

#Génération d'échantillons à partir de la distribution postérieure
ppc = pm.sample_posterior_predictive(trace_n, samples=1000, model=model)

#Visualisation du diagramme de dispersion et de la ligne de régression
plt.plot(x, y, '.')
plt.plot(x, alpha_m + beta_m*x)

#Intervalle de confiance
idx = np.argsort(x)
x_ord = x[idx]
# 50%Section HPD
sig0 = pm.stats.hpd(ppc['y_pred'], alpha=0.5)[idx]
# 95%Section HPD
sig1 = pm.stats.hpd(ppc['y_pred'], alpha=0.05)[idx]
#Représenter l'intervalle de confiance avec un remplissage
plt.fill_between(x_ord, sig0[:,0], sig0[:,1], color='gray', alpha=1)
plt.fill_between(x_ord, sig1[:,0], sig1[:,1], color='gray', alpha=0.5)

image.png

Qu'est-ce que la section HPD?

enfin

Possibilités de modélisation bayésienne

Dans cet article, j'ai essayé de résoudre les bases de la statistique bayésienne et du modèle de régression linéaire en utilisant MCMC.

Pour promouvoir l'utilisation des données

Dans cet article, j'ai essayé d'expliquer les bases des statistiques bayésiennes en utilisant python, qui est l'un des langages les plus utilisés dans la pratique de nos jours. «À l'ère actuelle où le DX et l'utilisation des données sont nécessaires, j'entends souvent les inquiétudes selon lesquelles" je veux promouvoir les efforts mais il n'y a pas de données appropriées !! " «Il est bien sûr important de créer une base de données à partir de zéro et de commencer à collecter des données, mais cela ne suffira pas à rattraper les entreprises mondiales qui ouvrent la voie dans les efforts d'utilisation des données. «Par conséquent, je pensais que la modélisation bayésienne ne pouvait être utilisée que par ** des entreprises japonaises qui n'ont pas de données mais un savoir-faire commercial abondant cultivé depuis de nombreuses années **, j'ai donc écrit cet article. J'espère que cela vous donnera un petit indice pour les entreprises qui souhaitent promouvoir l'utilisation des données mais qui n'ont pas réussi.

Recommended Posts

Introduction à la modélisation statistique bayésienne avec python ~ Essai de régression linéaire avec MCMC ~
Introduction au modèle linéaire généralisé (GLM) par Python
"Introduction à l'analyse de données par modélisation statistique bayésienne à partir de R et Stan" implémenté en Python
[Python] Régression linéaire avec scicit-learn
Introduction à la modélisation statistique pour le modèle linéaire généralisé d'analyse de données (GLM)
Introduction au remplissage d'image Python Remplissage d'image à l'aide d'ImageDataGenerator
[Introduction à Python] Utilisons foreach avec Python
Essayer de gérer SQLite3 avec Python [Note]
Introduction aux vecteurs: Algèbre linéaire en Python <1>
Livre de canard implémenté en Python "Modélisation statistique Bayes avec Stan et R"
J'ai essayé d'implémenter la régression linéaire bayésienne par échantillonnage de Gibbs en python
(Apprentissage automatique) J'ai essayé de comprendre attentivement la régression linéaire bayésienne avec l'implémentation
Introduction aux tests d'hypothèses statistiques avec des modèles de statistiques
Implémenté en Python PRML Chapitre 3 Régression linéaire bayésienne
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
Introduction à l'intelligence artificielle avec Python 1 «Théorie des algorithmes génétiques»
Markov Chain Artificial Brainless avec Python + Janome (1) Introduction à Janome
Chaîne de Markov artificielle sans cervelle avec Python + Janome (2) Introduction à la chaîne de Markov
Introduction à l'intelligence artificielle avec Python 2 «Pratique de l'algorithme génétique»
Introduction à OPTIMIZER ~ De la régression linéaire à Adam à Eve
Introduction à Tornado (1): Framework Web Python démarré avec Tornado
Introduction à la modélisation statistique pour l'analyse des données
Introduction au vol en formation avec Tello edu (Python)
Introduction à Python avec Atom (en route)
[Introduction à l'application Udemy Python3 +] 9. Tout d'abord, imprimez avec print
"Régression linéaire" et "Version probabiliste de la régression linéaire" en Python "Régression linéaire de Bayes"
Régression linéaire avec statsmodels
[Introduction à Python] Comment itérer avec la fonction range?
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
Implémentation python de la classe de régression linéaire bayésienne
Introduction aux mathématiques à partir du mémo d'étude Python Vol.1
Note de lecture: Introduction à l'analyse de données avec Python
Introduction au langage Python
Introduction à OpenCV (python) - (2)
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
Régression avec un modèle linéaire
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
Introduction à l'algèbre linéaire avec Python: Décomposition A = LU
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
Notes de lecture (en Python et Stan) pour une introduction à la modélisation statistique pour l'analyse de données (Midorimoto)
[python] Remarques lors de la tentative d'utilisation de numpy avec Cython
20200329_Introduction à l'analyse de données avec Python 2nd Edition Personal Summary
Introduction à elle faite avec Python ~ Projet d'automatisation Tinder ~ Épisode 5
Introduction à Python pour les utilisateurs de VBA - Appeler Python depuis Excel avec xlwings -
Introduction à la modélisation bayésienne à l'aide de la traduction japonaise pymc3 de modélisation bayésienne en Python (chapitre 0-2)
[Raspi4; Introduction au son] Enregistrement stable de l'entrée sonore avec python ♪
Introduction à la modélisation statistique pour l'analyse des données Sélection du modèle GLM
[Introduction à Python] Comment obtenir des données avec la fonction listdir
Essayez d'implémenter la régression linéaire à l'aide de Pytorch avec Google Colaboratory
[Introduction à Udemy Python3 + Application] 51. Soyez prudent avec les arguments par défaut
Connectez-vous à BigQuery avec Python
Introduction à Python Django (2) Win
Connectez-vous à Wikipedia avec Python
Publiez sur Slack avec Python 3
Introduction à RDB avec sqlalchemy Ⅰ
Introduction à la communication série [Python]
Basculer python vers 2.7 avec des alternatives
Écrire en csv avec Python
[Introduction à Python] <liste> [modifier le 22/02/2020]
Introduction à Python (version Python APG4b)