Пример #1
0
    def _transform_observation_data(
        self, observation_data: List[ObservationData]
    ) -> Any:  # TODO(jej): Make return type parametric
        """Apply terminal transform to given observation data and return result.

        Converts a set of observation data to a tuple of
            - an (n x m) array of means
            - an (n x m x m) array of covariances
        """
        try:
            return observation_data_to_array(observation_data=observation_data)
        except (KeyError, TypeError):  # pragma: no cover
            raise ValueError("Invalid formatting of observation data.")
Пример #2
0
 def testObservationDataToArray(self):
     outcomes = ["a", "b", "c"]
     obsd = ObservationData(
         metric_names=["c", "a", "b"],
         means=np.array([1, 2, 3]),
         covariance=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
     )
     Y, Ycov = observation_data_to_array(outcomes=outcomes,
                                         observation_data=[obsd])
     self.assertTrue(np.array_equal(Y, np.array([[2, 3, 1]])))
     self.assertTrue(
         np.array_equal(Ycov, np.array([[[5, 6, 4], [8, 9, 7], [2, 3,
                                                                1]]])))
Пример #3
0
    def get_training_data(
        self,
        experiment: Experiment,
        map_data: MapData,
        keep_every_k_per_arm: Optional[int] = None,
    ) -> EarlyStoppingTrainingData:
        """Processes the raw (untransformed) training data into arrays for
        use in modeling.

        Args:
            experiment: Experiment that contains the data.
            map_data: The MapData from the experiment, as can be obtained by
                via `_check_validity_and_get_data`.
            keep_every_k_per_arm Subsample the learning curve by keeping every
                kth entry. Useful for limiting training data for modeling.

        Returns:
            An `EarlyStoppingTrainingData` that contains training data arrays X, Y,
                and Yvar + a list of arm names.
        """
        if keep_every_k_per_arm is not None:
            map_data = _subsample_map_data(
                map_data=map_data, keep_every_k_per_arm=keep_every_k_per_arm)
        observations = observations_from_map_data(experiment=experiment,
                                                  map_data=map_data,
                                                  map_keys_as_parameters=True)
        obs_features, obs_data, arm_names = _unpack_observations(observations)
        parameters = list(experiment.search_space.parameters.keys())
        outcome = not_none(
            experiment.optimization_config).objective.metric_names[0]
        X = observation_features_to_array(parameters=parameters +
                                          list(map_data.map_keys),
                                          obsf=obs_features)
        Y, Yvar = observation_data_to_array(outcomes=[outcome],
                                            observation_data=obs_data)
        return EarlyStoppingTrainingData(X=X,
                                         Y=Y,
                                         Yvar=Yvar,
                                         arm_names=arm_names)