Exemplo n.º 1
0
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