def factorize(self, show_progress=False, compute_w=True, compute_h=True, compute_err=True, niter=1): """ Factorize s.t. WH = data Parameters ---------- show_progress : bool print some extra information to stdout. compute_h : bool iteratively update values for H. compute_w : bool iteratively update values for W. compute_err : bool compute Frobenius norm |data-WH| after each update and store it to .ferr[k]. Updated Values -------------- .W : updated values for W. .H : updated values for H. .ferr : Frobenius norm |data-WH|. """ AA.factorize(self, niter=1, show_progress=show_progress, compute_w=compute_w, compute_h=compute_h, compute_err=compute_err)
def factorize(self, show_progress=False, compute_w=True, compute_h=True, compute_err=True, robust_cluster=3, niter=1, robust_nselect=-1): """ Factorize s.t. WH = data Parameters ---------- show_progress : bool print some extra information to stdout. False, default compute_h : bool iteratively update values for H. True, default compute_w : bool iteratively update values for W. default, True compute_err : bool compute Frobenius norm |data-WH| after each update and store it to .ferr[k]. robust_cluster : int, optional set the number of clusters for robust map selection. 3, default robust_nselect : int, optional set the number of samples to consider for robust map selection. -1, default (automatically determine suitable number) Updated Values -------------- .W : updated values for W. .H : updated values for H. .ferr : Frobenius norm |data-WH|. """ self._robust_cluster = robust_cluster self._robust_nselect = robust_nselect if self._robust_nselect == -1: self._robust_nselect = np.round(np.log(self.data.shape[1]) * 2) AA.factorize(self, niter=1, show_progress=show_progress, compute_w=compute_w, compute_h=compute_h, compute_err=compute_err)
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
def factorize(self, show_progress=False, compute_w=True, compute_h=True, compute_err=True, robust_cluster=3, niter=1, robust_nselect=-1): """ Factorize s.t. WH = data Parameters ---------- show_progress : bool print some extra information to stdout. False, default compute_h : bool iteratively update values for H. True, default compute_w : bool iteratively update values for W. default, True compute_err : bool compute Frobenius norm |data-WH| after each update and store it to .ferr[k]. robust_cluster : int, optional set the number of clusters for robust map selection. 3, default robust_nselect : int, optional set the number of samples to consider for robust map selection. -1, default (automatically determine suitable number) Updated Values -------------- .W : updated values for W. .H : updated values for H. .ferr : Frobenius norm |data-WH|. """ self._robust_cluster = robust_cluster self._robust_nselect = robust_nselect if self._robust_nselect == -1: self._robust_nselect = np.round(np.log(self.data.shape[1])*2) AA.factorize(self, niter=1, show_progress=show_progress, compute_w=compute_w, compute_h=compute_h, compute_err=compute_err)