Пример #1
0
 def _get_model_training_output(
     self,
     graph: Graph,
 ) -> Optional[np.ndarray]:
     """Returns training output tuple."""
     if self.is_multilabel_prediction_task():
         return graph.get_one_hot_encoded_node_types()
     if self.is_binary_prediction_task():
         return graph.get_boolean_node_type_ids()
     return graph.get_single_label_node_type_ids()
Пример #2
0
    def _evaluate(
        self,
        graph: Graph,
        train: Graph,
        test: Graph,
        support: Optional[Graph] = None,
        node_features: Optional[Union[pd.DataFrame, np.ndarray,
                                      List[Union[str, pd.DataFrame,
                                                 np.ndarray]]]] = None,
        node_type_features: Optional[Union[pd.DataFrame, np.ndarray,
                                           List[Union[str, pd.DataFrame,
                                                      np.ndarray]]]] = None,
        edge_features: Optional[Union[pd.DataFrame, np.ndarray,
                                      List[Union[str, pd.DataFrame,
                                                 np.ndarray]]]] = None,
        subgraph_of_interest: Optional[Graph] = None,
        random_state: int = 42,
        verbose: bool = True,
    ) -> List[Dict[str, Any]]:
        """Return model evaluation on the provided graphs."""
        train_size = train.get_number_of_known_node_types(
        ) / graph.get_number_of_known_node_types()

        if self.is_multilabel_prediction_task():
            labels = graph.get_one_hot_encoded_node_types()
        elif self.is_binary_prediction_task():
            labels = graph.get_boolean_node_type_ids()
        else:
            labels = graph.get_single_label_node_type_ids()

        performance = []
        for evaluation_mode, evaluation_graph in (
            ("train", train),
            ("test", test),
        ):
            prediction_probabilities = self.predict_proba(
                evaluation_graph,
                support=support,
                node_features=node_features,
                node_type_features=node_type_features,
                edge_features=edge_features)

            if self.is_binary_prediction_task():
                predictions = prediction_probabilities
            elif self.is_multilabel_prediction_task():
                predictions = prediction_probabilities > 0.5
            else:
                predictions = prediction_probabilities.argmax(axis=-1)

            mask = evaluation_graph.get_known_node_types_mask()
            prediction_probabilities = prediction_probabilities[mask]
            predictions = predictions[mask]
            labels_subset = labels[mask]

            performance.append({
                "evaluation_mode":
                evaluation_mode,
                "train_size":
                train_size,
                "known_nodes_number":
                evaluation_graph.get_number_of_known_node_types(),
                **self.evaluate_predictions(
                    labels_subset,
                    predictions,
                ),
                **self.evaluate_prediction_probabilities(
                    labels_subset,
                    prediction_probabilities,
                ),
            })

        return performance