Maschinelles Lernen – Python-Implementierung eines neuronalen Netzwerks

Grundkonzepte neuronaler Netze

1. Das neuronale Netzwerk besteht aus einer Eingabeschicht, einer verborgenen Schicht und einer Ausgabeschicht.

2. Es gibt Verbindungen zwischen Neuronen zwischen Schichten, aber es gibt keine Verbindungen zwischen Neuronen innerhalb von Schichten. Verbundene Neuronen haben entsprechende Gewichte;

3. Die Schicht ganz links wird als Eingabeschicht bezeichnet und ist für den Empfang von Eingabedaten verantwortlich.

4. Die Schicht ganz rechts wird als Ausgabeschicht bezeichnet, und wir können die Ausgabedaten des neuronalen Netzwerks von dieser Schicht erhalten.

5. Die Schicht zwischen der Eingabeschicht und der Ausgabeschicht wird als verborgene Schicht bezeichnet.

6. Die Stärke der Verbindung zwischen verschiedenen Neuronen in zwei benachbarten Schichten wird als Gewicht bezeichnet. Wenn Neuron 1 bis Neuron 2 einen größeren Wert haben, bedeutet dies, dass Neuron 1 einen größeren Einfluss auf Neuron 2 hat. Die Gewichtung verringert die Wichtigkeit des Eingabewerts. Bei einer Gewichtung nahe 0 wirken sich Änderungen in der Eingabe nicht auf Änderungen in der Ausgabe aus; negative Gewichte bedeuten, dass die Ausgabe mit zunehmender Eingabe abnimmt. Das Gewicht bestimmt den Einfluss der Eingabe auf die Ausgabe.

Fügen Sie hier eine Bildbeschreibung ein

Das Netzwerk im Bild oben besteht aus 3 Schichten von Neuronen, aber tatsächlich gibt es nur 2 Schichten mit insgesamt 20 Gewichten. Daher betrachten wir die Eingabeschicht normalerweise als Netzwerk der 0. Schicht. Im Bild oben nennen wir es ein 2-Schicht-Netzwerk (je nach Eingabeschicht wird das Netzwerk benannt, indem 1 von der Gesamtzahl der verborgenen Schichten und der Ausgabeschichten subtrahiert wird).

Trainingsmethoden für neuronale Netze

Die Trainingsmethode des neuronalen Netzwerks ist der Trainingsmethode der logistischen Regression sehr ähnlich:

Fügen Sie hier eine Bildbeschreibung ein

Der Gradientenabstiegsalgorithmus wird auch zum Aktualisieren der Parameter des Modells verwendet. Da Sie den Gradientenabstiegsalgorithmus verwenden möchten, müssen Sie den Gradienten der Verlustfunktion für die Parameter kennen. In neuronalen Netzwerken ist unser Netzwerk aufgrund des mehrschichtigen Netzwerks sehr schwer zu trainieren und es ist sehr mühsam, die Gradienten so vieler Parameter zu ermitteln. Das Aufkommen des Backpropagation-Algorithmus hat dieses Problem für uns gelöst und kann diese Gradienten schnell berechnen. Der Backpropagation-Algorithmus ist in zwei Teile unterteilt: Vorwärtspropagation und Backpropagation.

1. Vorwärtsausbreitung

Fügen Sie hier eine Bildbeschreibung einFügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

2. Backpropagation

Wir können die Verlustfunktion durch Vorwärtsausbreitung ermitteln, und die Rückausbreitung verwendet die durch Vorwärtsausbreitung erhaltene Verlustfunktion, um den Gradienten der Parameter zu ermitteln, dh die partielle Ableitung jedes Parameters.
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

Dateneinführung

Iris-Datensatz

Fügen Sie hier eine Bildbeschreibung ein

Der Irisdatensatz ist eine Art Datensatz für die multivariate Analyse. Verwenden Sie die vier Attribute Kelchlänge, Kelchbreite, Blütenblattlänge und Blütenblattbreite, um vorherzusagen, zu welcher der drei Kategorien die Irisblume gehört (Setosa, Versicolour, Virginica). Der Iris-Datensatz kann im Standarddatensatz der Sklearn-Bibliothek gefunden und referenziert werden, wird jedoch bereits von der EduCoder-Trainingsplattform bereitgestellt. Nachfolgend sind einige Daten und Bezeichnungen aufgeführt:

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

Python-Code-Implementierung

Hier wird das Sklearn-Bibliotheksmodell für Training und Vorhersage verwendet:

#encoding=utf8
import os
import pandas as pd
from sklearn.neural_network import MLPClassifier

if os.path.exists('./step2/result.csv'):
    os.remove('./step2/result.csv')
    
#获取训练数据
train_data = pd.read_csv('./step2/train_data.csv')
#获取训练标签
train_label = pd.read_csv('./step2/train_label.csv')
train_label = train_label['target']
#获取测试数据
test_data = pd.read_csv('./step2/test_data.csv')

#调用MLP模型并进行训练
mlp = MLPClassifier(solver='lbfgs',max_iter =500,
           alpha=1e-3,hidden_layer_sizes=(100,),learning_rate_init=0.0001)
mlp.fit(train_data, train_label)

#预测
result = mlp.predict(test_data)
#保存
save_df = pd.DataFrame({
    
    'result':result})
save_df.to_csv('./step2/result.csv',index=0)

Das neuronale Netzwerkmodell ist in die Sklearn-Bibliothek integriert und kann mit dem MLPClassifier „from sklearn.neural_network import“ geladen werden.

MLPClassifier的构造函数有几个比较常用的参数:

solver:MLP的求解方法lbfs在小数据上表现较好,adam较为鲁棒,sgd在参数调整较优时会有最佳表现(分类效果与迭代次数),sgd 随机梯度下降;

max_iter:最大训练轮数;

alpha:正则项系数,默认为L2正则化,需要具体调整;

hidden_layer_sizes:隐藏层层数以及包含的神经元数,是一个元组,例如(100,70,70)代表为神经网络设置三个隐藏层,每层的神经元数量分别是100、70、70。

learning_rate_init:学习率。(学习率通常需要设置,平台的教程中没有出现这个,但如果不设置,最终预测的准确率通常会比较低)

Dann gibt es noch die Trainingsfunktion fit und die Vorhersagefunktion des Modells. Ihre Verwendung ist im Wesentlichen die gleiche wie bei den vorherigen Modellen, daher werde ich hier nicht auf Details eingehen.

Nachdem der Code geschrieben wurde, wird er auf der Plattform getestet und die endgültige Genauigkeitsrate überschreitet 0,95 (dieses Ergebnis ist nicht das optimale Ergebnis, der Indikator der Plattform erfordert nur 0,95):
Fügen Sie hier eine Bildbeschreibung ein

Der Artikel bezieht sich auf Zhou Zhihuas maschinelles Lernen, den Python-Anwendungskurs für maschinelles Lernen des Beijing Institute of Technology usw. und die Testplattform EduCoder-Trainingsplattform.

Supongo que te gusta

Origin blog.csdn.net/qq_44725872/article/details/108835914
Recomendado
Clasificación