PyBrain - Jenis Kumpulan Data
Set data adalah data yang akan diberikan untuk diuji, divalidasi, dan dilatih di jaringan. Jenis kumpulan data yang akan digunakan bergantung pada tugas yang akan kita lakukan dengan pembelajaran mesin. Kita akan membahas berbagai tipe dataset di bab ini.
Kita dapat bekerja dengan dataset dengan menambahkan paket berikut -
pybrain.dataset
SupervisedDataSet
SupervisedDataSet terdiri dari bidang input dan target. Ini adalah bentuk paling sederhana dari kumpulan data dan terutama digunakan untuk tugas pembelajaran yang diawasi.
Di bawah ini adalah bagaimana Anda dapat menggunakannya dalam kode -
from pybrain.datasets import SupervisedDataSet
Metode yang tersedia di SupervisedDataSet adalah sebagai berikut -
addSample (inp, target)
Metode ini akan menambah sampel input dan target baru.
splitWithProportion (proporsi = 0,10)
Ini akan membagi dataset menjadi dua bagian. Bagian pertama akan memiliki% dari dataset yang diberikan sebagai input, yaitu jika inputnya adalah 0,10, maka itu adalah 10% dari dataset dan 90% dari data. Anda dapat memutuskan proporsinya sesuai pilihan Anda. Kumpulan data yang terbagi dapat digunakan untuk menguji dan melatih jaringan Anda.
copy() - Mengembalikan salinan dalam dari kumpulan data.
clear() - Hapus dataset.
saveToFile (nama file, format = Tidak Ada, ** kwargs)
Simpan objek ke file yang diberikan oleh nama file.
Contoh
Berikut adalah contoh kerja menggunakan 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)
Keluaran
Output dari program di atas adalah sebagai berikut -
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
Dataset ini terutama digunakan untuk menangani masalah klasifikasi. Dibutuhkan input, field target dan juga field ekstra yang disebut "class" yang merupakan backup otomatis dari target yang diberikan. Misalnya, keluarannya akan menjadi 1 atau 0 atau keluaran akan dikelompokkan bersama dengan nilai-nilai berdasarkan masukan yang diberikan, yaitu akan termasuk dalam satu kelas tertentu.
Inilah cara Anda dapat menggunakannya dalam kode -
from pybrain.datasets import ClassificationDataSet
Syntax
// ClassificationDataSet(inp, target=1, nb_classes=0, class_labels=None)
Metode yang tersedia di ClassificationDataSet adalah sebagai berikut -
addSample(inp, target) - Metode ini akan menambah sampel input dan target baru.
splitByClass() - Metode ini akan memberikan dua dataset baru, dataset pertama akan memiliki kelas yang dipilih (0..nClasses-1), yang kedua akan memiliki sampel yang tersisa.
_convertToOneOfMany() - Metode ini akan mengubah kelas target menjadi representasi 1-of-k, mempertahankan target lama sebagai kelas lapangan
Berikut adalah contoh kerja dari ClassificationDataSet.
Contoh
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']))
Dataset yang digunakan pada contoh di atas adalah dataset digit dan kelas-kelasnya dari 0-9, jadi ada 10 kelas. Inputnya 64, targetnya 1 dan kelas, 10.
Kode tersebut melatih jaringan dengan kumpulan data dan mengeluarkan grafik untuk kesalahan pelatihan dan kesalahan validasi. Ini juga memberikan kesalahan persen pada testdata yaitu sebagai berikut -
Keluaran
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