Codelogik zur Implementierung eines Mini-Batch-Gradientenabstiegsalgorithmus mit Python

PHPz
Freigeben: 2024-01-22 12:33:19
nach vorne
1303 Leute haben es durchsucht

Lassen Sie Theta = Modellparameter und max_iters = Anzahl der Epochen. Für itr=1,2,3,...,max_iters: Für mini_batch(X_mini,y_mini):

Vorwärtsdurchlauf von Batch X_mini:

1. Prognostizieren Sie den Mini-Batch

2 Parameter Berechnen Sie den Vorhersagefehler (J(Theta))

Nach der Übertragung: Berechnen Sie den Gradienten (Theta)=J(Theta)bzgl. der partiellen Ableitung von Theta

Aktualisierungsparameter: Theta=Theta–Lernrate*Gradient(Theta)

Python implementiert den Codefluss des Gradientenabstiegsalgorithmus

Schritt 1: Importieren Sie Abhängigkeiten, generieren Sie Daten für die lineare Regression und visualisieren Sie die generierten Daten. Nehmen Sie 8000 Datenbeispiele, jedes Beispiel verfügt über 2 Attributfunktionen. Diese Datenproben werden weiter in Trainingssätze (X_train, y_train) und Testsätze (X_test, y_test) mit 7200 bzw. 800 Proben unterteilt.

import numpy as np
import matplotlib.pyplot as plt

mean=np.array([5.0,6.0])
cov=np.array([[1.0,0.95],[0.95,1.2]])
data=np.random.multivariate_normal(mean,cov,8000)

plt.scatter(data[:500,0],data[:500,1],marker='.')
plt.show()
data=np.hstack((np.ones((data.shape[0],1)),data))
split_factor=0.90
split=int(split_factor*data.shape[0])
X_train=data[:split,:-1]
y_train=data[:split,-1].reshape((-1,1))
X_test=data[split:,:-1]
y_test=data[split:,-1].reshape((-1,1))

print(& quot Number of examples in training set= % d & quot % (X_train.shape[0]))
print(& quot Number of examples in testing set= % d & quot % (X_test.shape[0]))
Nach dem Login kopieren
小批量梯度下降算法逻辑 Python实现梯度下降算法的代码流程

Anzahl der Beispiele im Trainingssatz = 7200 Anzahl der Beispiele im Testsatz = 800

Schritt 2:

Code zur Implementierung der linearen Regression mithilfe eines Mini-Batch-Gradientenabstiegs. gradientDescent() ist die Hauptantriebsfunktion, und andere Funktionen sind Hilfsfunktionen:

Vorhersagen treffen – hypothesis()

Berechnen Sie den Gradienten – gradient()

Berechnen Sie den Fehler – cost()

Erstellen Sie Mini-Batches – create_mini_batches ( )

Die Treiberfunktion initialisiert die Parameter, berechnet den optimalen Parametersatz für das Modell und gibt diese Parameter zusammen mit einer Liste zurück, die den Fehlerverlauf enthält, während die Parameter aktualisiert wurden.

def hypothesis(X,theta):
    return np.dot(X,theta)

def gradient(X,y,theta):
    h=hypothesis(X,theta)
    grad=np.dot(X.transpose(),(h-y))
    return grad

def cost(X,y,theta):
    h=hypothesis(X,theta)
    J=np.dot((h-y).transpose(),(h-y))
    J/=2
    return J[0]

def create_mini_batches(X,y,batch_size):
    mini_batches=[]
    data=np.hstack((X,y))
    np.random.shuffle(data)
    n_minibatches=data.shape[0]//batch_size
    i=0
    for i in range(n_minibatches+1):
        mini_batch=data[i*batch_size:(i+1)*batch_size,:]
        X_mini=mini_batch[:,:-1]
        Y_mini=mini_batch[:,-1].reshape((-1,1))
        mini_batches.append((X_mini,Y_mini))
    if data.shape[0]%batch_size!=0:
       mini_batch=data[i*batch_size:data.shape[0]]
       X_mini=mini_batch[:,:-1]
       Y_mini=mini_batch[:,-1].reshape((-1,1))
       mini_batches.append((X_mini,Y_mini))
    return mini_batches

def gradientDescent(X,y,learning_rate=0.001,batch_size=32):
    theta=np.zeros((X.shape[1],1))
    error_list=[]
    max_iters=3
    for itr in range(max_iters):
        mini_batches=create_mini_batches(X,y,batch_size)
        for mini_batch in mini_batches:
            X_mini,y_mini=mini_batch
            theta=theta-learning_rate*gradient(X_mini,y_mini,theta)
            error_list.append(cost(X_mini,y_mini,theta))
    return theta,error_list
Nach dem Login kopieren

Rufen Sie die Funktion „gradientDescent()“ auf, um die Modellparameter (Theta) zu berechnen und die Änderungen in der Fehlerfunktion zu visualisieren.

theta,error_list=gradientDescent(X_train,y_train)
print("Bias=",theta[0])
print("Coefficients=",theta[1:])

plt.plot(error_list)
plt.xlabel("Number of iterations")
plt.ylabel("Cost")
plt.show()
Nach dem Login kopieren

Abweichung=[0,81830471]Koeffizient=[[1,04586595]]

小批量梯度下降算法逻辑 Python实现梯度下降算法的代码流程

Schritt 3: Testsatz vorhersagen und den mittleren absoluten Fehler in der Vorhersage berechnen.

y_pred=hypothesis(X_test,theta)
plt.scatter(X_test[:,1],y_test[:,],marker='.')
plt.plot(X_test[:,1],y_pred,color='orange')
plt.show()

error=np.sum(np.abs(y_test-y_pred)/y_test.shape[0])
print(& quot Mean absolute error=&quot,error)
Nach dem Login kopieren
小批量梯度下降算法逻辑 Python实现梯度下降算法的代码流程

Mittlerer absoluter Fehler = 0,4366644295854125

Die orangefarbene Linie stellt die endgültige Hypothesenfunktion dar: Theta[0]+Theta[1]*X_test[:,1]+Theta[2]*X_test[:,2]=0

Das obige ist der detaillierte Inhalt vonCodelogik zur Implementierung eines Mini-Batch-Gradientenabstiegsalgorithmus mit Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:163.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!