In [1]:
%run basics
%matplotlib
import neurolab
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 [23]:
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 [24]:
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
In [35]:
#net = neurolab.net.newelm(minmax,[24,16,1],[neurolab.trans.TanSig(),neurolab.trans.TanSig(),neurolab.trans.PureLin()])
net = neurolab.net.newelm(minmax,[4,2,1],[neurolab.trans.TanSig(),neurolab.trans.PureLin(),neurolab.trans.PureLin()])
net.trainf = neurolab.train.train_rprop
In [36]:
error = net.train(input_train, target_train, epochs=500, show=100)
In [12]:
fig=plt.figure()
plt.plot(error)
plt.show()
In [37]:
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 [38]:
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 [ ]: