Exemplo n.º 1
0
 def __init__(self, endog, exog, bw, var_type, fform, estimator, nboot=100):
     self.endog = endog
     self.exog = exog
     self.var_type = var_type
     self.fform = fform
     self.estimator = estimator
     self.nboot = nboot
     self.bw = KDEMultivariate(exog, bw=bw, var_type=var_type).bw
     self.sig = self._compute_sig()
Exemplo n.º 2
0
    def get_suggested_next_parameter(self, goods, bads):
        good_model, bad_model = self.last_models
        if good_model is None or bad_model is None:
            good_model = KDEMultivariate(data=[
                self.kde_data_encoder(self.get_trial_params(t))
                for t, _ in goods
            ],
                                         var_type=self.kde_vartypes,
                                         bw=self.bandwidth_estimation)
            bad_model = KDEMultivariate(data=[
                self.kde_data_encoder(self.get_trial_params(t))
                for t, _ in bads
            ],
                                        var_type=self.kde_vartypes,
                                        bw=self.bandwidth_estimation)
            good_model.bw = np.clip(good_model.bw, self.min_bandwidth, None)
            bad_model.bw = np.clip(bad_model.bw, self.min_bandwidth, None)
            self.last_models = good_model, bad_model

        best_score = float('-inf')
        best_candidate = None
        use_guided = self.guided_dice()
        for _ in range(self.guided_sample_size if use_guided else self.
                       random_sample_size):
            if use_guided:
                next_param = self.guided_modify_parameter(
                    random.choice(goods)[0], good_model)
            else:
                next_param = super().get_next_parameter()
            good_score = np.log(
                np.clip(good_model.pdf(self.kde_data_encoder(next_param)),
                        1e-32, None))
            bad_score = np.log(
                np.clip(bad_model.pdf(self.kde_data_encoder(next_param)),
                        1e-32, None))
            score = good_score - bad_score
            if score > best_score:
                best_score = score
                best_candidate = next_param
        log_print(Fore.LIGHTBLACK_EX + 'proposing',
                  'guided' if use_guided else 'sieved', 'parameter with score',
                  best_score)
        return best_candidate