Example #1
0
 def update_h(self):
     print self._method
     if self._method == 'pca':
        self.H = np.dot(pinv(self.W), self.data)
            
     if self._method == 'nmf':
         mdl = NMF(self.data, num_bases=self._num_bases)
         mdl.W = self.W
         mdl.factorize(compute_w=False, niter=50)
         self.H = mdl.H.copy()
     
     if self._method == 'aa':
         mdl = AA(self.data, num_bases=self._num_bases)
         mdl.W = self.W
         mdl.factorize(compute_w=False)
         self.H = mdl.H.copy()
Example #2
0
    def update_w(self):
        """ compute new W """
        def select_hull_points(data, n=3):
            """ select data points for pairwise projections of the first n
            dimensions """

            # iterate over all projections and select data points
            idx = np.array([])

            # iterate over some pairwise combinations of dimensions
            for i in combinations(range(n), 2):
                # sample convex hull points in 2D projection
                convex_hull_d = quickhull(data[i, :].T)

                # get indices for convex hull data points
                idx = np.append(idx, vq(data[i, :], convex_hull_d.T))
                idx = np.unique(idx)

            return np.int32(idx)

        # determine convex hull data points using either PCA or random
        # projections
        method = 'randomprojection'
        if method == 'pca':
            pcamodel = PCA(self.data)
            pcamodel.factorize(show_progress=False)
            proj = pcamodel.H
        else:
            R = np.random.randn(self._base_sel, self._data_dimension)
            proj = np.dot(R, self.data)

        self._hull_idx = select_hull_points(proj, n=self._base_sel)
        aa_mdl = AA(self.data[:, self._hull_idx], num_bases=self._num_bases)

        # determine W
        aa_mdl.factorize(niter=50,
                         compute_h=True,
                         compute_w=True,
                         compute_err=True,
                         show_progress=False)

        self.W = aa_mdl.W
        self._map_w_to_data()
Example #3
0
    def updateW(self):
        def selectHullPoints(data, n=3):
            """ select data points for pairwise projections of the first n
			dimensions """

            # iterate over all projections and select data points
            idx = np.array([])

            # iterate over some pairwise combinations of dimensions
            for i in combinations(range(n), 2):

                # sample convex hull points in 2D projection
                convex_hull_d = quickhull(data[i, :].T)

                # get indices for convex hull data points
                idx = np.append(idx, vq(data[i, :], convex_hull_d.T))
                idx = np.unique(idx)

            return np.int32(idx)

        # determine convex hull data points only if the total
        # amount of available data is >50
        #if self.data.shape[1] > 50:
        pcamodel = PCA(self.data, show_progress=self._show_progress)
        pcamodel.factorize()
        self._hull_idx = selectHullPoints(pcamodel.H, n=self._base_sel)

        #else:
        #	self._hull_idx = range(self.data.shape[1])

        aa_mdl = AA(self.data[:, self._hull_idx],
                    num_bases=self._num_bases,
                    niter=self._niter,
                    show_progress=self._show_progress,
                    compW=True)

        # initialize W, H, and beta
        aa_mdl.initialization()

        # determine W
        aa_mdl.factorize()

        self.W = aa_mdl.W