Exemplo n.º 1
0
    def get_projection_gradient(self, data, params):

        (X1, X2) = data
        zmuvX1 = get_zm_uv(X1)
        zmuvX2 = get_zm_uv(X2)

        return (zmuvX1.T, zmuvX2.T)
Exemplo n.º 2
0
    def get_projected(self, data, params):

        (X1, X2) = data
        (Phi1, Phi2) = params

        # Get empirical covariance matrices
        zmuvX1 = get_zm_uv(X1)
        zmuvX2 = get_zm_uv(X2)

        # Get projected data
        XPhi1 = np.dot(zmuvX1, Phi1)
        XPhi2 = np.dot(zmuvX2, Phi2)

        # Get gram matrices
        S1 = np.dot(XPhi1.T, XPhi1)
        S2 = np.dot(XPhi2.T, XPhi2)

        # Get normalizers
        inv_srqt1 = get_svd_power(S1, -0.5)
        inv_srqt2 = get_svd_power(S2, -0.5)

        # Get normalized
        normed1 = np.dot(Phi1, inv_sqrt1)
        normed2 = np.dot(Phi2, inv_sqrt2)

        return (normed1, normed2)
Exemplo n.º 3
0
    def get_residuals(self, data, params):

        (Phi1, Phi2) = params
        (X1, X2) = data
        zmuvX1 = get_zm_uv(X1)
        zmuvX2 = get_zm_uv(X2)
        XPhi1 = np.dot(zmuvX1, Phi1)
        XPhi2 = np.dot(zmuvX2, Phi2)

        return XPhi1 - XPhi2
Exemplo n.º 4
0
    def get_gradient(self, data, params):

        residuals = self.get_residuals(data, params)
        (X1, X2) = data
        N = X1.shape[0]
        zmuvX1 = get_zm_uv(X1)
        zmuvX2 = get_zm_uv(X2)
        grad1 = np.dot(zmuvX1.T, residuals) / N
        grad2 = np.dot(zmuvX2.T, -residuals) / N

        return (grad1, grad2)
Exemplo n.º 5
0
    def run(self):

        printerval = self.num_data / 10

        for t in range(self.num_data):

            zipped = zip(self.agvs, self.servers)

            for (agv, ds) in zipped:
                agv.set_data(ds.get_data())

            if self.delay is None or t % self.delay == 0:
                XPhis = [agv.get_projected() for agv in self.agvs]

                for agv in self.agvs:
                    for (n, XPhi) in enumerate(XPhis):
                        agv.update_neighbor_state(n, XPhi)

            (self.Phis,
             new_tccs) = unzip([agv.get_update() for agv in self.agvs])
            self.tccs.append(new_tccs)

            if False:  #t % printerval == 0:
                print('tccs', new_tccs)

        zipped = zip(self.Phis, self.loaders)
        XPhis = [np.dot(get_zm_uv(dl.get_data()), Phi) for (Phi, dl) in zipped]
        tcc_mats = [
            np.dot(XPhis[n].T, XPhis[m]) for n in range(self.num_views)
            for m in range(n, self.num_views)
        ]
        tccs = [np.trace(tccm) / self.k for tccm in tcc_mats]

        print(tccs)
Exemplo n.º 6
0
    def get_prediction(self, data, params):

        return np.dot(get_zm_uv(data), params)
Exemplo n.º 7
0
    def get_batch(self):

        return get_zm_uv(self.batch)