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()
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()
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