motivation
--Je veux écrire un algorithme d'apprentissage automatique à partir de zéro en Python
――Il existe une Page de révision technique qui a une bonne réputation lorsque vous recherchez sur Google "l'apprentissage automatique", et elle sert également d'étude. Bien qu'il s'agisse d'une ancienne page, elle est recommandée à ceux qui ne l'ont pas lue car l'explication était facile à comprendre.
- Ce qui suit est un résumé de la page ci-dessus pour la compréhension de soi (voir la page originale à la fin de la phrase pour plus de détails).
Flux de la recherche d'une régression linéaire
Fonction de base
――Dans "régression linéaire", définissez d'abord ce que l'on appelle une "fonction de base"
- Littéralement, ce que vous utilisez comme base pour exprimer une fonction
--Il n'y a pas de conditions spéciales pour la fonction de base, vous pouvez donc utiliser n'importe quelle fonction que vous aimez.
――Cependant, les performances du modèle et la forme de la fonction obtenue étant déterminées par la méthode de sélection, il est nécessaire de sélectionner la fonction de base en fonction du problème à résoudre.
- Les deux fonctions de base les plus couramment utilisées sont les suivantes (les détails de chacune seront décrits plus loin).
** Base polygonale **
\phi_i(x)=x^i\hspace{1.0em}(i=0,\cdots,M-1)
** Base gaussienne **
\phi_i(x)=\exp\left\{-\frac{(x-c_i)^2}{2s^2}\right\}\hspace{1.0em}(i=0,\cdots,M-1)
Comment trouver une régression linéaire
- La fonction de base est d'abord déterminée et fixée, et la fonction f (x) pour laquelle vous voulez trouver la somme linéaire est utilisée.
- En utilisant le poids $ w_i $ donné à chaque fonction de base comme paramètre, vous pouvez obtenir "l'ensemble des fonctions supposées".
f(x)= \sum^{M-1}_{i=0}w_i\phi_i(x) = w^T\phi(x) \hspace{1.0em}(Équation 1)
--F (x) peut être obtenu en déterminant le paramètre $ w_i $, il devrait donc y avoir un moyen de déterminer $ w_i $ de manière appropriée.
- => Utiliser l'erreur carrée comme fonction de calcul erroné
E(w)=\frac{1}{2}\sum^N_{n=1}(f(x_n)-t_n)^2
=\frac{1}{2}\sum^N_{n=1}\left(\sum^{M-1}_{i=0}w_{i}x^{i}_{n}-t_n\right)^2 \hspace{1.0em}(Équation 2)
--C'est compliqué à première vue, mais en se rappelant que $ x_n $ et $ t_n $ sont des constantes (points déjà donnés), cela peut être considéré comme une fonction de $ w_i $, juste une expression quadratique de $ w_i $. Est
--Par conséquent, vous pouvez trouver $ w_i $ qui minimise la fonction d'erreur $ E (w) $, et vous pouvez également décider de la fonction f (x) que vous voulez trouver.
- Le flux de base de la "régression linéaire" est de trouver le poids $ w $ en minimisant l'erreur quadratique.
Exemple de données
Étant donné un graphique comme celui ci-dessous, je veux trouver sa régression linéaire
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
X = np.array([0.02, 0.12, 0.19, 0.27, 0.42, 0.51, 0.64, 0.84, 0.88, 0.99])
t = np.array([0.05, 0.87, 0.94, 0.92, 0.54, -0.11, -0.78, -0.79, -0.89, -0.04])
plt.xlim([0,1.0])
plt.ylim([-1.5,1.5])
plt.plot(X, t, 'o')
plt.show()
Trouvez la relation entre X et t par régression linéaire
Trouver une régression linéaire à l'aide d'une base polynomiale
Base de polygone
Défini par la formule suivante (republication)
\phi_i(x)=x^i\hspace{1.0em}(i=0,\cdots,M-1)
--La base polynomiale a l'avantage que la solution peut être obtenue dans le format familier de "polypole", mais elle a la caractéristique qu'elle influence fortement l'estimation en un point éloigné.
- On peut dire que les restrictions sur la notation de la solution sont trop fortes.
--Cette fois, nous allons essayer de résoudre la fonction caractéristique φ en utilisant la base polynomiale de la fonction cubique. Par conséquent, l'équation de régression $ f (x) $ à obtenir est la suivante.
f(x)=w_{1}+w_{2}x+w_{3}x^2+w_{4}x^3
- Tout en fixant la fonction de base φ (x), le paramètre $ w $ peut être déplacé librement.
- Puis $ f (x) $ change, donc trouver le "$ w $ le plus approprié pour un point de données donné" est l'approche de régression linéaire.
- $ w $ tel que $ f (x) $ passe "le plus proche" du point de données ($ X_n $, $ t_n $) (n = 1, ..., N) est "fonction mal calculée $ E (w) À $ w_i $ où $ est le minimum, la différenciation partielle est de 0 ”, et trouvez $ w_i $ qui donne la valeur minimum.
\frac{\partial E(w)}{\partial w_m}=\sum^N_{n=1}\phi_m(x_n)\left(\sum^M_{j=1}w_j\phi_j(x_n)-t_n\right)=0 \hspace{1.0em}(m=1,\cdots,M) \hspace{1.0em}(Équation 3)
--Si ces équations simultanées sont arrangées à l'aide d'une matrice, la solution $ w $ peut être obtenue par l'équation suivante.
w = (\phi^T\phi)^{-1}\phi^{T}t \hspace{1.0em}(Équation 4)
Cependant, Φ est une matrice définie comme suit.
\phi=\left(
\begin{array}{ccc}
\phi_{1}(x_1) & \phi_{2}(x_1) & \cdots & \phi_{M}(x_1) \\
\vdots & \vdots& & \vdots \\
\phi_{1}(x_N) & \phi_{2}(x_N) & \cdots & \phi_{M}(x_N)\\
\end{array}
\right) \hspace{1.0em}(Équation 5)
- En remplaçant le paramètre $ w $ ainsi obtenu en $ f (x) = \ sum ^ {M-1} _ {i = 0} w_i \ phi_i (x) = w ^ T \ phi (x) $ Vous obtenez la fonction $ f (x) $ qui passe près du point
Trouver une régression linéaire à base polynomiale (fonction du troisième ordre) (implémentation du contenu ci-dessus)
Écrivez le contenu ci-dessus tel qu'il est dans le code et trouvez la régression linéaire avec la base polynomiale (fonction du troisième ordre)
(* Les termes de normalisation ne sont pas pris en compte ici)
#Lorsqu'une base polynomiale est utilisée pour la fonction caractéristique φ
def phi(x):
return [1, x, x**2, x**3]
PHI = np.array([phi(x) for x in X])
#Calcul de la partie ci-dessus (équation 4). np.dot:Trouvez le produit intérieur np.linalg.inv:Trouvez l'inverse
w = np.dot(np.linalg.inv(np.dot(PHI.T, PHI)), np.dot(PHI.T, t))
#Np pour trouver la solution d'équations simultanées.linalg.Vous pouvez également utiliser la fonction de résolution. C'est plus rapide. np.linalg.solve(A, b): A^{-1}renvoie b
#w = np.linalg.solve(np.dot(PHI.T, PHI), np.dot(PHI.T, t))
xlist = np.arange(0, 1, 0.01) #Le point x de l'équation de régression linéaire. 0.Tracer finement en 01 unités et sortie sous forme de ligne
ylist = [np.dot(w, phi(x)) for x in xlist] #Équation de régression linéaire y
plt.plot(xlist, ylist) #Diagramme d'équation de régression linéaire
plt.plot(X, t, 'o')
plt.show()
#Sortie w obtenue par le calcul ci-dessus
w
array([ -0.14051447, 11.51076413, -33.6161329 , 22.33919877])
En d'autres termes, à la suite de la régression linéaire, l'équation de régression $ f (x) = -0,14 + 11,5x-33,6x ^ 2 + 22,3x ^ 3 $ a été obtenue.
Trouver une régression linéaire en utilisant une base gaussienne
Base gaussienne
La base gaussienne est une fonction en forme de cloche (pas une distribution) définie par l'équation suivante
\phi_i(x)=\exp\left\{-\frac{(x-c_i)^2}{2s^2}\right\}\hspace{1.0em}(i=0,\cdots,M-1)\hspace{1.0em}(Équation 6)
- La base gaussienne est un modèle qui utilise fortement les informations près du point de données et affaiblit l'influence à mesure qu'il s'éloigne.
TIl est basé sur l'idée qu '"un certain bruit aléatoire est ajouté aux données observées".
―― L'explication est basée sur l'hypothèse que l'écart des valeurs observées (bruit aléatoire) suit une distribution normale.
Variable de base gaussienne s
- $ s $ est un paramètre qui contrôle la distance que les données affectent (la base gaussienne n'est pas une distribution, mais $ s $ est une image comme une dispersion dans une distribution normale (probablement))
―― Plus la taille est grande, plus l'effet sera éloigné. Par conséquent, une petite valeur est souhaitable
―― Cependant, si vous le rendez trop petit, vous ne pourrez peut-être pas utiliser de points de données et faire des inférences correctes là où la densité de données est faible.
- Cette fois, essayez de l'exécuter avec $ s $ = 0,1
Variable de base gaussienne c_i
- $ c_i $ représente le centre de la base gaussienne
- Puisque cette somme linéaire de base gaussienne représente la fonction que vous voulez trouver, vous devez la prendre pour qu'elle couvre l'intervalle que vous souhaitez effectuer la régression
- Fondamentalement, si vous le prenez à l'intervalle de la valeur définie dans $ s $ plus tôt, c'est ok
- Cette fois, utilisons 11 fonctions de base gaussiennes tirées de l'intervalle 0 à 1 à $ s $ = 0,1 intervalles.
Trouver une régression linéaire sur une base gaussienne (implémentation de ce qui précède)
Tout d'abord, sortons simplement un diagramme dans lequel la fonction caractéristique φ utilisée dans la régression linéaire ci-dessus est réécrite de "base polypoly" à "base de Gauss".
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
X = np.array([0.02, 0.12, 0.19, 0.27, 0.42, 0.51, 0.64, 0.84, 0.88, 0.99])
t = np.array([0.05, 0.87, 0.94, 0.92, 0.54, -0.11, -0.78, -0.79, -0.89, -0.04])
#Lorsqu'une base gaussienne est utilisée pour la fonction caractéristique φ
#phi renvoie un vecteur à 12 dimensions en ajoutant 1 pour représenter le terme constant en plus des 11 fonctions de base gaussiennes.
#Base gaussienne (0 à 1).0 à 0.11 points par incréments de 1)+Renvoie un total de 12 points (dimensions), un point du terme constant
def phi(x):
s = 0.1 #Base gaussienne "largeur"
#Écrire l'équation 6
return np.append(1, np.exp(-(x - np.arange(0, 1 + s, s)) ** 2 / (2 * s * s)))
PHI = np.array([phi(x) for x in X])
w = np.linalg.solve(np.dot(PHI.T, PHI), np.dot(PHI.T, t))
xlist = np.arange(0, 1, 0.01)
ylist = [np.dot(w, phi(x)) for x in xlist]
plt.plot(xlist, ylist)
plt.plot(X, t, 'o')
plt.show()
La base gaussienne à 12 dimensions est complètement surapprise car elle a plus de liberté et d'expressivité que la base polymorphe à 4 dimensions.
Régression linéaire bayésienne qui probabilise la régression linéaire
- Différence de signification de la valeur estimée $ w $
- Régression linéaire ⇒ Trouver le coefficient w qui minimise l'erreur quadratique dans la plage de la somme linéaire des fonctions de base.
--Régression linéaire de Bayes ⇒ ** La valeur qui maximise la probabilité postérieure ** est la valeur estimée de $ w $
――La régression linéaire stochastique est basée sur l'idée que "du bruit aléatoire est ajouté aux données observées".
- «Bruit aléatoire», c'est-à-dire «écart» est formulé par $ N (t | \ mu, \ beta ^ {-1}) $ supposé par la distribution normale dans la formule suivante.
p(t|w,x) = N(t|\mu,\beta^{-1})=\frac{1}{Z}\exp\left\{-\frac{1}{2}\beta(t-\mu)^2\right\} \hspace{1.0em}(Équation 7)\\
cependant,\mu=f(x)=\sum^M_{i=1}w_i\phi_i(x), Z=\sqrt{2\pi\beta^{-1}}
- $ N (\ mu, \ beta ^ -1) $ est une distribution centrée sur la valeur prédite $ \ mu = f (x) $, et la probabilité diminue à mesure que la distance augmente.
――Le degré d'abaissement est contrôlé par $ \ beta $, et lorsque $ \ beta $ est grand, il se rassemble fortement au centre, et lorsqu'il est petit, l'écart devient large.
--Cette $ \ beta $, qui est l'inverse de la distribution, est aussi appelée "précision".
- Il est préférable que $ \ Beta $ soit aussi grand que 1 ou plus
--Lorsque le point $ (x_1, t_1) $ est affecté à l'équation 7 ci-dessus, la fonction $ p (t_1 | w, x_1) $ de $ w $ obtenue par celle-ci est appelée "fonction de probabilité".
- Dans la régression linéaire bayésienne, qui est une version stochastique de la régression linéaire, $ w $, qui maximise la fonction de vraisemblance, est sélectionné comme paramètre optimal.
――La probabilité peut être obtenue en multipliant la vraisemblance à chaque point, et $ w $ qui la maximise peut être obtenue.
- Puisque la multiplication est gênante, prenez le logarithme de la vraisemblance (fonction de logarithme). Le maximum $ w $ avant de prendre le journal et le maximum $ w $ après avoir pris la correspondance du journal.
- En d'autres termes, vous pouvez trouver $ w $ pour obtenir la valeur maximale de l'équation 8 ci-dessous, qui est la logarithmique de l'équation 7.
\ln{p(T|w,X)}=-\frac{1}{2}\beta\sum^N_{n=1}\left(t_n-\sum^{M}_{i=1}w_{i}\phi_i(x_n)\right)^2+C \hspace{1.0em}(Équation 8)
- En regardant la structure de l'équation, l'équation 8 est sensiblement la même que l'équation 2 pour laquelle l'erreur quadratique a été obtenue.
- Le signe est inversé car l'erreur carrée correspond à "minimiser" et la fonction de vraisemblance logarithmique correspond à "maximiser".
--β (> 0) et C sont des termes constants qui n'incluent pas w, il n'y a donc aucun effet sur la maximisation.
- En d'autres termes, ** $ w $ qui maximise l'équation 8 peut être résolu par l'équation 4 **
Trouver la distribution a posteriori p (t | w, x) à partir de la distribution a priori p (w)
-Distribution ex postp(t|w,x)Surtout que x est une valeur d'entrée, traitez-la comme une constantep(t|w,x)Aussip(t|w)Noté comme
--Mettre à jour la distribution de $ w $ vers la distribution postérieure $ p (w | t) $ en utilisant $ p (w) $ et les points de données (x, t). Cette distribution a posteriori est la «confiance de la réponse» que vous voulez trouver.
--La formule de mise à jour de la distribution postérieure peut être obtenue à partir de la formule bayésienne et du théorème de multiplication / addition.
p(w|t)=p(t|w)p(w)/p(t) \\
p(t)=\int p(t,w)dw=\int p(t|w)p(w)dw
- En supposant une distribution normale $ p (w) = N (w | 0, \ alpha ^ -1I) , où la moyenne est 0 et la matrice de covariance est un multiple constant de la matrice unitaire en tant que distribution antérieure,
-Formule de renouvellementp(w|t)=p(t|w)p(w)/p(t)À ce p(w)En substituant et en réorganisant la formule, on obtient ce qui suit (le terme constant est\frac{1}{Z'}(Omis) (\alpha$Sera décrit plus tard)
p(w|t)=\frac{1}{Z'}\exp\left\{-\frac{1}{2}(w-m)^T\sum^{-1}(w-m)\right\} \hspace{1.0em}(Équation 9)\\
pourtant\\
m=\beta t\sum\phi(x)\\
\sum^{-1}=\alpha I+\beta\phi(x)\phi(x)^T
- En regardant à l'intérieur de {} de $ \ exp $ dans l'équation 9, $ N (w | \ mu, \ sum) = \ frac {1} {Z} \ exp {(- (w- \ mu) ^ {T} \ sum ^ {-1} (w- \ mu)} Correspond à la partie exp de $
-En d'autres termesp(w|t)DeN(w|\mu,\sum)C'estZ'Comprendre sans demander
N(w|\mu,\sum)=\frac{1}{Z}\exp\left\{(-(w-\mu)^T\sum^{-1}(w-\mu)\right\}
p(w|t)=N(w|m,\sum)
- Puisque la distribution a priori est une distribution normale et que la distribution postérieure obtenue ici est également une distribution normale, celles-ci peuvent être utilisées comme une distribution a priori conjuguée.
--Pour N points de données $ x = (x_1, \ cdots, x_N) ^ T, t = (t_1, \ cdots, t_N) ^ T $, la distribution postérieure $ p (w | t, x) $ Peut être calculé de la même manière
- En d'autres termes, la distribution normale est la suivante.
p(w|t,x)=N(w|m_N,\sum_N) \hspace{1.0em}(Équation 10)\\
pourtant\\
m_N=\beta \sum_N\phi^{T}t\\
\sum^{-1}_N=\alpha I+\beta\phi^T\phi
- $ \ Phi $ est une matrice définie de la même manière que l'équation 5.
-En conséquence, d'abord les points de données(x_1,t_1)Pour sa distribution postérieurep(w|t_1,x_1)Et considérez-le à nouveau comme une distribution antérieure, un autre point de données(x_2,t_2)La distribution postérieure suivante utilisantp(w|t_1,t_2,x_1,x_2)Peut être obtenu en répétant l'opération de recherche ...p(w|t_1,…,t_N,x_1,…,x_N)Aura la même distribution que
- En trouvant la distribution postérieure, vous avez "résolu la régression linéaire bayésienne".
- wDistribution postérieure dep(w|t)=N(w|\mu_N,\sum_N)Est une distribution normale, donc la moyenne\mu_NIl devient une distribution en forme de cloche avec
――Par conséquent, la réponse la plus "sûre", c'est-à-dire la plus probable est $ w = \ mu_N $.
- La méthode de considérer le point maximum de la distribution postérieure comme la valeur estimée de $ w $ est appelée estimation de maximisation de la distribution postérieure (Maximum a Posterior, MAP).
――Le degré de "confiance" peut être connu à partir de la dispersion de l'ourlet (covariance $ \ sum_N $) (décrite plus loin).
Régularisation de la régression linéaire bayésienne
- Aussi, il y a une idée de régularisation dans la régression linéaire bayésienne,
--Substituer $ \ sum_N $ dans l'équation 10 ci-dessus en $ m_N $ donne une équation similaire à l'obtention du coefficient $ w $ pour la régression linéaire avec régularisation.
--Il est connu que l'aboiement et la régularisation de la régression linéaire conduisent à la même solution optimale (voir ici pour plus de détails. ) page de)
Implémentation de la régression linéaire bayésienne
Comparons la régression linéaire bayésienne (ligne bleue) et la régression linéaire normale (ligne verte) sur le graphique.
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
X = np.array([0.02, 0.12, 0.19, 0.27, 0.42, 0.51, 0.64, 0.84, 0.88, 0.99])
t = np.array([0.05, 0.87, 0.94, 0.92, 0.54, -0.11, -0.78, -0.79, -0.89, -0.04])
#Lorsqu'une base gaussienne est utilisée pour la fonction caractéristique φ
def phi(x):
s = 0.1
return np.append(1, np.exp(-(x - np.arange(0, 1 + s, s)) ** 2 / (2 * s * s)))
PHI = np.array([phi(x) for x in X])
#(Idem que ci-dessus) Résolution d'une régression linéaire en utilisant une base gaussienne → Superapprentissage
w = np.linalg.solve(np.dot(PHI.T, PHI), np.dot(PHI.T, t))
#Résolution de la régression linéaire bayésienne en utilisant une base gaussienne → Éviter le surapprentissage
#Une transcription de l'équation 10 ci-dessus
alpha = 0.1 #Stockage temporaire
beta = 9.0 #Stockage temporaire
Sigma_N = np.linalg.inv(alpha * np.identity(PHI.shape[1]) + beta * np.dot(PHI.T, PHI)) #np.identity(PHI.shape[1])Est une matrice unitaire à 12 dimensions spécifiée dans la base gaussienne
mu_N = beta * np.dot(Sigma_N, np.dot(PHI.T, t))
xlist = np.arange(0, 1, 0.01)
plt.plot(xlist, [np.dot(w, phi(x)) for x in xlist], 'g') #Tracez la solution de la régression linéaire ordinaire
plt.plot(xlist, [np.dot(mu_N, phi(x)) for x in xlist], 'b') #Tracer la solution de la régression linéaire bayésienne
plt.plot(X, t, 'o') #Tracer des points d'échantillonnage
plt.show()
- La régression linéaire de Bayes (bleu) est meilleure que la régression linéaire normale (vert) et peut être tracée en évitant le surentraînement
- Dans la régression linéaire bayésienne, la valeur qui maximise la probabilité postérieure est la valeur estimée de w. Ceci est cohérent avec le résultat d'une régression linéaire avec régularisation, comme indiqué à la fin de ce qui précède.
Quelle était la covariance Σ_N?
--Covariance $ \ sum_N $ représentait la "confiance de probabilité" du point de données
--La "dispersion" d'une distribution unidimensionnelle représente la "dispersion" des données
- D'un autre côté, la "co-dispersion" multidimensionnelle n'est pas aussi facile que la dispersion car il s'agit d'une matrice.
--Le $ \ sum_N $ cette fois est également une matrice 12x12.
#Matrice de covariance Sigma_Affichage de N facile à lire
print "\n".join(' '.join("% .2f" % x for x in y) for y in Sigma_N)
2.94 -2.03 -0.92 -1.13 -1.28 -1.10 -1.21 -1.14 -1.23 -1.06 -0.96 -2.08
-2.03 2.33 -0.70 1.95 0.13 1.02 0.85 0.65 0.98 0.70 0.65 1.44
-0.92 -0.70 2.52 -1.86 1.97 -0.29 0.42 0.59 0.13 0.40 0.32 0.63
-1.13 1.95 -1.86 3.02 -1.66 1.50 0.17 0.29 0.73 0.33 0.36 0.82
-1.28 0.13 1.97 -1.66 2.82 -1.11 1.39 0.22 0.55 0.49 0.40 0.92
-1.10 1.02 -0.29 1.50 -1.11 2.39 -1.35 1.72 -0.29 0.53 0.46 0.69
-1.21 0.85 0.42 0.17 1.39 -1.35 2.94 -2.06 2.39 -0.02 0.25 1.01
-1.14 0.65 0.59 0.29 0.22 1.72 -2.06 4.05 -2.72 1.43 0.37 0.67
-1.23 0.98 0.13 0.73 0.55 -0.29 2.39 -2.72 3.96 -1.41 1.23 0.59
-1.06 0.70 0.40 0.33 0.49 0.53 -0.02 1.43 -1.41 3.30 -2.27 2.05
-0.96 0.65 0.32 0.36 0.40 0.46 0.25 0.37 1.23 -2.27 3.14 -0.86
-2.08 1.44 0.63 0.82 0.92 0.69 1.01 0.67 0.59 2.05 -0.86 2.45
--Il s'avère que la matrice de covariance est une matrice diagonale
- Composante diagonale
- Représente la distribution lorsque les paramètres correspondants sont affichés seuls
- En d'autres termes, la composante diagonale est la même que la dispersion de la distribution normale unidimensionnelle.
――Dans ces données, même la plus petite est 2,33, et aucune des composantes diagonales n'est très petite.
- La précision de l'estimation des paramètres peut ne pas être très élevée en raison de la faible quantité de données.
--Points où chaque élément se croise
--Représente la corrélation entre les paramètres correspondants
--0 signifie pas de corrélation (indépendamment les uns des autres)
- S'il s'agit d'une valeur positive, lorsque l'une est supérieure à la moyenne, l'autre a tendance à être supérieure à la moyenne.
- Au contraire, si la valeur est négative, elle a tendance à être inférieure à la moyenne.
--Dans ces données utilisant une base gaussienne,
--Il existe une corrélation négative entre le coefficient du terme constant (premier paramètre), d'autres paramètres et le coefficient de la base gaussienne les uns à côté des autres.
--Les bases gaussiennes éloignées ont une corrélation généralement positive, mais elles sont toutes faibles (proches de 0).
――Lorsque vous résolvez réellement le problème, vous ne vous souciez pas souvent de regarder la matrice de covariance de cette manière.
Visualisez la distribution prévue
-(Idée) distribution postérieurep(w|X)Est la distribution du paramètre w, doncp(y|w,x)Une "fonction" qui renvoie la distribution de y lorsque x est donné.p(y|X,x)(En fait, il n'est pas possible de substituer la distribution à la distribution, c'est donc juste une image)
--La distribution de la variable cible qui reflète la distribution postérieure est appelée distribution prédite.
- Reportez-vous à ici pour plus de détails sur la façon d'écrire la distribution prédite suivante.
#Fonction de densité de probabilité de distribution normale
def normal_dist_pdf(x, mean, var):
return np.exp(-(x-mean) ** 2 / (2 * var)) / np.sqrt(2 * np.pi * var)
#Format secondaire( x^Calculer T A x)
def quad_form(A, x):
return np.dot(x, np.dot(A, x))
xlist = np.arange(0, 1, 0.01)
tlist = np.arange(-1.5, 1.5, 0.01)
z = np.array([normal_dist_pdf(tlist, np.dot(mu_N, phi(x)),1 / beta + quad_form(Sigma_N, phi(x))) for x in xlist]).T
plt.contourf(xlist, tlist, z, 5, cmap=plt.cm.binary)
plt.plot(xlist, [np.dot(mu_N, phi(x)) for x in xlist], 'r')
plt.plot(X, t, 'go')
plt.show()
--La partie sombre a une valeur élevée de la fonction de densité de probabilité, c'est-à-dire la partie où la fonction estimée est susceptible d'y passer.
- Je suis confiant dans l'estimation où la densité de données est élevée, et je ne suis pas confiant dans l'estimation parce que l'espacement des points de données est large là où la densité de données est faible.
À propos de l'hyper paramètre α de la distribution antérieure
--Les paramètres contenus dans la distribution a priori basilienne $ p (w) = N (w | 0, \ alpha ^ -1I) $ sont également appelés hyperparamètres.
―― Plus α est grand, plus la dispersion est petite, c'est-à-dire plus la connaissance préalable que w est une valeur proche de 0 est forte.
--Si vous résolvez la régression linéaire bayésienne dans cet état, la force d'estimer w à une valeur proche de 0 est forte, il est donc facile de supprimer le résultat du soi-disant surapprentissage, mais vous arrivez à la vraie solution. Peut nécessiter beaucoup de données
――Au contraire, si α est petit, la force pour maintenir w devient faible.
- En particulier lorsque α vaut 0, il correspond à la régression linéaire normale. Par conséquent, il est courant de définir une petite valeur proche de 0, par exemple autour de 0,1 ou 0,01, et de la résoudre en premier.
Ancienne histoire
--Plusieurs pages de "Commençons avec l'apprentissage automatique" http://gihyo.jp/dev/serial/01/machine-learning
- En particulier,
--11e Implémentons la régression linéaire http://gihyo.jp/dev/serial/01/machine-learning/0011
--14e Implémentons la régression linéaire bayésienne http://gihyo.jp/dev/serial/01/machine-learning/0014