PyBrain - 資料集型別



資料集是用於在網路上進行測試、驗證和訓練的資料。要使用的資料集型別取決於我們將使用機器學習執行的任務。我們將在本章中討論各種資料集型別。

我們可以透過新增以下包來使用資料集:

pybrain.dataset

SupervisedDataSet

SupervisedDataSet 包含輸入目標欄位。它是資料集的最簡單形式,主要用於監督學習任務。

以下是您如何在程式碼中使用它的示例:

from pybrain.datasets import SupervisedDataSet

SupervisedDataSet 上可用的方法如下:

addSample(inp, target)

此方法將新增一個新的輸入和目標樣本。

splitWithProportion(proportion=0.10)

這會將資料集分成兩部分。第一部分將包含作為輸入給定的資料集的百分比,即,如果輸入為 .10,則為資料集的 10% 和 90% 的資料。您可以根據自己的選擇決定比例。劃分後的資料集可用於測試和訓練您的網路。

copy() - 返回資料集的深度副本。

clear() - 清空資料集。

saveToFile(filename, format=None, **kwargs)

將物件儲存到由 filename 指定的檔案中。

示例

這是一個使用 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)

輸出

上述程式的輸出如下:

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

此資料集主要用於處理分類問題。它接收輸入、目標欄位,以及一個名為“class”的額外欄位,該欄位是給定目標的自動備份。例如,輸出將為 1 或 0,或者輸出將根據給定的輸入將值組合在一起,即,它將屬於一個特定的類。

以下是您如何在程式碼中使用它的示例:

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

ClassificationDataSet 上可用的方法如下:

addSample(inp, target) - 此方法將新增一個新的輸入和目標樣本。

splitByClass() - 此方法將提供兩個新的資料集,第一個資料集將包含選定的類 (0..nClasses-1),第二個資料集將包含其餘樣本。

_convertToOneOfMany() - 此方法將目標類轉換為 1-of-k 表示,並將舊目標保留為欄位 class

這是一個ClassificationDataSet的工作示例。

示例

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

上述示例中使用的資料集是數字資料集,類從 0 到 9,因此有 10 個類。輸入為 64,目標為 1,類為 10。

程式碼使用資料集訓練網路,並輸出訓練誤差和驗證誤差的圖形。它還給出了測試資料的百分比誤差,如下所示:

輸出

Classification DataSet.
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
廣告