PyBrain - Tipi di set di dati

I set di dati sono dati da fornire per testare, convalidare e addestrare sulle reti. Il tipo di set di dati da utilizzare dipende dalle attività che verranno eseguite con l'apprendimento automatico. Discuteremo i vari tipi di dataset in questo capitolo.

Possiamo lavorare con il set di dati aggiungendo il seguente pacchetto:

pybrain.dataset

SupervisedDataSet

SupervisedDataSet è costituito da campi di input e target. È la forma più semplice di un set di dati e viene utilizzata principalmente per attività di apprendimento supervisionato.

Di seguito è riportato come puoi usarlo nel codice:

from pybrain.datasets import SupervisedDataSet

I metodi disponibili su SupervisedDataSet sono i seguenti:

addSample (inp, target)

Questo metodo aggiungerà un nuovo campione di input e target.

splitWithProportion (proporzione = 0,10)

Questo dividerà i set di dati in due parti. La prima parte avrà la% del set di dati fornito come input, cioè, se l'input è .10, allora sarà il 10% del set di dati e il 90% dei dati. Puoi decidere la proporzione secondo la tua scelta. I set di dati divisi possono essere utilizzati per testare e addestrare la rete.

copy() - Restituisce una copia completa del set di dati.

clear() - Cancella il set di dati.

saveToFile (nomefile, formato = Nessuno, ** kwargs)

Salva l'oggetto nel file dato dal nome del file.

Esempio

Ecco un esempio funzionante che utilizza un 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)

Produzione

L'output per il programma di cui sopra è il seguente:

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

Questo set di dati viene utilizzato principalmente per affrontare i problemi di classificazione. Accetta input, campo obiettivo e anche un campo aggiuntivo chiamato "classe" che è un backup automatico dei target forniti. Ad esempio, l'output sarà 1 o 0 o l'output sarà raggruppato insieme ai valori in base all'input fornito., Cioè, cadrà in una particolare classe.

Ecco come puoi usarlo nel codice:

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

I metodi disponibili su ClassificationDataSet sono i seguenti:

addSample(inp, target) - Questo metodo aggiungerà un nuovo campione di input e target.

splitByClass() - Questo metodo darà due nuovi dataset, il primo dataset avrà la classe selezionata (0..nClasses-1), il secondo avrà i campioni rimanenti.

_convertToOneOfMany() - Questo metodo convertirà le classi di destinazione in una rappresentazione 1 di k, mantenendo i vecchi obiettivi come una classe di campo

Ecco un esempio funzionante di ClassificationDataSet.

Esempio

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']))

Il set di dati utilizzato nell'esempio precedente è un set di dati con cifre e le classi vanno da 0 a 9, quindi ci sono 10 classi. L'input è 64, l'obiettivo è 1 e le classi 10.

Il codice addestra la rete con il set di dati e restituisce il grafico per errori di addestramento e convalida. Fornisce anche la percentuale di errore sui dati di test che è la seguente:

Produzione

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