PyBrain - Datasets-Typen

Datensätze sind Daten, die zum Testen, Validieren und Trainieren in Netzwerken angegeben werden müssen. Die Art des zu verwendenden Datensatzes hängt von den Aufgaben ab, die wir mit maschinellem Lernen ausführen werden. In diesem Kapitel werden die verschiedenen Dataset-Typen erläutert.

Wir können mit dem Datensatz arbeiten, indem wir das folgende Paket hinzufügen:

pybrain.dataset

SupervisedDataSet

SupervisedDataSet besteht aus Feldern von input und target. Es ist die einfachste Form eines Datensatzes und wird hauptsächlich für überwachte Lernaufgaben verwendet.

Unten sehen Sie, wie Sie es im Code verwenden können -

from pybrain.datasets import SupervisedDataSet

Die auf SupervisedDataSet verfügbaren Methoden lauten wie folgt:

addSample (inp, target)

Diese Methode fügt ein neues Beispiel für Eingabe und Ziel hinzu.

splitWithProportion (Anteil = 0,10)

Dadurch werden die Datensätze in zwei Teile geteilt. Im ersten Teil wird% des Datensatzes als Eingabe angegeben, dh wenn die Eingabe .10 ist, sind es 10% des Datensatzes und 90% der Daten. Sie können den Anteil nach Ihrer Wahl bestimmen. Die geteilten Datensätze können zum Testen und Trainieren Ihres Netzwerks verwendet werden.

copy() - Gibt eine tiefe Kopie des Datensatzes zurück.

clear() - Löschen Sie den Datensatz.

saveToFile (Dateiname, Format = Keine, ** kwargs)

Speichern Sie das Objekt in einer Datei mit dem Dateinamen.

Beispiel

Hier ist ein Arbeitsbeispiel mit einem SupervisedDataset -

testnetwork.py

from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure import TanhLayer
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer

# Create a network with two inputs, three hidden, and one output
nn = buildNetwork(2, 3, 1, bias=True, hiddenclass=TanhLayer)

# Create a dataset that matches network input and output sizes:
norgate = SupervisedDataSet(2, 1)

# Create a dataset to be used for testing.
nortrain = SupervisedDataSet(2, 1)

# Add input and target values to dataset
# Values for NOR truth table
norgate.addSample((0, 0), (1,))
norgate.addSample((0, 1), (0,))
norgate.addSample((1, 0), (0,))
norgate.addSample((1, 1), (0,))

# Add input and target values to dataset
# Values for NOR truth table
nortrain.addSample((0, 0), (1,))
nortrain.addSample((0, 1), (0,))
nortrain.addSample((1, 0), (0,))
nortrain.addSample((1, 1), (0,))

#Training the network with dataset norgate.
trainer = BackpropTrainer(nn, norgate)

# will run the loop 1000 times to train it.
for epoch in range(1000):
   trainer.train()
trainer.testOnData(dataset=nortrain, verbose = True)

Ausgabe

Die Ausgabe für das obige Programm ist wie folgt:

python testnetwork.py

C:\pybrain\pybrain\src>python testnetwork.py
Testing on data:
('out: ', '[0.887 ]')
('correct:', '[1 ]')
error: 0.00637334
('out: ', '[0.149 ]')
('correct:', '[0 ]')
error: 0.01110338
('out: ', '[0.102 ]')
('correct:', '[0 ]')
error: 0.00522736
('out: ', '[-0.163]')
('correct:', '[0 ]')
error: 0.01328650
('All errors:', [0.006373344564625953, 0.01110338071737218, 0.005227359234093431
, 0.01328649974219942])
('Average error:', 0.008997646064572746)
('Max error:', 0.01328649974219942, 'Median error:', 0.01110338071737218)

ClassificationDataSet

Dieser Datensatz wird hauptsächlich zur Behandlung von Klassifizierungsproblemen verwendet. Es enthält Eingaben, Zielfelder und ein zusätzliches Feld namens "Klasse", das eine automatisierte Sicherung der angegebenen Ziele darstellt. Zum Beispiel wird die Ausgabe entweder 1 oder 0 sein oder die Ausgabe wird zusammen mit Werten gruppiert, die auf der gegebenen Eingabe basieren, dh sie wird in eine bestimmte Klasse fallen.

