Beispiel #1
0
    def fit(
        self,
        Xs: List[Tensor],
        Ys: List[Tensor],
        Yvars: List[Tensor],
        bounds: List[Tuple[float, float]],
        task_features: List[int],
        feature_names: List[str],
        metric_names: List[str],
        fidelity_features: List[int],
        target_fidelities: Optional[Dict[int, float]] = None,
        candidate_metadata: Optional[List[List[TCandidateMetadata]]] = None,
    ) -> None:
        # Ensure that parts of data all have equal lengths.
        validate_data_format(Xs=Xs,
                             Ys=Ys,
                             Yvars=Yvars,
                             metric_names=metric_names)

        # Choose `Surrogate` and undelying `Model` based on properties of data.
        if not self._surrogate:
            self._autoset_surrogate(
                Xs=Xs,
                Ys=Ys,
                Yvars=Yvars,
                task_features=task_features,
                fidelity_features=fidelity_features,
                metric_names=metric_names,
            )

        if isinstance(self.surrogate, ListSurrogate):
            training_data = construct_training_data_list(Xs=Xs,
                                                         Ys=Ys,
                                                         Yvars=Yvars)
        else:
            training_data = construct_single_training_data(Xs=Xs,
                                                           Ys=Ys,
                                                           Yvars=Yvars)

        # Fit the model.
        if self.surrogate_fit_options.get(
                Keys.REFIT_ON_UPDATE,
                True) and not self.surrogate_fit_options.get(
                    Keys.WARM_START_REFITTING, True):
            self.surrogate_fit_options[Keys.STATE_DICT] = None
        self.surrogate.fit(
            # pyre-ignore[6]: Base `Surrogate` expects only single `TrainingData`,
            # but `ListSurrogate` expects a list of them, to `training_data` here is
            # a union of the two.
            training_data=training_data,
            bounds=bounds,
            task_features=task_features,
            feature_names=feature_names,
            fidelity_features=fidelity_features,
            target_fidelities=target_fidelities,
            metric_names=metric_names,
            candidate_metadata=candidate_metadata,
            state_dict=self.surrogate_fit_options.get(Keys.STATE_DICT, None),
            refit=self.surrogate_fit_options.get(Keys.REFIT_ON_UPDATE, True),
        )
Beispiel #2
0
    def fit(
        self,
        Xs: List[Tensor],
        Ys: List[Tensor],
        Yvars: List[Tensor],
        bounds: List[Tuple[float, float]],
        task_features: List[int],
        feature_names: List[str],
        metric_names: List[str],
        fidelity_features: List[int],
        target_fidelities: Optional[Dict[int, float]] = None,
        candidate_metadata: Optional[List[List[TCandidateMetadata]]] = None,
        state_dict: Optional[Dict[str, Tensor]] = None,
        refit: bool = True,
    ) -> None:
        # Ensure that parts of data all have equal lengths.
        validate_data_format(Xs=Xs,
                             Ys=Ys,
                             Yvars=Yvars,
                             metric_names=metric_names)

        # Choose `Surrogate` and undelying `Model` based on properties of data.
        if not self._surrogate:
            self._autoset_surrogate(
                Xs=Xs,
                Ys=Ys,
                Yvars=Yvars,
                task_features=task_features,
                fidelity_features=fidelity_features,
                metric_names=metric_names,
            )

        self.surrogate.fit(
            # pyre-ignore[6]: Base `Surrogate` expects only single `TrainingData`,
            # but `ListSurrogate` expects a list of them, so `training_data` here is
            # a union of the two.
            training_data=self._mk_training_data(Xs=Xs, Ys=Ys, Yvars=Yvars),
            bounds=bounds,
            task_features=task_features,
            feature_names=feature_names,
            fidelity_features=fidelity_features,
            target_fidelities=target_fidelities,
            metric_names=metric_names,
            candidate_metadata=candidate_metadata,
            state_dict=state_dict,
            refit=refit,
        )
