J'étudie l'apprentissage automatique. Je vais le préparer moi-même. Je ne pense pas que ce soit mathématiquement rigoureux. C'est centré sur la théorie. Dans cet article, nous allons faire des "ajustements droits" et des "ajustements courbes".
Je veux trouver une ligne droite qui s'applique aux données $ N $ $ \ {(x_1, t_1), \ cdots, (x_N, t_N) \} $.
Soit la ligne droite de prédiction (modèle) $ y = w_0 + w_1x $.
Focus sur certaines données $ (x_i, t_i) $.
La valeur prédite de $ x_n $ est $ w_0 + w_1x_n $.
Le carré de la différence avec $ t_n $ est $ (w_0 + w_1x_n-t_n) ^ 2 $.
La somme de ces éléments pour toutes les données est utilisée comme fonction objectif.
Différencier partiellement par $ w_0, w_1 $ pour minimiser la fonction objectif, et définir $ = 0 $
Une équation simultanée composée des deux équations suivantes peut être créée.
Les exigences sont presque les mêmes que pour le "montage droit".
Je veux trouver une courbe qui s'applique aux données $ N $ $ \ {(x_1, t_1), \ cdots, (x_N, t_N) \} $.
Soit la courbe de prédiction (modèle) $ y = w_0 + w_1x + w_2x ^ 2 + \ cdots + w_ {D-1} x ^ {D-1} $.
Focus sur certaines données $ (x_i, t_i) $.
La valeur prédite de $ x_n $ est $ w_0 + w_1x_n + w_2x_n ^ 2 + \ cdots + w_ {D-1} x_n ^ {D-1} $.
Le carré de la différence de $ t_n $ est $ (w_0 + w_1x_n + w_2x_n ^ 2 + \ cdots + w_ {D-1} x_n ^ {D-1} -t_n) ^ 2 $.
La somme de ces éléments pour toutes les données est utilisée comme fonction objectif.
Ensuite, le modèle peut être exprimé comme $ y = {\ bf w} ^ T \ boldsymbol \ phi (x) $.
De plus, la fonction objectif est $ E ({\ bf w}) = \ frac {1} {2} \ sum_ {n = 1} ^ N ({\ bf w} ^ T \ boldsymbol \ phi (x_n) -t_n) Peut s'écrire ^ 2 $.
De plus, $ \ Phi = \ begin {pmatrix}
\boldsymbol\phi(x_1)^T \
\vdots \
\boldsymbol\phi(x_D)^T\
\end{pmatrix},{\bf t}=(t_1,\cdots,t_N)^T$
Si tu pars
La fonction objective est
Différenciez partiellement par $ {\ bf w} $ pour minimiser la fonction objectif et définissez $ = {\ bf 0} $ Résoudre cela déterminera $ {\ bf w} $ et la courbe de prédiction. Dérivé ci-dessous
\begin{eqnarray}
\frac{\partial}{\partial {\bf w}}E&=&\frac{\partial}{\partial {\bf w}}\frac{1}{2}||\boldsymbol\Phi{\bf w}-{\bf t}||^2\\
&=&\frac{1}{2}\frac{\partial}{\partial {\bf w}}(\boldsymbol\Phi{\bf w}-{\bf t})^T(\boldsymbol\Phi{\bf w}-{\bf t})\\
&=&\frac{1}{2}\frac{\partial}{\partial {\bf w}}({\bf w}^T\boldsymbol\Phi^T-{\bf t}^T)(\boldsymbol\Phi{\bf w}-{\bf t})\\
&=&\frac{1}{2}\frac{\partial}{\partial {\bf w}}({\bf w}^T\boldsymbol\Phi^T\boldsymbol\Phi{\bf w}-{\bf w}^T\boldsymbol\Phi^T{\bf t}-{\bf t}^T\boldsymbol\Phi{\bf w}+{\bf t}^T{\bf t})\\
&=&\frac{1}{2}\frac{\partial}{\partial {\bf w}}({\bf w}^T\boldsymbol\Phi^T\boldsymbol\Phi{\bf w}-2{\bf w}^T\boldsymbol\Phi^T{\bf t}+||{\bf t}||^2)\\
&=&\frac{1}{2}(2\boldsymbol\Phi^T\boldsymbol\Phi{\bf w}-2\boldsymbol\Phi^T{\bf t})\\
&=&\boldsymbol\Phi^T\boldsymbol\Phi{\bf w}-\boldsymbol\Phi^T{\bf t}\\
&&={\bf 0}Puis\\
&&\boldsymbol\Phi^T\boldsymbol\Phi{\bf w}-\boldsymbol\Phi^T{\bf t}={\bf 0}\\
&&\Leftrightarrow \boldsymbol\Phi^T\boldsymbol\Phi{\bf w}=\boldsymbol\Phi^T{\bf t}\\
&&\Leftrightarrow {\bf w}=(\boldsymbol\Phi^T\boldsymbol\Phi)^{-1}\boldsymbol\Phi^T{\bf t}\\
&&\boldsymbol\Phi^T\boldsymbol\Phi est régulier.
\end{eqnarray}
Vous pouvez l'exécuter sur Google Colab à partir de ici .
###################################
#Régression linéaire-Courbe d'ajustement
###################################
import numpy as np
import matplotlib.pyplot as plt
#Trouvez la matrice φ
def get_phi_matrix(N, M, x):
Phi = np.zeros((N, M)) #N lignes et M colonnes(Non initialisé)
for i in range(M):
Phi[:, i] = x.T ** i #Phi pour stocker une colonne à la fois[:, i].la forme est(N,)Il faut donc transposer x
return Phi;
#Nombre aléatoire fixe
np.random.seed(1)
#Multiplicateur de puissance maximale du polypoly(w0 * x^0+...+wM-1*x^M-1)
M = 4
#Nombre de données d'entraînement
N = 10
#Vecteur de colonne de données de formation(Représenter un vecteur colonne sous forme de matrice N-par-1)
x = np.linspace(0, 1, N).reshape(N, 1)
#Vecteur de colonne des données d'entraînement t
t = np.sin(2 * np.pi * x.T) + np.random.normal(0, 0.2, N) #Donner au péché une erreur qui suit une distribution normale
t = t.T #Faites-en un vecteur de colonne(En fait, une matrice N-par-1) t = t.reshape(N, 1)Mais d'accord
#Trouvez la matrice φ
Phi = get_phi_matrix(N, M, x);
#Trouvez w analytiquement
w = np.linalg.inv(Phi.T @ Phi) @ Phi.T @ t
#Sur la base du coefficient w obtenu, trouvez la valeur prédite y pour la nouvelle entrée x2.
x2 = np.linspace(0, 1, 100).reshape(100, 1) #100 points de 0 à 1, régulièrement espacés(1/99)Générer dans
#Créer la matrice Phi2
Phi2 = get_phi_matrix(100, M, x2)
#Prédire y= w0*x^0 + ... + wM-1*x^M-1
y = Phi2 @ w #Pas de régularisation
#Voir les résultats
plt.ylim(-0.1, 1.1) #Limiter la plage d'affichage de x
plt.ylim(-1.1, 1.1) #Limiter la plage d'affichage de y
plt.scatter(x, t, color="red") #Affichage des données d'entraînement
plt.plot(x2, y, color="blue") #Dessinez une courbe de prédiction sans régularisation
plt.show() #Dessin graphique
Pour montrer que la fonction objectif est une fonction convexe, il suffit de montrer que la matrice de Hesse de la fonction objectif est une matrice de valeurs semi-régulière. Preuve ci-dessous
Tout d'abord, trouvez la matrice de Hesse de la fonction objectif.
\begin{eqnarray}
\frac{\partial}{\partial {\bf w}}\left(\frac{\partial}{\partial {\bf w}}E\right)&=&\frac{\partial}{\partial {\bf w}}(\boldsymbol\Phi^T\boldsymbol\Phi{\bf w}-\boldsymbol\Phi^T{\bf t})\\
&=&\boldsymbol\Phi^T\boldsymbol\Phi \\
\end{eqnarray}\\
Ensuite, on montre que la matrice de Hesse est une matrice de valeurs semi-régulière.
{\bf x}\in\mathbb{R}^Soit D\\
\begin{eqnarray}
{\bf x}^T\boldsymbol\Phi^T\boldsymbol\Phi{\bf x}&=&(\boldsymbol\Phi{\bf x})^T(\boldsymbol\Phi{\bf x})\\
&=&||\boldsymbol\Phi{\bf x}||^2\geq0\\
\end{eqnarray}\\
Il a été montré que la matrice de Hesse de la fonction objectif est une matrice de valeurs semi-régulière. Par conséquent, la fonction objectif est une fonction convexe.
Recommended Posts