In [1]:
%run basics
%matplotlib
import neurolab


Using matplotlib backend: Qt4Agg

In [2]:
ncname = "../../Sites/Tumbarumba/Data/Processed/all/Tumbarumba_2001_to_2014_L4.nc"
ds = qcio.nc_read_series(ncname)
dt = ds.series["DateTime"]["Data"]
ts = int(ds.globalattributes["time_step"])

In [3]:
start_date = "2010-02-01"
end_date = "2010-03-01"
si = qcutils.GetDateIndex(dt,start_date,ts=ts)
ei = qcutils.GetDateIndex(dt,end_date,ts=ts)
ldt = dt[si:ei+1]
Fh,f,a = qcutils.GetSeriesasMA(ds,"Fh",si=si,ei=ei)
Fa,f,a = qcutils.GetSeriesasMA(ds,"Fa",si=si,ei=ei)
Ta,f,a = qcutils.GetSeriesasMA(ds,"Ta",si=si,ei=ei)
Ws,f,a = qcutils.GetSeriesasMA(ds,"Ws",si=si,ei=ei)

In [103]:
target = "Fh"
#drivers = ["Fa","Ta","Ws"]
drivers = ["Fa","Ws"]
ndrivers = len(drivers)
# prepare the input and target data for training
tar,f,a = qcutils.GetSeriesasMA(ds,target,si=si,ei=ei)
mask = numpy.ma.getmask(tar)
for val in drivers:
    d,f,a = qcutils.GetSeriesasMA(ds,val,si=si,ei=ei)
    mask = numpy.ma.mask_or(mask,d.mask)
tar.mask = mask
nRecs = numpy.ma.count(tar)
data_nm = numpy.empty((nRecs,len(drivers)+1))
for idx,val in enumerate(drivers):
    d,f,a = qcutils.GetSeriesasMA(ds,val,si=si,ei=ei)
    d.mask = mask
    data_nm[:,idx] = numpy.ma.compressed(d)
data_nm[:,idx+1] = numpy.ma.compressed(tar)
input_train = data_nm[:,0:idx+1]
target_train = data_nm[:,idx+1]
input_train = input_train.reshape(len(input_train),len(drivers))
target_train = target_train.reshape(len(target_train),1)

In [104]:
minmax = []
for i in range(input_train.shape[1]):
    mm = [numpy.min(input_train[:,i]),numpy.max(input_train[:,i])]
    minmax.append(mm)
print minmax


[[-107.4208984375, 861.11688232421875], [0.75125002861022949, 7.3629999160766602]]

In [105]:
#net = neurolab.net.newelm(minmax,[24,16,1],[neurolab.trans.TanSig(),neurolab.trans.TanSig(),neurolab.trans.PureLin()])
net = neurolab.net.newelm(minmax,[5,1],[neurolab.trans.LogSig(),neurolab.trans.PureLin()])
net.trainf = neurolab.train.train_rprop

In [106]:
error = net.train(input_train, target_train, epochs=500, show=100)


Epoch: 100; Error: 1379.31348291;
Epoch: 200; Error: 1324.75925725;
Epoch: 300; Error: 1436.49405664;
Epoch: 400; Error: 1351.07226502;
Epoch: 500; Error: 1332.94794328;
The maximum number of train epochs is reached

In [12]:
fig=plt.figure()
plt.plot(error)
plt.show()

In [107]:
input_predict = numpy.empty((len(tar),len(drivers)))
for idx,val in enumerate(drivers):
    d,f,a = qcutils.GetSeries(ds,val,si=si,ei=ei)
    input_predict[:,idx] = d[:]
input_predict = input_predict.reshape(len(tar),len(drivers))
out = net.sim(input_predict)

In [108]:
fig=plt.figure()
plt.subplot(411)
plt.plot(ldt,Ws,'b.')
plt.subplot(412)
plt.plot(ldt,Ta,'b.')
plt.subplot(413)
plt.plot(ldt,Fa,'b.')
plt.subplot(414)
plt.plot(ldt,Fh,'b.')
plt.plot(ldt,out,'r-')
plt.show()

In [ ]: