[PYTHON] [Apprentissage automatique] Régression linéaire - Ajustement linéaire, ajustement courbe

introduction

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".

Raccord droit

Exigences

Je veux trouver une ligne droite qui s'applique aux données $ N $ $ \ {(x_1, t_1), \ cdots, (x_N, t_N) \} $.

image.png

Définition du modèle

Soit la ligne droite de prédiction (modèle) $ y = w_0 + w_1x $.

Définition de la fonction objective

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. E(w_0,w_1)=\frac{1}{2}\sum_{n=1}^N(w_0+w_1x_n-t_n)^2 $ \ Frac {1} {2} $ sert à rendre belle la formule partiellement différenciée par $ w_0, w_1 $.

Minimiser la 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. \frac{\partial}{\partial w_0}E=\sum_{n=1}^N(w_0+w_1x_n-t_n)=0 \frac{\partial}{\partial w_1}E=\sum_{n=1}^Nx_n(w_0+w_1x_n-t_n)=0 Lorsque cela est résolu, $ w_0 et w_1 $ sont obtenus et la ligne droite de prédiction est déterminée. (Non résolu ici, car les raccords droits sont inclus dans les raccords courbes.)

Courbe d'ajustement

Exigences

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) \} $. image.png

Définition du modèle

Soit la courbe de prédiction (modèle) $ y = w_0 + w_1x + w_2x ^ 2 + \ cdots + w_ {D-1} x ^ {D-1} $.

Définition de la fonction objective

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. E(w_0,\cdots,w_{D-1})=\frac{1}{2}\sum_{n=1}^N(w_0+w_1x_n+w_2x_n^2+\cdots+w_{D-1}x_n^{D-1}-t_n)^2 $ \ Frac {1} {2} $ sert à rendre belle l'expression partiellement différenciée par $ w_0, \ cdots, w_ {D-1} $.

Représenter de manière concise le modèle et la fonction objective

{\bf w}=(w_0, w_1, w_2, \cdots, w_{D-1})^T\phi_i(x)=x^i{\boldsymbol\phi}(x)=(\phi_0(x), \phi_1(x), \phi_2(x), \cdots, \phi_D(x))^T

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 estE({\bf w})=\frac{1}{2}||\boldsymbol\Phi{\bf w}-{\bf t}||^2Peut être écrit.

Minimiser la fonction objectif

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}
La source

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
La fonction objectif est une fonction convexe

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

[Apprentissage automatique] Régression linéaire - Ajustement linéaire, ajustement courbe
Régression linéaire d'apprentissage automatique
Machine Learning: Supervision - Régression linéaire
Les débutants en apprentissage automatique essaient la régression linéaire
Apprentissage automatique: analyse discriminante linéaire supervisée
<Cours> Machine learning Chapitre 1: Modèle de régression linéaire
Algorithme d'apprentissage automatique (résumé de régression linéaire et régularisation)
[Memo] Apprentissage automatique
Classification de l'apprentissage automatique
Exemple d'apprentissage automatique
EV3 x Python Machine Learning Partie 2 Régression linéaire
Apprentissage automatique ⑤ Résumé AdaBoost
Apprentissage automatique: supervisé - AdaBoost
Régression logistique d'apprentissage automatique
Machine de vecteur de support d'apprentissage automatique
Python Scikit-learn Analyse de régression linéaire Analyse de régression simple non linéaire Apprentissage automatique
Étudier l'apprentissage automatique ~ matplotlib ~
Mémo du cours d'apprentissage automatique
Bibliothèque d'apprentissage automatique dlib
Apprentissage automatique (TensorFlow) + Lotto 6
Coursera Machine Learning Challenge en Python: ex1 (régression linéaire)
Apprenez en quelque sorte le machine learning
Apprentissage automatique / prétraitement des données
Bibliothèque d'apprentissage automatique Shogun
Défi de lapin d'apprentissage automatique
Introduction à l'apprentissage automatique
Apprentissage automatique: k-voisins les plus proches
Qu'est-ce que l'apprentissage automatique?
Une introduction à l'apprentissage automatique
Techniques liées à l'apprentissage automatique / à la classification
Bases de l'apprentissage automatique (mémoire)
Un débutant en apprentissage automatique a essayé la RBM
[Apprentissage automatique] Comprendre la forêt aléatoire
Apprentissage automatique avec Python! Préparation
Bloc-notes de ressources d'étude d'apprentissage automatique
Apprentissage automatique ② Résumé Naive Bayes
Résumé de l'article sur l'apprentissage automatique (auto-écrit)
À propos de la matrice mixte d'apprentissage automatique
Apprentissage automatique: forêt supervisée - aléatoire
Mémo pratique du système d'apprentissage automatique
Démineur d'apprentissage automatique avec PyTorch
Créer un environnement d'apprentissage automatique
Programmation Python Machine Learning> Mots-clés
Algorithme d'apprentissage automatique (perceptron simple)
Utilisé en EDA pour l'apprentissage automatique
[Python] Ajustement de courbe avec polypoly
Importance des ensembles de données d'apprentissage automatique
Apprentissage automatique et optimisation mathématique
Machine Learning: Supervisé - Support Vector Machine
Machine learning supervisé (classification / régression)
J'ai essayé d'implémenter Extreme Learning Machine
Commencer avec l'apprentissage automatique Python
Algorithme d'apprentissage automatique (machine vectorielle de support)
Super introduction à l'apprentissage automatique
4 [/] Quatre arithmétiques par apprentissage automatique
Apprentissage automatique ④ Résumé du K-plus proche voisin
Pokemon Machine Learning Nth décoction
Essayez le machine learning à la légère avec Kaggle
Modèle d'empilage d'apprentissage automatique (retour)
Machine Learning: Supervisé - Arbre de décision
Algorithme d'apprentissage automatique (régression logistique)