|
|
@@ -77,8 +77,6 @@ class GraphKernel(BaseEstimator): #, ABC): |
|
|
|
# Clear any prior attributes stored on the estimator, # @todo: unless warm_start is used; |
|
|
|
self.clear_attributes() |
|
|
|
|
|
|
|
# X = check_array(X, accept_sparse=True) |
|
|
|
|
|
|
|
# Validate parameters for the transformer. |
|
|
|
self.validate_parameters() |
|
|
|
|
|
|
@@ -386,35 +384,58 @@ class GraphKernel(BaseEstimator): #, ABC): |
|
|
|
self.n_jobs = kwargs.get('n_jobs', multiprocessing.cpu_count()) |
|
|
|
self.normalize = kwargs.get('normalize', True) |
|
|
|
self.verbose = kwargs.get('verbose', 2) |
|
|
|
self.copy_graphs = kwargs.get('copy_graphs', True) |
|
|
|
self.save_unnormed = kwargs.get('save_unnormed', True) |
|
|
|
self.validate_parameters() |
|
|
|
|
|
|
|
# If the inputs is a list of graphs. |
|
|
|
if len(graphs) == 1: |
|
|
|
if not isinstance(graphs[0], list): |
|
|
|
raise Exception('Cannot detect graphs.') |
|
|
|
elif len(graphs[0]) == 0: |
|
|
|
raise Exception('The graph list given is empty. No computation was performed.') |
|
|
|
else: |
|
|
|
self._graphs = [g.copy() for g in graphs[0]] # @todo: might be very slow. |
|
|
|
if self.copy_graphs: |
|
|
|
self._graphs = [g.copy() for g in graphs[0]] # @todo: might be very slow. |
|
|
|
else: |
|
|
|
self._graphs = graphs |
|
|
|
self._gram_matrix = self._compute_gram_matrix() |
|
|
|
self._gram_matrix_unnorm = np.copy(self._gram_matrix) |
|
|
|
|
|
|
|
if self.save_unnormed: |
|
|
|
self._gram_matrix_unnorm = np.copy(self._gram_matrix) |
|
|
|
if self.normalize: |
|
|
|
self._gram_matrix = normalize_gram_matrix(self._gram_matrix) |
|
|
|
return self._gram_matrix, self._run_time |
|
|
|
|
|
|
|
elif len(graphs) == 2: |
|
|
|
# If the inputs are two graphs. |
|
|
|
if self.is_graph(graphs[0]) and self.is_graph(graphs[1]): |
|
|
|
kernel = self._compute_single_kernel(graphs[0].copy(), graphs[1].copy()) |
|
|
|
if self.copy_graphs: |
|
|
|
G0, G1 = graphs[0].copy(), graphs[1].copy() |
|
|
|
else: |
|
|
|
G0, G1 = graphs[0], graphs[1] |
|
|
|
kernel = self._compute_single_kernel(G0, G1) |
|
|
|
return kernel, self._run_time |
|
|
|
|
|
|
|
# If the inputs are a graph and a list of graphs. |
|
|
|
elif self.is_graph(graphs[0]) and isinstance(graphs[1], list): |
|
|
|
g1 = graphs[0].copy() |
|
|
|
g_list = [g.copy() for g in graphs[1]] |
|
|
|
kernel_list = self._compute_kernel_list(g1, g_list) |
|
|
|
if self.copy_graphs: |
|
|
|
g1 = graphs[0].copy() |
|
|
|
g_list = [g.copy() for g in graphs[1]] |
|
|
|
kernel_list = self._compute_kernel_list(g1, g_list) |
|
|
|
else: |
|
|
|
kernel_list = self._compute_kernel_list(graphs[0], graphs[1]) |
|
|
|
return kernel_list, self._run_time |
|
|
|
|
|
|
|
elif isinstance(graphs[0], list) and self.is_graph(graphs[1]): |
|
|
|
g1 = graphs[1].copy() |
|
|
|
g_list = [g.copy() for g in graphs[0]] |
|
|
|
kernel_list = self._compute_kernel_list(g1, g_list) |
|
|
|
if self.copy_graphs: |
|
|
|
g1 = graphs[1].copy() |
|
|
|
g_list = [g.copy() for g in graphs[0]] |
|
|
|
kernel_list = self._compute_kernel_list(g1, g_list) |
|
|
|
else: |
|
|
|
kernel_list = self._compute_kernel_list(graphs[1], graphs[0]) |
|
|
|
return kernel_list, self._run_time |
|
|
|
|
|
|
|
else: |
|
|
|
raise Exception('Cannot detect graphs.') |
|
|
|
|
|
|
|