Dies ist das dritte Mal im Anschluss. Dieses Mal möchte ich eine lineare Regression durchführen. Wie üblich ist es in Python implementiert, eine detaillierte Erklärung ist nicht möglich. Bitte gehen Sie zu einer anderen Site (lacht). Es fühlt sich an, als würde es chaotisch werden, aber bitte schauen Sie mit warmen Augen zu.
Die Begriffe sind die folgenden zwei.
Im Fall einer linearen Regression wird für die verteilten Daten eine Linie von "y = Θ_1x + Θ_2" gezeichnet, und das Zeichnen dieser Linie und das Nehmen des Fehlers aus den tatsächlichen Daten wird als durchschnittlicher quadratischer Fehler bezeichnet.
In der Stichprobe ist es wie folgt definiert.
T.dot () ist eine innere Produktfunktion. Sie wird durch die Anzahl der Trainingsdaten (m) geteilt, indem y der tatsächlichen Daten von der Summe der Abschnitte subtrahiert und quadriert wird.
#Kostenfunktion
j = T.sum(T.sqr(t[0] + T.dot(data, t[1:]) - target)) / (2 * m)
Das Bild der Figur ist Weitere Informationen finden Sie in der Implementierungsreihe zum Algorithmus für maschinelles Lernen [Lineare Regression]! !!
Die Gradientenmethode ist eine Methode zum Korrigieren von Θ_1 und Θ_2 von y = Θ_1x + Θ_2
in der Richtung, die korrekter ist.
Der Code lautet wie folgt. Es definiert "T.grad ()", das die gemeinsam genutzte Variable (np.array ([0,0])) mit dem Namen t (= theta = Θ) unterscheidet. Die Funktion des oben definierten mittleren quadratischen Fehlers ist teilweise in Bezug auf Θ1 bzw. Θ2 differenziert. Definieren Sie danach eine Funktion namens "train ()" und aktualisieren Sie den Wert von t nach jeder Ausführung mit "updates = ({})".
#Teilweise Differenzierung
dt = T.grad(cost=j, wrt=t)
#Gradientenmethode(Update von Θ)
train = theano.function(
inputs = [],
outputs = [j],
updates = ({t: t - (alpha*dt)})
)
Das Bild ist [4. Gradientenmethode (Methode mit dem steilsten Abstieg)](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 Bitte beziehen Sie sich auf% 95% EF% BC% 89)! !!
Zeigen Sie mir den Code und legen Sie ihn für die Leute an. Ich benutze eine Bibliothek namens theano für die Implementierung. Wenn Sie das nicht verstehen, bitte gg! Ich wende den Code nicht pro Vorhersage an (ich werde den Code aktualisieren, wenn ich Zeit habe)
# -*- 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):
#Berechnen Sie die Länge der erklärenden Variablen
if isinstance(data[0], (np.ndarray, np.generic)):
m = len(data[0])
else:
m = len(data)
#Gemeinsame Variablen
t = theano.shared(np.zeros(m+1), name='theta')
#Kostenfunktion
j = T.sum(T.sqr(t[0] + T.dot(data, t[1:]) - target)) / (2 * m)
#Teilweise Differenzierung
dt = T.grad(cost=j, wrt=t)
#Gradientenmethode(Update von Θ)
train = theano.function(
inputs = [],
outputs = [j],
updates = ({t: t - (alpha*dt)})
)
#Lernen
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)
Die folgende Seite war sehr hilfreich
Recommended Posts