class KDEIsomapGen(GenBase): # TODO: Isomap has no inverse transformation, maybe we can solve that in the future. # TODO: Look the the work: Inverse Methods for Manifold Learning from Kathleen Kay def __init__(self, kernel="gaussian", bandwidth=0.1, n_components=None, n_neighbors=20): super().__init__() self.transformer = Isomap(n_neighbors, n_components=n_components) self.bandwidth = bandwidth self.kernel = kernel self.manifold = None raise NotImplementedError def fit(self, x): x_pca = self.transformer.fit_transform(x) self.manifold = KDEGen(kernel=self.kernel, bandwidth=self.bandwidth).fit(x_pca) return self def sample_radius(self, x_exp, n_min_kernels=20, r=None, n_samples=1, random_state=None): x_exp_pca = self.transformer.transform(x_exp) x_sample_pca = self.manifold.sample_radius(x_exp_pca, n_min_kernels=n_min_kernels, r=r, n_samples=n_samples, random_state=random_state) x_sample = self.transformer.inverse_transform(x_sample_pca) return x_sample def sample(self, n_samples=1, random_state=None): x_sample_pca = self.manifold.sample(n_samples=n_samples, random_state=random_state) x_sample = self.transformer.inverse_transform(x_sample_pca) return x_sample