J'étudie la théorie bayésienne. Cette fois, je résumerai la régression linéaire basée sur la théorie bayésienne. Les livres et articles auxquels j'ai fait référence sont les suivants.
[Reconnaissance de formes et apprentissage automatique](https://www.amazon.co.jp/%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E8%AA % 8D% E8% AD% 98% E3% 81% A8% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92-% E4% B8% 8A-CM-% E3 % 83% 93% E3% 82% B7% E3% 83% A7% E3% 83% 83% E3% 83% 97 / dp / 4612061224)
[Bayes Deep Learning](https://www.amazon.co.jp/%E3%83%99%E3%82%A4%E3%82%BA%E6%B7%B1%E5%B1%A4% E5% AD% A6% E7% BF% 92-% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92% E3% 83% 97% E3% 83% AD% E3 % 83% 95% E3% 82% A7% E3% 83% 83% E3% 82% B7% E3% 83% A7% E3% 83% 8A% E3% 83% AB% E3% 82% B7% E3% 83 % AA% E3% 83% BC% E3% 82% BA-% E9% A0% 88% E5% B1% B1% E6% 95% A6% E5% BF% 97-ebook / dp / B07YSHL8MS / ref = reads_cwrtbar_2 / 356-7679536-6826133? _encoding = UTF8 & pd_rd_i = B07YSHL8MS & pd_rd_r = 36fddf3f-0e8b-4921-8e3c-13dd6fe2007f & pd_rd_w = nZY1w & pd_rd_wg = h8TZc & pf_rd_p = 64c49d12-7012-452e-9a49-e43c9513f9fc & pf_rd_r = 7CCX4HQPWKQC8344612V & psc = 1 & refRID = 7CCX4HQPWKQC8344612V)
Régression linéaire bayésienne https://openbook4.me/sections/1563
PRML Question 3.7, 3.8 Réponses https://qiita.com/halhorn/items/037db507e9884265d757
L'idée de régression linéaire que vous rencontrez lors de l'apprentissage de l'apprentissage automatique est différente de celle de la régression linéaire bayésienne à laquelle nous avons affaire cette fois. Le contour est présenté ci-dessous.
Une régression linéaire basée sur la méthode des moindres carrés est appelée régression linéaire théorique de la fréquence pour la distinguer de la régression linéaire bayésienne. * Si le nom n'est pas strictement basé sur la fréquence, nous vous serions reconnaissants de bien vouloir commenter.
Cette méthode peut être obtenue très facilement même avec Excel. Je l'utilise aussi souvent lors de la compilation de données dans mon travail. Eh bien, cette méthode est très simple à penser.
E(w) = \frac {1}{2}\sum_{n=1}^{N}(y(x_n,w)-t_n)^2
cependant,
Tout ce que vous avez à faire est de trouver le coefficient polynomial $ w $ qui minimise $ E (w) $, qui s'appelle cette fonction d'erreur.
En revanche, considérons la régression linéaire bayésienne. Considérons les probabilités suivantes pour les données observées $ X, Y $.
p(w|X,Y) = \frac {p(w)p(Y|X,w)}{p(X,Y)}
ici,
Ce sera.
L'intérêt de la pensée bayésienne est que tous sont organisés par probabilité (= distribution). ** Je comprends que j'essaie de le capturer comme une distribution incluant la solution optimale **.
Un autre point est l'idée appelée estimation bayésienne. Il se réfère à l'acte d'essayer de trouver la probabilité (= post-probabilité) avec une valeur (= pré-probabilité) supposée à l'avance. Quand je l'ai entendu pour la première fois, c'était rafraîchissant.
Dans ce cas,
Dans cette façon de penser bayésienne, il est nécessaire de considérer l'axe du temps. En d'autres termes, il est nécessaire de considérer l'écoulement du temps pour déterminer temporairement le paramètre de poids à partir d'une certaine donnée et le mettre à jour à une bonne valeur à tout moment. C'est une idée très pratique utilisée dans le processus d'augmentation des données à partir d'un petit nombre de données.
Maintenant, je voudrais résoudre le problème de la régression par régression linéaire bayésienne. Considérez ce qui suit pour $ p (w | X, Y) $, avec le paramètre $ t $.
p(w|t) \propto p(t|w)p(w)
À l'origine, $ p (t) $ devrait arriver au dénominateur lors du calcul, mais comme le calcul est compliqué, nous le considérerons avec la formule proportionnelle $ \ propto $. Ici, $ p (t | w) $ et $ p (w) $ sont montrés ci-dessous, respectivement.
\begin{align}
p(t|w)&=\prod_{n=1}^N \left\{ \mathcal{N} (t_n|w^T\phi(x_n), \beta^{-1}) \right\}\\
\end{align}\\
p(w)=\mathcal{N}(w|m_0, S_0)
Il est formulé comme suit la distribution gaussienne.
De plus, les constantes et les fonctions sont affichées ci-dessous.
=\prod_{n=1}^N \left\{ \mathcal{N} (t_n|w^T\phi(x_n), \beta^{-1}) \right\} \mathcal{N}(w|m_0, S_0)\\
\propto \left( \prod_{n=1}^N exp\left[ -\frac{1}{2} \left\{ t_n - w^T \phi(x_n) \right\}^2 \beta \right] \right) exp\left[ -\frac{1}{2} (w - m_0)^TS_0^{-1}(w - m_0) \right]\\
= exp\left[ -\frac{1}{2} \left\{ \beta \sum_{n=1}^N \left( t_n - w^T\phi(x_n) \right)^2 + (w - m_0)^TS_0^{-1}(w - m_0) \right\} \right]
Peut être transformé avec. Après cela, nous développerons soigneusement cette formule.
\beta \sum_{n=1}^N \left( t_n - w^T\phi(x_n) \right)^2 + (w - m_0)^TS_0^{-1}(w - m_0)\\
= \beta \left( \begin{array}{c}
t_1 - w^T\phi(x_1) \\
\vdots\\
t_N - w^T\phi(x_N)
\end{array} \right)^T
\left( \begin{array}{c}
t_1 - w^T\phi(x_1) \\
\vdots\\
t_N - w^T\phi(x_N)
\end{array} \right)
+ (w - m_0)^TS_0^{-1}(w - m_0)
Il peut être exprimé par $ w ^ T \ phi (x_1) = \ phi ^ T (x_1) w $. Donc,
= \beta \left( \begin{array}{c}
t_1 - \phi^T(x_1)w \\
\vdots\\
t_N - \phi^T(x_N)w
\end{array} \right)^T
\left( \begin{array}{c}
t_1 - \phi^T(x_1)w \\
\vdots\\
t_N - \phi^T(x_N)w
\end{array} \right)
+ (w - m_0)^TS_0^{-1}(w - m_0)\\
Ce sera. Maintenant, ici, la fonction de base est exprimée sous une forme appelée matrice de conception comme indiqué ci-dessous.
\Phi = \left( \begin{array}{c}
\phi^T(x_1) \\
\vdots\\
\phi^T(x_N)
\end{array} \right)
Nous l'utiliserons pour résumer davantage. Les termes de seulement $ \ beta $ et $ m $ sont des termes constants, mais ils sont regroupés sous la forme $ C $.
= \beta (t - \Phi w)^T(t - \Phi w) + (w - m_0)^TS_0^{-1}(w - m_0)\\
= \beta ( w^T\Phi^T\Phi w - w^T\Phi^Tt - t^T\Phi w ) + w^TS_0^{-1}w - w^TS_0^{-1}m_0 - m_0^TS_0^{-1}w + C\\
Puisque $ S_0 $ est covariant, il s'agit d'une matrice symétrique. Par conséquent, puisque sa matrice inverse est également une matrice symétrique, elle peut être exprimée comme $ (S_0 ^ {-1}) ^ T = S_0 ^ {-1} $. Appliquer ceci au coefficient $ w $
= w^T(S_0^{-1} + \beta \Phi^T\Phi)w - w^T(S_0^{-1}m_0 + \beta \Phi^T t) - (S_0^{-1}m_0 + \beta \Phi^T t)^Tw + C
Ici, si $ R = S_0 ^ {-1} m_0 + \ beta \ Phi ^ Tt $
= w^TS_N^{-1}w - w^TR - R^Tw + C
J'ai pu résumer. De plus, il peut être résumé par complétion de carré et factorisation à partir d'ici, mais c'est un calcul assez difficile. Confirmez la correspondance en développant la formule qui est complétée dans Amanojaku.
\mathcal{N}(w|m_N, S_N)\\
\propto exp\left\{ -\frac{1}{2} (w - m_N)^T S_N^{-1} (w - m_N) \right\}
Encore une fois, nous ne discuterons que du contenu de $ - \ frac {1} {2} $ dans $ exp $ dans l'équation de distribution gaussienne.
(w - m_N)^T S_N^{-1} (w - m_N)\\
Ici, $ m_N et S_N $ sont donnés comme suit.
m_N = S_N(S_0^{-1} m_0 + \beta \Phi^Tt) = S_NR\\
S_N^{-1} = S_0^{-1} + \beta \Phi^T \Phi
Ici, $ S_N $ apparaît également dans la formule cible dérivée de la distribution postérieure, alors ne le développez pas, mais développez $ m_N $.
(w - m_N)^T S_N^{-1} (w - m_N)\\
= (w - S_NR)^T S_N^{-1} (w - S_NR)\\
= w^T S_N^{-1} w - w^T R - R^Tw + C
Par conséquent, la distribution postérieure
Cette fois, retraçons les points de données générés aléatoirement en fonction de la fonction $ sin $.
beyes.ipynb
#Faire une procession de planification
Phi = np.array([phi(x) for x in X])
#Hyper paramètres
alpha = 0.1
beta = 9.0
M = 12
beyes.ipynb
n = 10
X = np.random.uniform(0, 1, n)
T = np.sin(2 * np.pi * X) + np.random.normal(0, 0.1, n)
plt.scatter(X, T)
plt.plot(np.linspace(0,1), np.sin(2 * np.pi * np.linspace(0,1)), c ="g")
plt.show()
Pour un calcul facile cette fois, définissez $ m_0 = 0 $, $ S_0 = α ^ {-1} I $ $ S_N ^ {-1} = αI + \ beta \ Phi ^ T \ Phi $, $ m_N = βS_N \ Phi ^ Tt $.
beyes.ipynb
#Dispersion des probabilités postérieures
S = np.linalg.inv(alpha * np.eye(M) + beta * Phi.T.dot(Phi))
#Probabilité moyenne ex post facto
m = beta * S.dot(Phi.T).dot(T)
beyes.ipynb
x_, y_ = np.meshgrid(np.linspace(0,1), np.linspace(-1.5, 1.5))
Z = np.vectorize(norm)(x_,y_)
x = np.linspace(0,1)
y = [m.dot(phi(x__)) for x__ in x]
plt.figure(figsize=(10,6))
plt.pcolor(x_, y_, Z, alpha = 0.2)
plt.colorbar()
plt.scatter(X, T)
#Moyenne de la distribution prévue
plt.plot(x, y)
#Distribution authentique
plt.plot(np.linspace(0,1), np.sin(2 * np.pi * np.linspace(0,1)), c ="g")
plt.show()
#Exemple de paramètres obtenus à partir de la distribution postérieure
m_list = [np.random.multivariate_normal(m, S) for i in range(5)]
for m_ in m_list:
x = np.linspace(0,1)
y = [m_.dot(phi(x__)) for x__ in x]
plt.plot(x, y, c = "r")
plt.plot(np.linspace(0,1), np.sin(2 * np.pi * np.linspace(0,1)), c ="g")
L'ombre montre où la densité de probabilité est élevée.
Cette fois, nous avons résumé la régression linéaire bayésienne du concept à la mise en œuvre. J'étais presque perdu car le développement de l'expression était très compliqué. Cependant, l'idée est très simple et importante dans l'apprentissage automatique de savoir comment obtenir une probabilité plausible à partir d'une petite quantité de données.
Je continuerai d'apprendre à comprendre profondément les sentiments du bayésien.
Le programme complet est ici. https://github.com/Fumio-eisan/Beyes_20200512