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), )
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, )
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, )
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), )