So können Sie es im Code verwenden -

from pybrain.datasets import ClassificationDataSet
Syntax
// ClassificationDataSet(inp, target=1, nb_classes=0, class_labels=None)

Die in ClassificationDataSet verfügbaren Methoden lauten wie folgt:

addSample(inp, target) - Diese Methode fügt ein neues Beispiel für Eingabe und Ziel hinzu.

splitByClass() - Diese Methode liefert zwei neue Datensätze, für den ersten Datensatz wird die Klasse ausgewählt (0..nClasses-1), für den zweiten verbleibende Stichproben.

_convertToOneOfMany() - Diese Methode konvertiert die Zielklassen in eine 1-of-k-Darstellung, wobei die alten Ziele als Feldklasse beibehalten werden

Hier ist ein Arbeitsbeispiel von ClassificationDataSet.

Beispiel

from sklearn import datasets
import matplotlib.pyplot as plt
from pybrain.datasets import ClassificationDataSet
from pybrain.utilities import percentError
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.structure.modules import SoftmaxLayer
from numpy import ravel
digits = datasets.load_digits()
X, y = digits.data, digits.target
ds = ClassificationDataSet(64, 1, nb_classes=10)

for i in range(len(X)):
ds.addSample(ravel(X[i]), y[i])
test_data_temp, training_data_temp = ds.splitWithProportion(0.25)
test_data = ClassificationDataSet(64, 1, nb_classes=10)

for n in range(0, test_data_temp.getLength()):
test_data.addSample( test_data_temp.getSample(n)[0], test_data_temp.getSample(n)[1] )
training_data = ClassificationDataSet(64, 1, nb_classes=10)

for n in range(0, training_data_temp.getLength()):
training_data.addSample( training_data_temp.getSample(n)[0], training_data_temp.getSample(n)[1] )
test_data._convertToOneOfMany()
training_data._convertToOneOfMany()
net = buildNetwork(training_data.indim, 64, training_data.outdim, outclass=SoftmaxLayer)
trainer = BackpropTrainer(
   net, dataset=training_data, momentum=0.1,learningrate=0.01,verbose=True,weightdecay=0.01
)
trnerr,valerr = trainer.trainUntilConvergence(dataset=training_data,maxEpochs=10)
plt.plot(trnerr,'b',valerr,'r')
plt.show()
trainer.trainEpochs(10)
print('Percent Error on testData:',percentError(trainer.testOnClassData(dataset=test_data), test_data['class']))

Das im obigen Beispiel verwendete Dataset ist ein Ziffern-Dataset und die Klassen sind von 0 bis 9, es gibt also 10 Klassen. Die Eingabe ist 64, das Ziel ist 1 und die Klassen 10.

Der Code trainiert das Netzwerk mit dem Datensatz und gibt das Diagramm für Trainingsfehler und Validierungsfehler aus. Es gibt auch den prozentualen Fehler bei Testdaten an, der wie folgt lautet:

Ausgabe

Total error: 0.0432857814358
Total error: 0.0222276374185
Total error: 0.0149012052174
Total error: 0.011876985318
Total error: 0.00939854792853
Total error: 0.00782202445183
Total error: 0.00714707652044
Total error: 0.00606068893793
Total error: 0.00544257958975
Total error: 0.00463929281336
Total error: 0.00441275665294
('train-errors:', '[0.043286 , 0.022228 , 0.014901 , 0.011877 , 0.009399 , 0.007
   822 , 0.007147 , 0.006061 , 0.005443 , 0.004639 , 0.004413 ]')
('valid-errors:', '[0.074296 , 0.027332 , 0.016461 , 0.014298 , 0.012129 , 0.009
   248 , 0.008922 , 0.007917 , 0.006547 , 0.005883 , 0.006572 , 0.005811 ]')
Percent Error on testData: 3.34075723830735