C'est la troisième fois qui suit. Cette fois, je voudrais faire une régression linéaire. Comme d'habitude, il est implémenté en Python, une explication détaillée est impossible, alors allez sur un autre site (rires) J'ai l'impression que ça devient désordonné, mais s'il vous plaît regardez avec des yeux chauds.
Les termes sont les deux suivants.
Dans le cas de la régression linéaire, une ligne de «y = Θ_1x + Θ_2» est tracée pour les données distribuées, et le dessin de cette ligne et en prenant l'erreur à partir des données réelles est appelé l'erreur quadratique moyenne.
Dans l'exemple, il est défini comme suit.
T.dot () est une fonction produit interne. Il s'agit de la somme des sections moins y des données réelles, au carré, totalisées et divisée par le nombre de données d'apprentissage (m).
#Fonction de coût
j = T.sum(T.sqr(t[0] + T.dot(data, t[1:]) - target)) / (2 * m)
L'image de la figure est Veuillez vous reporter à la série d'implémentation d'algorithmes d'apprentissage automatique [Régression linéaire]! !!
La méthode du gradient est une méthode pour corriger Θ_1 et Θ_2 de y = Θ_1x + Θ_2
dans la direction qui sera la plus correcte.
Le code est comme suit. Il définit T.grad ()
qui différencie la variable partagée (np.array ([0,0])) appelée t (= theta = Θ). La fonction de l'erreur quadratique moyenne définie ci-dessus est partiellement différenciée par rapport à Θ1 et Θ2, respectivement.
Définissez ensuite une fonction appelée train ()
et mettez à jour la valeur de t avec ʻupdates = ({}) `après chaque exécution.
#Différenciation partielle
dt = T.grad(cost=j, wrt=t)
#Méthode de gradient(Mise à jour de Θ)
train = theano.function(
inputs = [],
outputs = [j],
updates = ({t: t - (alpha*dt)})
)
L'image est [4ème méthode de gradient (méthode de descente la plus raide)](https://github.com/levelfour/machine-learning-2014/wiki/%E7%AC%AC4%E5%9B%9E ---% E5 % 8B% BE% E9% 85% 8D% E6% B3% 95% EF% BC% 88% E6% 9C% 80% E6% 80% A5% E9% 99% 8D% E4% B8% 8B% E6% B3 Veuillez vous référer à% 95% EF% BC% 89)! !!
Montrez-moi le code et mettez-le pour les gens. J'utilise une bibliothèque appelée theano pour l'implémentation, donc si vous ne comprenez pas, veuillez gg! Je n'applique pas le code par prédiction (je mettrai à jour le code si j'ai le temps)
# -*- coding: utf-8 -*-
import numpy as np
import theano
import theano.tensor as T
class Regression:
def __init__(self):
self.t = None
def fit(self, data, target, alpha=0.1):
#Calculer la longueur de la variable explicative
if isinstance(data[0], (np.ndarray, np.generic)):
m = len(data[0])
else:
m = len(data)
#Variables partagées
t = theano.shared(np.zeros(m+1), name='theta')
#Fonction de coût
j = T.sum(T.sqr(t[0] + T.dot(data, t[1:]) - target)) / (2 * m)
#Différenciation partielle
dt = T.grad(cost=j, wrt=t)
#Méthode de gradient(Mise à jour de Θ)
train = theano.function(
inputs = [],
outputs = [j],
updates = ({t: t - (alpha*dt)})
)
#Apprentissage
for i in range(100):
train()
if __name__ == '__main__':
from sklearn import datasets
iris = datasets.load_iris()
reg = Regression()
reg.fit(data=iris.data, target=iris.target)
Le site suivant a été très utile
Recommended Posts