-
Notifications
You must be signed in to change notification settings - Fork 0
/
nn-supervised.py
95 lines (62 loc) · 3.02 KB
/
nn-supervised.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from pybrain.datasets import SupervisedDataSet
from pybrain.datasets import ClassificationDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure import TanhLayer,SoftmaxLayer
from pybrain.utilities import percentError
from pybrain.tools.customxml import NetworkReader
from pybrain.tools.customxml import NetworkWriter
import numpy as np
# ds = SupervisedDataSet(2, 1)
# input =np.array([[0],[0]] )
# ds.addSample((input.flatten()), (0,))
# ds.addSample((0, 1), (1,))
# ds.addSample((1, 0), (1,))
# ds.addSample((1, 1), (0,))
# Produce two new datasets, the first one containing the fraction given by proportion of the samples.
# splitWithProportion(proportion=0.5)
# print len(ds)
# tstdata, trndata = alldata.splitWithProportion( 0.25 )
# for input, target in ds:
# print input,target
# print ds['input']
# print ds['target']
#hidden class by default sigmoid
all_data=ClassificationDataSet.loadFromFile("nn-data")
# tstdata, trndata = all_data.splitWithProportion( 0.25 )
tstdata_temp, partdata_temp = all_data.splitWithProportion( 0.25 )
trndata_temp,validata_temp = partdata_temp.splitWithProportion(0.50)
tstdata = ClassificationDataSet(200, 1, nb_classes=2)
for n in xrange(0, tstdata_temp.getLength()):
tstdata.addSample( tstdata_temp.getSample(n)[0], tstdata_temp.getSample(n)[1] )
trndata = ClassificationDataSet(200, 1, nb_classes=2)
for n in xrange(0, trndata_temp.getLength()):
trndata.addSample( trndata_temp.getSample(n)[0], trndata_temp.getSample(n)[1] )
validata= ClassificationDataSet(200, 1, nb_classes=2)
for n in xrange(0, validata_temp.getLength()):
trndata.addSample( validata_temp.getSample(n)[0], validata_temp.getSample(n)[1] )
trndata._convertToOneOfMany()
tstdata._convertToOneOfMany()
validata._convertToOneOfMany()
# for input, target in trndata:
# print len(input),target
# split up training data for cross validation
print "Split data into training and test sets..."
net = buildNetwork(200, 134, 2, bias=True, outclass=SoftmaxLayer)
trainer = BackpropTrainer(net, dataset=trndata)
print "training for {} epochs..."
trainer.trainUntilConvergence( verbose = True, validationProportion = 0.15, maxEpochs = 1000, continueEpochs = 10 )
trnresult = percentError( trainer.testOnClassData(),trndata['class'] )
tstresult = percentError( trainer.testOnClassData(dataset=tstdata ), tstdata['class'] )
print "epoch: %4d" % trainer.totalepochs," train error: %5.2f%%" % trnresult, " test error: %5.2f%%" % tstresult
NetworkWriter.writeToFile(net, 'oliv-x2-80.xml')
# predict using test data
# print "Making predictions..."
# ypreds = []
# ytrues = []
# for i in range(Xtest.getLength()]):
# pred = fnn.activate(getSample(i)[0])
# ypreds.append(pred.argmax())
# ytrues.append(ytest[i])
# print "Accuracy on test set: %7.4f" % accuracy_score(ytrues, ypreds,
# normalize=True)