4#ifndef __MED_UTILS_IMP__H_
5#define __MED_UTILS_IMP__H_
9template <
class S>
int discretize(vector<S>& x, vector<int>& binned_x,
int& nbins,
int max_bins) {
10 return discretize(x, binned_x, nbins, max_bins, MED_MAT_MISSING_VALUE, BIN_EQUISIZE);
13template <
class S>
int discretize(vector<S>& x, vector<int>& binned_x,
int& nbins,
int max_bins,
float missing_value) {
14 return discretize(x, binned_x, nbins, max_bins, missing_value, BIN_EQUISIZE);
17template <
class S>
int discretize(vector<S>& x, vector<int>& binned_x,
int& nbins,
int max_bins, MedBinningType binning) {
18 return discretize(x, binned_x, nbins, max_bins, MED_MAT_MISSING_VALUE, binning);
21template <
class S>
int discretize(vector<S>& x, vector<int>& binned_x,
int& nbins,
int max_bins,
float missing_value, MedBinningType binning) {
23 HMTHROW_AND_ERR(
"Error max_bins should be > 0\n");
26 binned_x.reserve(x.size());
28 if (binning >= BIN_LAST) {
29 MEDLOG(LOG_MED_UTILS, MAX_LOG_LEVEL,
"Unknown binning type %d\n", binning);
33 map<float, int> x_values;
34 for (
unsigned int i = 0; i < x.size(); i++) {
35 if (x[i] != missing_value)
36 x_values[(float)x[i]]++;
39 nbins = (int)x_values.size();
40 map<float, int> x_index;
42 if (nbins <= max_bins) {
44 for (
auto it = x_values.begin(); it != x_values.end(); it++)
45 x_index[it->first] = idx++;
49 if (binning == BIN_EQUIDIST) {
50 float min_val = x_values.begin()->first;
51 float max_val = x_values.rbegin()->first;
52 float bin_size = (max_val - min_val) / max_bins;
54 for (
auto it = x_values.begin(); it != x_values.end(); it++)
55 x_index[it->first] = (
int)((it->first - min_val) / bin_size);
57 else if (binning == BIN_EQUISIZE) {
59 for (
auto it = x_values.begin(); it != x_values.end(); it++)
61 int bin_size = tot / max_bins;
65 for (
auto it = x_values.begin(); it != x_values.end(); it++) {
66 x_index[it->first] = tot / bin_size;
76 for (
unsigned int i = 0; i < x.size(); i++) {
77 if (x[i] == missing_value)
78 binned_x.push_back(-1);
80 binned_x.push_back(x_index[x[i]]);
#define MEDLOG(Section, Level, fmt,...)
LOG() - all print options : section and level.
Definition Logger.h:141
Copyright 2015-2023 by XGBoost Contributors.