Beispiel #3
0
    def fit(
        self,
        Xs: List[Tensor],
        Ys: List[Tensor],
        Yvars: List[Tensor],
        search_space_digest: SearchSpaceDigest,
        metric_names: List[str],
        target_fidelities: Optional[Dict[int, float]] = None,
        candidate_metadata: Optional[List[List[TCandidateMetadata]]] = None,
        state_dict: Optional[Dict[str, Tensor]] = None,
        refit: bool = True,
    ) -> None:
        # Ensure that parts of data all have equal lengths.
        validate_data_format(Xs=Xs,
                             Ys=Ys,
                             Yvars=Yvars,
                             metric_names=metric_names)

        # store search space info for later use (e.g. during generation)
        self._search_space_digest = search_space_digest

        # Choose `Surrogate` and undelying `Model` based on properties of data.
        if not self._surrogate:
            self._autoset_surrogate(
                Xs=Xs,
                Ys=Ys,
                Yvars=Yvars,
                search_space_digest=search_space_digest,
                metric_names=metric_names,
            )

        self.surrogate.fit(
            # pyre-ignore[6]: Base `Surrogate` expects only single `TrainingData`,
            # but `ListSurrogate` expects a list of them, so `training_data` here is
            # a union of the two.
            training_data=self._mk_training_data(Xs=Xs, Ys=Ys, Yvars=Yvars),
            search_space_digest=search_space_digest,
            metric_names=metric_names,
            candidate_metadata=candidate_metadata,
            state_dict=state_dict,
            refit=refit,
        )
Beispiel #4
0
    def fit(
        self,
        Xs: List[Tensor],
        Ys: List[Tensor],
        Yvars: List[Tensor],
        bounds: List[Tuple[float, float]],
        task_features: List[int],
        feature_names: List[str],
        metric_names: List[str],
        fidelity_features: List[int],
        target_fidelities: Optional[Dict[int, float]] = None,
        candidate_metadata: Optional[List[List[TCandidateMetadata]]] = None,
    ) -> None:
        # Ensure that parts of data all have equal lengths.
        validate_data_format(Xs=Xs,
                             Ys=Ys,
                             Yvars=Yvars,
                             metric_names=metric_names)

        # Choose `Surrogate` and undelying `Model` based on properties of data.
        if not self._surrogate:
            model_class = choose_model_class(
                Xs=Xs,
                Ys=Ys,
                Yvars=Yvars,
                task_features=task_features,
                fidelity_features=fidelity_features,
            )
            mll_class = choose_mll_class(
                model_class=model_class,
                state_dict=self.surrogate_fit_options.get(
                    Keys.STATE_DICT, None),
                refit=self.surrogate_fit_options.get(Keys.REFIT_ON_UPDATE,
                                                     True),
            )
            self._surrogate = Surrogate(botorch_model_class=model_class,
                                        mll_class=mll_class)

        # Construct `TrainingData` based on properties of data and type of `Model`.
        training_data = construct_training_data(
            Xs=Xs,
            Ys=Ys,
            Yvars=Yvars,
            model_class=self.surrogate.botorch_model_class)

        # Fit the model.
        if self.surrogate_fit_options.get(
                Keys.REFIT_ON_UPDATE,
                True) and not self.surrogate_fit_options.get(
                    Keys.WARM_START_REFITTING, True):
            self.surrogate_fit_options[Keys.STATE_DICT] = None
        self.surrogate.fit(
            training_data=training_data,
            bounds=bounds,
            task_features=task_features,
            feature_names=feature_names,
            fidelity_features=fidelity_features,
            target_fidelities=target_fidelities,
            metric_names=metric_names,
            candidate_metadata=candidate_metadata,
            state_dict=self.surrogate_fit_options.get(Keys.STATE_DICT, None),
            refit=self.surrogate_fit_options.get(Keys.REFIT_ON_UPDATE, True),
        )