In [1]:
from __future__ import print_function, division
from nilmtk import DataSet, HDFDataStore
from os.path import join
import matplotlib.pyplot as plt
from matplotlib import rcParams
import math
from nilmtk.metrics import f1_score # metrics is actually different; need to look at this
from nilmtk.metrics import rms_error_power
from nilmtk.metrics import mean_normalized_error_power
from nilmtk.disaggregate import fhmm_exact # OK, only different in what is printed to screen (and this is diagonal covariance matrix)
In [2]:
building_number = 1
ds = DataSet("/data/REDD/redd.h5")
In [3]:
train = DataSet("/data/REDD/redd.h5")
test = DataSet("/data/REDD/redd.h5")
In [4]:
elec = train.buildings[building_number].elec
In [6]:
mains = elec.mains()
df_all = mains.power_series_all_data() #df_all has a bunch of NaNs
df_all_noNan = df_all.dropna()
a = df_all_noNan.keys()
middleTime = a[int(math.floor(a.size/2))]
middleTimeStr = "%d-%02d-%02d %02d:%02d:%02d" % (middleTime.year, middleTime.month, middleTime.day, middleTime.hour, middleTime.minute, middleTime.second)
In [7]:
middleTimeStr
Out[7]:
In [8]:
train.set_window(end=middleTimeStr)
test.set_window(start=middleTimeStr)
train_elec = train.buildings[building_number].elec
test_elec = test.buildings[building_number].elec
top_train_elec = train_elec.submeters().select_top_k(k=5)
In [9]:
fhmm = fhmm_exact.FHMM() #mk change this later to default
fhmm.train(top_train_elec, sample_period=60, resample=True)
output = HDFDataStore("/data/REDD/449.h5", 'w')
fhmm.disaggregate(test_elec.mains(), output, sample_period=60, resample=True)
output.close()
In [10]:
%matplotlib inline
In [11]:
disag = DataSet("/data/REDD/449.h5") #load FHMM prediction
disag_elec = disag.buildings[building_number].elec
f1 = f1_score(disag_elec, test_elec)
f1.index = disag_elec.get_labels(f1.index)
f1.plot(kind='barh')
Out[11]:
In [12]:
rms = rms_error_power(disag_elec, elec)
In [13]:
rms
Out[13]:
In [14]:
mne = mean_normalized_error_power(disag_elec, elec)
In [15]:
mne
Out[15]:
In [ ]: