Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
    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