In [18]:
%matplotlib inline
import sys
import os
sys.path.append(os.path.join(os.pardir,os.pardir))
from disaggregator import GreenButtonDatasetAdapter as gbda
from disaggregator import fhmm
import matplotlib.pyplot as plt
import numpy as np
In [8]:
with open("../../../xml_data.xml",'r') as f:
trace = gbda.get_trace(f.read())
In [14]:
plt.plot(trace.series[1000:2000])
Out[14]:
In [116]:
means = np.array([200,400,2000,2500])
ons = np.array([.9,.9,.9,.9])
offs = np.array([.9,.9,.9,.9])
pis = np.array([.5,.5,.5,.5])
covs_on = np.array([50,100,100,100])
covs_off = np.array([20,20,20,20])
def get_fhmm(means,ons,offs,pis,covs_on,covs_off):
hmms = {}
for i,(mean,on,off,cov_on,cov_off,pi) in enumerate(zip(means,ons,offs,covs_on,covs_off,pis)):
pi_prior = np.array([1 - pi,pi])
a_prior = np.array([[off, 1 - off],[1 - on,on]])
mean_prior = np.array([0,mean])[:,np.newaxis]
cov_prior = np.array([cov_on,cov_off])[:,np.newaxis,np.newaxis]
hmms["device_{}".format(i)] = fhmm.init_HMM(pi_prior,a_prior,mean_prior,cov_prior)
appliance_hmm,_,_ = fhmm.generate_FHMM_from_HMMs(hmms)
return appliance_hmm
appliance_fhmm,a,b = get_fhmm(means,ons,offs,pis,covs_on,covs_off)
In [118]:
def get_combinations(n):
combos = []
for i in range(2**n):
combo = []
for j in range(n-1,-1,-1):
combo.append(int(2**j<=i))
if 2**j <= i:
i = i - 2**j
combos.append(combo)
return np.array(combos)
def get_states(individual_means,appliance_fhmm,use):
states = appliance_fhmm.predict(use)
combinations = get_combinations(individual_means.shape[0])
state_means = []
for combo in combinations:
state_means.append(np.sum(individual_means * combo))
decoded_state_key = sorted(zip(state_means,combinations), key = lambda x: x[0])
decoded_states = [decoded_state_key[state][1] for state in states]
return np.array(decoded_states)
use = trace.series.values.astype(float)[:,np.newaxis]
decoded_states = get_states(means,appliance_fhmm,use)
plt.plot(np.sum(decoded_states * means,axis=1)[1000:2000])
print np.sum((decoded_states * means)[1000:2000],axis=0)
In [99]:
Out[99]:
In [ ]: