Evaluate training or validation data.
(self, data_name, data_idx, feval=None)
| 2701 | return hist, bin_edges |
| 2702 | |
| 2703 | def __inner_eval(self, data_name, data_idx, feval=None): |
| 2704 | """Evaluate training or validation data.""" |
| 2705 | if data_idx >= self.__num_dataset: |
| 2706 | raise ValueError("Data_idx should be smaller than number of dataset") |
| 2707 | self.__get_eval_info() |
| 2708 | ret = [] |
| 2709 | if self.__num_inner_eval > 0: |
| 2710 | result = np.zeros(self.__num_inner_eval, dtype=np.float64) |
| 2711 | tmp_out_len = ctypes.c_int(0) |
| 2712 | _safe_call(_LIB.LGBM_BoosterGetEval( |
| 2713 | self.handle, |
| 2714 | ctypes.c_int(data_idx), |
| 2715 | ctypes.byref(tmp_out_len), |
| 2716 | result.ctypes.data_as(ctypes.POINTER(ctypes.c_double)))) |
| 2717 | if tmp_out_len.value != self.__num_inner_eval: |
| 2718 | raise ValueError("Wrong length of eval results") |
| 2719 | for i in range_(self.__num_inner_eval): |
| 2720 | ret.append((data_name, self.__name_inner_eval[i], |
| 2721 | result[i], self.__higher_better_inner_eval[i])) |
| 2722 | if feval is not None: |
| 2723 | if data_idx == 0: |
| 2724 | cur_data = self.train_set |
| 2725 | else: |
| 2726 | cur_data = self.valid_sets[data_idx - 1] |
| 2727 | feval_ret = feval(self.__inner_predict(data_idx), cur_data) |
| 2728 | if isinstance(feval_ret, list): |
| 2729 | for eval_name, val, is_higher_better in feval_ret: |
| 2730 | ret.append((data_name, eval_name, val, is_higher_better)) |
| 2731 | else: |
| 2732 | eval_name, val, is_higher_better = feval_ret |
| 2733 | ret.append((data_name, eval_name, val, is_higher_better)) |
| 2734 | return ret |
| 2735 | |
| 2736 | def __inner_predict(self, data_idx): |
| 2737 | """Predict for training and validation dataset.""" |
no test coverage detected