def METHOD_NAME(self, exp_matrix=None):
    from ..algorithm.dim_reduce import low_variance, factor_analysis, pca, t_sne, u_map
    self._check_params()
    exp_matrix = exp_matrix if exp_matrix is not None else self.data.exp_matrix
    if self.method == 'low_variance':
        x_reduce = low_variance(exp_matrix, self.min_variance)
    elif self.method == 'factor_analysis':
        x_reduce = factor_analysis(exp_matrix, self.n_pcs)
    elif self.method == 'tsen':
        x_reduce = t_sne(exp_matrix, self.n_pcs, self.n_iter)
    elif self.method == 'umap':
        x_reduce = u_map(exp_matrix, self.n_pcs, self.n_neighbors, self.min_dist)
    else:
        pca_res = pca(exp_matrix, self.n_pcs)
        x_reduce = pca_res['x_pca']
        # self.result.variance_ratio = pca_res['variance_ratio']
        # self.result.variance_pca = pca_res['variance']
        # self.result.pcs = pca_res['pcs']
    self.result = pd.DataFrame(x_reduce)
    return self.result
    # self.add_result(result=self.result, key_added=self.name)