def prediction(self, xtest, weighted=True, bestm=2, Y_prev=[]): ypred = np.empty([np.shape(xtest)[0], self.ndim]) for n in range(0, np.shape(xtest)[0], 1): w = np.empty([self.M, 1]) dw = np.empty([self.M, 1]) dc = np.empty([self.M, 1]) dcw = np.empty([self.M, 1]) yploc = np.empty([self.M, self.ndim]) var = np.empty([self.M, 1]) for k in range(0, self.M, 1): try: c = self.LocalData[k][2] #1x2 d = self.LocalData[k][3] xW = np.dot((xtest[n] - c), self.W) # 1x2 X 2x2 w[k] = np.exp(-0.5 * np.dot(xW, np.transpose( (xtest[n] - c)))) yploc[k], var[k] = self.Models[k].predict(xtest[n].reshape( 1, 2)) dw[k] = np.dot( yploc[k] - Y_prev[-1].reshape(1, self.ndim), np.transpose(yploc[k] - Y_prev[-1].reshape(1, self.ndim))) # dw[k] = np.linalg.norm(circstats.difference(yploc[k],Y_prev)) # dc[k] = np.dot(yploc[k]-d,np.transpose(yploc[k]-d)) # dcw[k] = np.dot(d-Y_prev,np.transpose(d-Y_prev)) except: w[k] = 0 dw[k] = float("inf") dc[k] = float("inf") # dcw[k] = float("inf") # var[k] = float("inf") pass if weighted: if bestm > self.M: h = self.M else: h = bestm else: h = 1 s = 10 wv = w * np.exp(-s * dw) / var wv = np.nan_to_num(wv) wv = wv.reshape(self.M, ) varmin = np.min(var) # minimum variance of local predictions # wv = wv/np.sum(wv) thresh = 0 # 0 uses all models "Select for best models" if np.max(wv) < thresh: ind = wv == np.max(wv) else: ind = wv > thresh "Weighted circular mean of predictions" ypred[n] = circstats.mean(yploc, axis=0, w=wv.reshape(len(wv), 1)) "Normal Weighted mean" # ypred[n] = np.dot(np.transpose(wv[ind]), yploc[ind]) / np.sum(wv[ind]) "Debug Prints" # print("wv:" + str(wv)) # print("w:" + str(w)) # print("dw:" + str(dw)) # print("dc:" + str(dc)) # print("var:" + str(var)) # print("dcw:" + str(dcw)) # print("yploc:" + str(yploc)) return ypred, varmin
def prediction(self, xtest, weighted=True, bestm=2, Y_prev=[]): ypred = np.empty([np.shape(xtest)[0], self.ndim]) # print(Y_prev) # print(self.M) for n in range(0, np.shape(xtest)[0], 1): w = np.empty([self.M, 1]) dw = np.empty([self.M, 1]) dc = np.empty([self.M, 1]) dcw = np.empty([self.M, 1]) yploc = np.empty([self.M, self.ndim]) var = np.empty([self.M, 1]) for k in range(0, self.M, 1): c = self.LocalData[k][2] #1x2 d = self.LocalData[k][3] xW = np.dot((xtest[n] - c), self.W) # 1x2 X 22 # print(xW.shape) # print(self.W.shape) # print(xtest[n].shape) # print(c.shape) w[k] = np.exp(-0.5 * np.dot(xW, np.transpose((xtest[n] - c)))) # print(w[k]) yploc[k], var[k] = self.Models[k].predict(xtest[n].reshape( 1, 2)) dw[k] = np.dot( yploc[k] - Y_prev[-1].reshape(1, self.ndim), np.transpose(yploc[k] - Y_prev[-1].reshape(1, self.ndim))) # try: # # print(k) # c = self.LocalData[k][2] #1x2 # d = self.LocalData[k][3] # # d = self.UpdateY[k][-1] # # dd = self.LocalData[k][1][-1] # # dp = Y_prev # # c = np.mean(self.Models[k].Z,axis = 0) # # xW = np.dot((xtest[n]-c),self.W[k]) # 1x2 X 2x2 # # xW = self.Models[k].kern.K(xtest[n],c) # xW = np.dot((xtest[n]-c),self.W) # 1x2 X 2x2 ## print(xW) # w[k] = np.exp(-0.5*np.dot(xW,np.transpose((xtest[n]-c)))) # print(w[k]) ## w[k] = self.Models[k].kern.K(xtest[n].reshape(1,2),c.reshape(1,2)) # yploc[k], var[k] = self.Models[k].predict(xtest[n].reshape(1,2)) ## print(yploc[k]) ## Ypost = np.vstack((Y_prev,yploc[k])) ## print(Ypost) ## Ypost = np.unwrap(Ypost,axis=0) ## print(Ypost) # ## yploc[k]= Ypost[-1].reshape(1,2) ## print(yploc[k]) ## print(var[k]) ## dw[k] = np.exp(-0.5*np.dot(yploc[k]-Y_prev,np.transpose(yploc[k]-Y_prev))) # # dc[k] = np.exp(-0.5*np.dot(yploc[k]-d,np.transpose(yploc[k]-d))) # # dcw[k] = np.exp(-0.5*np.dot(d-Y_prev,np.transpose(d-Y_prev))) # dw[k] = np.dot(yploc[k]-Y_prev[-1].reshape(1,self.ndim),np.transpose(yploc[k]-Y_prev[-1].reshape(1,self.ndim))) ## dw[k] = np.linalg.norm(circstats.difference(yploc[k],Y_prev)) ## dc[k] = np.dot(yploc[k]-d,np.transpose(yploc[k]-d)) ## dcw[k] = np.dot(d-Y_prev,np.transpose(d-Y_prev)) # except: # w[k] = 1 # dw[k] = float("inf") # dc[k] = float("inf") # pass # # # # yploc = yploc-2*np.pi # yploc[yploc<0] += 2*np.pi # yploc = np.unwrap(yploc) # c = np.mean(self.mdrift.Z,axis = 0) # xW = np.dot((xtest[n]-c),self.W) # 1x2 X 2x2 # w[k+1] = np.exp(-0.5*np.dot(xW,np.transpose((xtest[n]-c)))) # yploc[k+1], var[k+1] = self.mdrift.predict(xtest[n].reshape(1,2)) if weighted: if bestm > self.M: h = self.M else: h = bestm else: h = 1 # wv = np.multiply(w, np.exp(-var)) # wv = np.exp(-var) # wv = w/var wv = w * np.exp(-10 * dw) / var # wv = w*dc*np.exp(-0.5*var) # wv = w/(var*dc*dw) # wv = w*np.exp(-10*dc)/var # wv = w*np.exp(-dcw)/(var) # wv = w/(var*(dcw+1e4)) wv = np.nan_to_num(wv) # wv = dw/var # wv = w/(dw*var) # wv = w # wv = w.reshape(self.M,1) wv = wv.reshape(self.M, ) varmin = np.min(var) # wv = w[w>0.9] thresh = 0 # wv = wv/np.sum(wv) if np.max(wv) < thresh: # ind = np.argmax(wv) ind = wv == np.max(wv) else: ind = wv > thresh # ind = np.argmax(wv) # print(np.argmax(wv)) # print(ind) # print(wv.reshape(self.M,)>0.9) # ind = np.argpartition(wv[:,0], -h)[-h:] # print(ind) # ypred[n] = np.dot(np.transpose(wv[wv>0.8]), yploc[wv>0.8]) / np.sum(wv[wv>0.8]) # ypred[n] = np.dot(np.transpose(wv[ind]), yploc[ind]) / np.sum(wv[ind]) # print(ypred) # print(wv.shape) # print(yploc.shape) # print(yploc[0]) # yploc[yploc<0] += 2*np.pi # yploc = np.unwrap(yploc) # ypred[n] = self.circular_mean(wv[ind].reshape(np.sum(ind),1),yploc[ind]) # ypred[n] = circstats.mean(yploc[ind],axis = 0,w = wv[ind]) ypred[n] = circstats.mean(yploc, axis=0, w=wv.reshape(len(wv), 1)) # ypred[n] = np.dot(np.transpose(wv[ind]), yploc[ind]) / np.sum(wv[ind]) # ypred[n] = ypred[n] + 2*np.pi # ypred[n][ypred[n]<0] += 2*np.pi # ypred[n][ypred[n]>2*np.pi] -= 2*np.pi # delta = ypred[n]-Y_prev ## new = Y_prev+delta*np.exp(-5*np.min(var)) # new = Y_prev+delta*np.max(wv) # ypred[n] = new # ypred[n] = np.array([self.circular_mean(wv,yploc[:,0]),self.circular_mean(wv,yploc[:,1])]) # print("wv:" + str(wv)) # print("w:" + str(w)) # print("dw:" + str(dw)) ## print("dc:" + str(dc)) # print("var:" + str(var)) ## print("dcw:" + str(dcw)) # ## print(ind) # # print(yploc[ind]) # print(ypred[n]) # print(dw) return ypred, varmin
def prediction(self,xtest, weighted = True, bestm = 3, Y_prev = []): ypred = np.empty([np.shape(xtest)[0], self.ndim]) for n in range(0, np.shape(xtest)[0], 1): w = np.empty([self.M, 1]) dw = np.empty([self.M, 1]) dc = np.empty([self.M, 1]) dcw = np.empty([self.M, 1]) yploc = np.empty([self.M,self.ndim]) #xploc = np.empty([self.M,self.xdim]) var = np.empty([self.M,1]) for k in range(0, self.M, 1): try: c = self.LocalData[k][2] #1x2 d = self.LocalData[k][3] xW = np.dot((xtest[n]-c),self.W) # 1x2 X 2x2 w[k] = np.exp(-0.5*np.dot(xW,np.transpose((xtest[n]-c)))) yploc[k], var[k] = self.Models[k].predict(xtest[n].reshape(1,self.xdim)) if Y_prev == []: pass else: dcw[k] = np.dot(d-Y_prev[-1].reshape(1,self.ndim),np.transpose(d-Y_prev[-1].reshape(1,self.ndim))) except: w[k] = 0 dcw[k] = float("inf") pass if weighted: if bestm > self.M: h = self.M else: h = bestm else: h = 1 self.w = w s = 0 if Y_prev == []: wv = w/var else: wv = w*np.exp(-s*dcw)/var wv =np.nan_to_num(wv) wv = wv.reshape(self.M,) varmin = np.min(var) # minimum variance of local predictions thresh = 0 # 0 uses all models "Select for best models" # if np.max(wv) < thresh: # ind = wv ==np.max(wv) # else: # ind = wv > thresh ind = np.argpartition(wv, -h)[-h:] # ypred[n] = np.dot(np.transpose(wv[ind]), yploc[ind]) / np.sum(wv[ind]) if self.encode: "Normal Weighted mean" ypred[n] = np.dot(np.transpose(wv[ind]), yploc[ind]) / np.sum(wv[ind]) else: "Weighted circular mean of predictions" ypred[n] = circstats.mean(yploc,axis = 0,w = wv.reshape(len(wv),1)) "Debug Prints" #print("wv:" + str(wv)) #print("w:" + str(w)) # print("dw:" + str(dw)) # print("dc:" + str(dc)) #print("var:" + str(var)) #print("dcw:" + str(dcw)) #print("d:" + str(d)) #print("Yprev:" + str(Y_prev[-1].reshape(1,self.ndim))) # print("yploc:" + str(yploc)) #print("xploc:" + str(xploc)) #print("ypred:" + str(ypred)) return ypred, varmin