コード例 #1
0
    def load_model(self, model_dict):
        LOGGER.debug("Start Loading model")
        result_obj = list(model_dict.get('model').values())[0].get(
            self.model_param_name)
        meta_obj = list(model_dict.get('model').values())[0].get(
            self.model_meta_name)
        # self.fit_intercept = meta_obj.fit_intercept
        if self.init_param_obj is None:
            self.init_param_obj = InitParam()
        self.init_param_obj.fit_intercept = meta_obj.fit_intercept
        self.header = list(result_obj.header)
        # For hetero-lr arbiter predict function
        if self.header is None:
            return

        need_one_vs_rest = result_obj.need_one_vs_rest
        LOGGER.debug(
            "in _load_model need_one_vs_rest: {}".format(need_one_vs_rest))
        if need_one_vs_rest:
            one_vs_rest_result = result_obj.one_vs_rest_result
            self.one_vs_rest_obj = one_vs_rest_factory(classifier=self,
                                                       role=self.role,
                                                       mode=self.mode,
                                                       has_arbiter=True)
            self.one_vs_rest_obj.load_model(one_vs_rest_result)
            self.need_one_vs_rest = True
        else:
            self.load_single_model(result_obj)
            self.need_one_vs_rest = False
コード例 #2
0
    def _init_model(self, params: LogisticRegressionParam):
        super()._init_model(params)
        self.encrypted_mode_calculator_param = params.encrypted_mode_calculator_param
        if self.role == consts.HOST:
            self.init_param_obj.fit_intercept = False
        self.cipher = PaillierEncrypt()
        self.cipher.generate_key(self.model_param.encrypt_param.key_length)
        self.transfer_variable = SSHEModelTransferVariable()
        self.one_vs_rest_obj = one_vs_rest_factory(self,
                                                   role=self.role,
                                                   mode=self.mode,
                                                   has_arbiter=False)

        self.converge_func_name = params.early_stop
        self.reveal_every_iter = params.reveal_every_iter

        self.q_field = self._transfer_q_field()

        LOGGER.debug(f"q_field: {self.q_field}")

        if not self.reveal_every_iter:
            self.self_optimizer = copy.deepcopy(self.optimizer)
            self.remote_optimizer = copy.deepcopy(self.optimizer)

        self.batch_generator = batch_generator.Guest(
        ) if self.role == consts.GUEST else batch_generator.Host()
        self.batch_generator.register_batch_generator(
            BatchGeneratorTransferVariable(), has_arbiter=False)
        self.fixedpoint_encoder = FixedPointEndec(n=self.q_field)
        self.converge_transfer_variable = ConvergeCheckerTransferVariable()
        self.secure_matrix_obj = SecureMatrix(party=self.local_party,
                                              q_field=self.q_field,
                                              other_party=self.other_party)
コード例 #3
0
    def load_model(self, model_dict):
        LOGGER.debug("Start Loading model")
        result_obj = list(model_dict.get('model').values())[0].get(
            self.model_param_name)
        meta_obj = list(model_dict.get('model').values())[0].get(
            self.model_meta_name)

        if self.init_param_obj is None:
            self.init_param_obj = InitParam()
        self.init_param_obj.fit_intercept = meta_obj.fit_intercept
        self.model_param.reveal_strategy = meta_obj.reveal_strategy
        LOGGER.debug(
            f"reveal_strategy: {self.model_param.reveal_strategy}, {self.is_respectively_reveal}"
        )
        self.header = list(result_obj.header)

        need_one_vs_rest = result_obj.need_one_vs_rest
        LOGGER.info(
            "in _load_model need_one_vs_rest: {}".format(need_one_vs_rest))
        if need_one_vs_rest:
            one_vs_rest_result = result_obj.one_vs_rest_result
            self.one_vs_rest_obj = one_vs_rest_factory(classifier=self,
                                                       role=self.role,
                                                       mode=self.mode,
                                                       has_arbiter=False)
            self.one_vs_rest_obj.load_model(one_vs_rest_result)
            self.need_one_vs_rest = True
        else:
            self.load_single_model(result_obj)
            self.need_one_vs_rest = False
コード例 #4
0
 def _init_model(self, params):
     super()._init_model(params)
     self.model_weights = LinearModelWeights(
         [], fit_intercept=self.fit_intercept)
     self.one_vs_rest_obj = one_vs_rest_factory(self,
                                                role=self.role,
                                                mode=self.mode,
                                                has_arbiter=True)
コード例 #5
0
 def _init_model(self, params):
     self.model_param = params
     self.alpha = params.alpha
     self.init_param_obj = params.init_param
     self.fit_intercept = self.init_param_obj.fit_intercept
     self.batch_size = params.batch_size
     self.max_iter = params.max_iter
     self.optimizer = optimizer_factory(params)
     self.converge_func = converge_func_factory(params.early_stop,
                                                params.tol)
     self.encrypted_calculator = None
     self.validation_freqs = params.validation_freqs
     self.one_vs_rest_obj = one_vs_rest_factory(self,
                                                role=self.role,
                                                mode=self.mode,
                                                has_arbiter=True)
コード例 #6
0
 def load_model(self, model_dict):
     result_obj, _ = super().load_model(model_dict)
     need_one_vs_rest = result_obj.need_one_vs_rest
     LOGGER.info(
         "in _load_model need_one_vs_rest: {}".format(need_one_vs_rest))
     if need_one_vs_rest:
         one_vs_rest_result = result_obj.one_vs_rest_result
         self.one_vs_rest_obj = one_vs_rest_factory(classifier=self,
                                                    role=consts.HOST,
                                                    mode=self.mode,
                                                    has_arbiter=False)
         self.one_vs_rest_obj.load_model(one_vs_rest_result)
         self.need_one_vs_rest = True
     else:
         self.load_single_model(result_obj)
         self.need_one_vs_rest = False
コード例 #7
0
 def _init_model(self, params):
     super()._init_model(params)
     self.one_vs_rest_obj = one_vs_rest_factory(self,
                                                role=self.role,
                                                mode=self.mode,
                                                has_arbiter=True)