def nested_stf(dataset, cur_fold, r, lr, num_iter): # valid_error = {} # out = [] # for cur_fold in range(5): # valid_error = {} train, test = get_train_test(dataset, num_folds=num_folds, fold_num=cur_fold) #train, valid = train_test_split(train, test_size=0.2, random_state=0) valid = train[int(0.8*len(train)):].copy() train = train[:int(0.8 * len(train))].copy() valid_gt = valid[:, 1:, :, :] test_gt = test[:, 1:, :, :] # print ("fold: ", cur_fold, " num_latent: ", r, " lr: ", lr, " num_iter: ", num_iter) #for valid data valid_copy = valid.copy() valid_copy[:, 1:, :, :] =np.NaN train_valid = np.concatenate([train, valid_copy]) H, A, D, T = stf_4dim(tensor=train_valid, r=r, lr=lr, num_iter=num_iter) valid_pred = np.einsum("Hr, Ar, Dr, Tr ->HADT", H, A, D, T)[len(train):, 1:, :, :] valid_error = {APPLIANCE_ORDER[i+1]:mean_absolute_error(valid_pred[:, i,:,:].flatten(), valid_gt[:, i, :, :].flatten()) for i in range(valid_pred.shape[1])} #for test data test_copy = test.copy() test_copy[:, 1:, :, :] =np.NaN train_test = np.concatenate([train, test_copy]) H, A, D, T = stf_4dim(tensor=train_test, r=r, lr=lr, num_iter=num_iter) test_pred = np.einsum("Hr, Ar, Dr, Tr ->HADT", H, A, D, T)[len(train):, 1:, :, :] test_error = {APPLIANCE_ORDER[i+1]:mean_absolute_error(test_pred[:, i,:,:].flatten(), test_gt[:, i, :, :].flatten()) for i in range(test_pred.shape[1])} return valid_pred, valid_error, valid_gt, test_pred, test_error, test_gt
def stf(r=2, lr=1, num_iter=100): out = [] for cur_fold in range(5): train, test = get_train_test(num_folds=num_folds, fold_num=cur_fold) test_copy = test.copy() test_copy[:, 1:, :, :] = np.NaN train_test = np.concatenate([train, test_copy]) H, A, D, T = stf_4dim(tensor=train_test, r=r, lr=lr, num_iter=num_iter) pred = np.einsum("Hr, Ar, Dr, Tr ->HADT", H, A, D, T)[len(train):, 1:, :, :] out.append(pred) return np.concatenate(out)
def stf(dataset, cur_fold, r=2, lr=1, num_iter=100): num_folds = 5 train, test = get_train_test(dataset, num_folds=num_folds, fold_num=cur_fold) test_copy = test.copy() test_copy[:, 1:, :, :] = np.NaN train_test = np.concatenate([train, test_copy]) H, A, D, T = stf_4dim(tensor=train_test, r=r, lr=lr, num_iter=num_iter) pred = np.einsum("Hr, Ar, Dr, Tr ->HADT", H, A, D, T)[len(train):, 1:, :, :] return pred