From 4ef9bfc6c1b93538578670e26c95b2f687e24382 Mon Sep 17 00:00:00 2001 From: Griffin Bassman Date: Thu, 9 May 2024 13:55:59 -0400 Subject: [PATCH 1/3] fix: set mac CI to version 13 (#4691) * fix: update images for linux CIs * try to trigger on PR * fix triggers * try to force run * try deleting pipelines * readd azure devops * test * test * mac-12 * mac13 --- .github/workflows/asan.yml | 4 ++-- .github/workflows/dotnet_nugets.yml | 4 ++-- .github/workflows/vcpkg_build.yml | 2 +- .vscode/settings.json | 5 ++++- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/workflows/asan.yml b/.github/workflows/asan.yml index 5571eb8af37..2165e9f65fe 100644 --- a/.github/workflows/asan.yml +++ b/.github/workflows/asan.yml @@ -21,8 +21,8 @@ jobs: strategy: fail-fast: false matrix: - #os: [windows-latest, ubuntu-latest, macos-latest] - os: [ubuntu-latest, macos-latest] # Temporarily remove windows asan + #os: [windows-latest, ubuntu-latest, macos-13] + os: [ubuntu-latest, macos-13] # Temporarily remove windows asan preset: [vcpkg-asan-debug, vcpkg-ubsan-debug] exclude: # UBSan not supported by MSVC on Windows diff --git a/.github/workflows/dotnet_nugets.yml b/.github/workflows/dotnet_nugets.yml index 3beaa1821f0..8b2466fe1e4 100644 --- a/.github/workflows/dotnet_nugets.yml +++ b/.github/workflows/dotnet_nugets.yml @@ -23,7 +23,7 @@ jobs: config: - { os: "windows-latest", runtime_id: "win-x64" } - { os: "ubuntu-latest", runtime_id: "linux-x64" } - - { os: "macos-latest", runtime_id: "osx-x64" } + - { os: "macos-13", runtime_id: "osx-x64" } runs-on: ${{matrix.config.os}} steps: # Setup for build @@ -143,7 +143,7 @@ jobs: config: - { os: "windows-latest", runtime_id: "win-x64" } - { os: "ubuntu-latest", runtime_id: "linux-x64" } - - { os: "macos-latest", runtime_id: "osx-x64" } + - { os: "macos-13", runtime_id: "osx-x64" } runs-on: ${{matrix.config.os}} steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/vcpkg_build.yml b/.github/workflows/vcpkg_build.yml index 629b2ff11c9..9a763817d60 100644 --- a/.github/workflows/vcpkg_build.yml +++ b/.github/workflows/vcpkg_build.yml @@ -23,7 +23,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + os: [ubuntu-latest, macos-13, windows-latest] preset: [vcpkg-debug, vcpkg-release] steps: - uses: actions/checkout@v3 diff --git a/.vscode/settings.json b/.vscode/settings.json index f7a94e718de..9844de0b25c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,5 +6,8 @@ ], "url": "./test/vwtest.schema.json" } - ] + ], + "files.associations": { + "limits": "cpp" + } } From 5c77d729d04b0efdf5ca8af1d90c67fba285756e Mon Sep 17 00:00:00 2001 From: Byron Xu Date: Thu, 9 May 2024 15:06:28 -0400 Subject: [PATCH 2/3] fix: VW Slim (#4674) * handle feature scale correctly in VW slim * fix namespace copy bug * update tests to work with current VW * update VW slim CI job * fix typo in script name * fix CI errors * Update build_vw_slim.yml --------- Co-authored-by: Jack Gerrits Co-authored-by: Jacob Alber Co-authored-by: olgavrou Co-authored-by: Griffin Bassman --- .github/workflows/build_vw_slim.yml | 39 +- .scripts/linux/build-slim.sh | 19 - .../slim/include/vw/slim/vw_slim_predict.h | 48 +- vowpalwabbit/slim/src/vw_slim_predict.cc | 36 +- vowpalwabbit/slim/test/data.h | 484 +++++++----------- vowpalwabbit/slim/test/data/cb_data_5.model | Bin 271 -> 236 bytes vowpalwabbit/slim/test/data/cb_data_5.pred | 4 +- vowpalwabbit/slim/test/data/cb_data_6.model | Bin 268 -> 230 bytes vowpalwabbit/slim/test/data/cb_data_6.pred | 4 +- vowpalwabbit/slim/test/data/cb_data_7.model | Bin 361 -> 346 bytes vowpalwabbit/slim/test/data/cb_data_7.pred | 4 +- vowpalwabbit/slim/test/data/cb_data_8.model | Bin 472 -> 471 bytes vowpalwabbit/slim/test/data/cb_data_8.pred | 4 +- vowpalwabbit/slim/test/data/cb_data_9.model | Bin 286 -> 283 bytes vowpalwabbit/slim/test/data/generate-data.sh | 37 +- .../slim/test/data/multiclass_data_4.model | Bin 174 -> 144 bytes .../slim/test/data/multiclass_data_4.pred | 2 +- .../slim/test/data/multiclass_data_5.pred | 2 +- .../slim/test/data/regression_data_1.model | Bin 100 -> 70 bytes .../slim/test/data/regression_data_1.pred | 4 +- .../slim/test/data/regression_data_2.model | Bin 116 -> 86 bytes .../slim/test/data/regression_data_3.model | Bin 131 -> 101 bytes .../slim/test/data/regression_data_3.pred | 4 +- .../slim/test/data/regression_data_4.model | Bin 159 -> 129 bytes .../slim/test/data/regression_data_4.pred | 4 +- .../slim/test/data/regression_data_5.model | Bin 168 -> 138 bytes .../slim/test/data/regression_data_5.pred | 2 +- .../slim/test/data/regression_data_6.model | Bin 147 -> 117 bytes .../slim/test/data/regression_data_6.pred | 4 +- .../slim/test/data/regression_data_7.model | Bin 116 -> 86 bytes .../slim/test/data/regression_data_7.pred | 4 +- .../data/regression_data_ignore_linear.model | Bin 144 -> 97 bytes .../data/regression_data_ignore_linear.pred | 2 +- .../data/regression_data_no_constant.model | Bin 92 -> 75 bytes .../data/regression_data_no_constant.pred | 4 +- vowpalwabbit/slim/test/ut_util.cc | 150 ++---- 36 files changed, 356 insertions(+), 505 deletions(-) delete mode 100755 .scripts/linux/build-slim.sh mode change 100644 => 100755 vowpalwabbit/slim/test/data/generate-data.sh diff --git a/.github/workflows/build_vw_slim.yml b/.github/workflows/build_vw_slim.yml index 3a8f8371340..9acaf124411 100644 --- a/.github/workflows/build_vw_slim.yml +++ b/.github/workflows/build_vw_slim.yml @@ -22,10 +22,45 @@ jobs: - uses: actions/checkout@v1 with: submodules: recursive - - name: Build VW Slim + + - name: Install dependencies + shell: bash + run: | + sudo apt update + sudo apt install -y xxd + + - name: Configure VW Slim shell: bash - run: ./.scripts/linux/build-slim.sh + run: | + rm -rf build + cmake -S . -B build -G Ninja \ + -DBUILD_TESTING=On \ + -DVW_FEAT_FLATBUFFERS=Off \ + -DRAPIDJSON_SYS_DEP=Off \ + -DFMT_SYS_DEP=Off \ + -DSPDLOG_SYS_DEP=Off \ + -DVW_ZLIB_SYS_DEP=Off \ + -DVW_BOOST_MATH_SYS_DEP=Off + + - name: Build VW and VW Slim + shell: bash + run: cmake --build build --target vw_cli_bin vw_slim vw_slim_test + - name: Test VW Slim shell: bash working-directory: build run: ctest --output-on-failure --no-tests=error --tests-regex "VowpalWabbitSlim|ExploreSlim|CommandLineOptionsSlim" --parallel 2 + + - name: Generate test data with new VW executable + shell: bash + working-directory: vowpalwabbit/slim/test/data/ + run: ./generate-data.sh ../../../../build/vowpalwabbit/cli/vw + + - name: Build VW Slim again + shell: bash + run: cmake --build build --target vw_slim vw_slim_test + + - name: Test VW Slim again + shell: bash + working-directory: build + run: ctest --output-on-failure --no-tests=error --tests-regex "VowpalWabbitSlim|ExploreSlim|CommandLineOptionsSlim" --parallel 2 diff --git a/.scripts/linux/build-slim.sh b/.scripts/linux/build-slim.sh deleted file mode 100755 index 04cc7d3f399..00000000000 --- a/.scripts/linux/build-slim.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -set -e -set -x - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -REPO_DIR=$SCRIPT_DIR/../../ -cd $REPO_DIR - -rm -rf build -cmake -S . -B build -G Ninja \ - -DBUILD_TESTING=On \ - -DVW_FEAT_FLATBUFFERS=Off \ - -DRAPIDJSON_SYS_DEP=Off \ - -DFMT_SYS_DEP=Off \ - -DSPDLOG_SYS_DEP=Off \ - -DVW_ZLIB_SYS_DEP=Off \ - -DVW_BOOST_MATH_SYS_DEP=Off - -cmake --build build --target vw_slim vw_slim_test diff --git a/vowpalwabbit/slim/include/vw/slim/vw_slim_predict.h b/vowpalwabbit/slim/include/vw/slim/vw_slim_predict.h index 0d58099c214..6b8f2bc3574 100644 --- a/vowpalwabbit/slim/include/vw/slim/vw_slim_predict.h +++ b/vowpalwabbit/slim/include/vw/slim/vw_slim_predict.h @@ -44,31 +44,32 @@ class namespace_copy_guard VW::example_predict& _ex; unsigned char _ns; bool _remove_ns; + size_t _old_size; }; class feature_offset_guard { public: - feature_offset_guard(VW::example_predict& ex, uint64_t ft_offset); + feature_offset_guard(VW::example_predict& ex, uint64_t ft_index_offset); ~feature_offset_guard(); private: VW::example_predict& _ex; - uint64_t _old_ft_offset; + uint64_t _old_ft_index_offset; }; -class stride_shift_guard +class feature_scale_guard { public: - stride_shift_guard(VW::example_predict& ex, uint64_t shift); - ~stride_shift_guard(); + feature_scale_guard(VW::example_predict& ex, uint64_t ft_index_scale); + ~feature_scale_guard(); private: VW::example_predict& _ex; - uint64_t _shift; + uint64_t _ft_index_scale; }; -/** +/* * @brief Vowpal Wabbit slim predictor. Supports: regression, multi-class classification and contextual bandits. */ template @@ -152,7 +153,7 @@ class vw_predict } // TODO: take --cb_type dr into account - uint64_t num_weights = 0; + uint64_t feature_scale = 0; if (_command_line_arguments.find("--cb_explore_adf") != std::string::npos) { @@ -164,7 +165,7 @@ class vw_predict _bag_size = static_cast(bag_size); _exploration = vw_predict_exploration::bag; - num_weights = _bag_size; + feature_scale = _bag_size; // check for additional minimum epsilon greedy _minimum_epsilon = 0.f; @@ -212,10 +213,10 @@ class vw_predict RETURN_ON_FAIL(mp.read("resume", gd_resume)); if (gd_resume) { return E_VW_PREDICT_ERR_GD_RESUME_NOT_SUPPORTED; } - // read sparse weights into dense - _stride_shift = (uint32_t)ceil_log_2(num_weights); + _feature_scale_bits = (uint32_t)ceil_log_2(feature_scale); - RETURN_ON_FAIL(mp.read_weights(_weights, _num_bits, _stride_shift)); + // stride shift always 0 bits + RETURN_ON_FAIL(mp.read_weights(_weights, _num_bits, 0)); // TODO: check that permutations is not enabled (or parse it) @@ -261,7 +262,7 @@ class vw_predict // add constant feature ns_copy_guard = std::unique_ptr(new namespace_copy_guard(ex, VW::details::CONSTANT_NAMESPACE)); - ns_copy_guard->feature_push_back(1.f, (VW::details::CONSTANT << _stride_shift) + ex.ft_offset); + ns_copy_guard->feature_push_back(1.f, (VW::details::CONSTANT << _feature_scale_bits) + ex.ft_offset); } if (_contains_wildcard) @@ -291,9 +292,9 @@ class vw_predict out_scores.resize(num_actions); - VW::example_predict* action = actions; - for (size_t i = 0; i < num_actions; i++, action++) + for (size_t i = 0; i < num_actions; i++) { + VW::example_predict* action = &actions[i]; std::vector> ns_copy_guards; // shared feature copying @@ -358,19 +359,21 @@ class vw_predict { std::vector top_actions(num_actions); - // apply stride shifts - std::vector> stride_shift_guards; - stride_shift_guards.push_back( - std::unique_ptr(new stride_shift_guard(shared, _stride_shift))); + // apply feature scale + uint64_t feature_scale = static_cast(1) << _feature_scale_bits; + std::vector> feature_scale_guards; + feature_scale_guards.push_back( + std::unique_ptr(new feature_scale_guard(shared, feature_scale))); VW::example_predict* actions_end = actions + num_actions; for (VW::example_predict* action = actions; action != actions_end; ++action) { - stride_shift_guards.push_back( - std::unique_ptr(new stride_shift_guard(*action, _stride_shift))); + feature_scale_guards.push_back( + std::unique_ptr(new feature_scale_guard(*action, feature_scale))); } for (size_t i = 0; i < _bag_size; i++) { + // apply feature offset std::vector> feature_offset_guards; for (VW::example_predict* action = actions; action != actions_end; ++action) { @@ -487,7 +490,8 @@ class vw_predict size_t _bag_size; uint32_t _num_bits; - uint32_t _stride_shift; + // log2 of feature scale, rounded upwards to next integer + uint32_t _feature_scale_bits; bool _model_loaded; }; } // namespace vw_slim diff --git a/vowpalwabbit/slim/src/vw_slim_predict.cc b/vowpalwabbit/slim/src/vw_slim_predict.cc index 5c094149fe1..dda0deb3513 100644 --- a/vowpalwabbit/slim/src/vw_slim_predict.cc +++ b/vowpalwabbit/slim/src/vw_slim_predict.cc @@ -17,14 +17,23 @@ namespace_copy_guard::namespace_copy_guard(VW::example_predict& ex, unsigned cha { _ex.indices.push_back(_ns); _remove_ns = true; + _old_size = 0; + } + else + { + _remove_ns = false; + _old_size = _ex.feature_space[_ns].size(); } - else { _remove_ns = false; } } namespace_copy_guard::~namespace_copy_guard() { - _ex.indices.pop_back(); - if (_remove_ns) { _ex.feature_space[_ns].clear(); } + if (_remove_ns) + { + _ex.feature_space[_ns].clear(); + _ex.indices.pop_back(); + } + else { _ex.feature_space[_ns].truncate_to(_old_size); } } void namespace_copy_guard::feature_push_back(VW::feature_value v, VW::feature_index idx) @@ -32,32 +41,33 @@ void namespace_copy_guard::feature_push_back(VW::feature_value v, VW::feature_in _ex.feature_space[_ns].push_back(v, idx); } -feature_offset_guard::feature_offset_guard(VW::example_predict& ex, uint64_t ft_offset) - : _ex(ex), _old_ft_offset(ex.ft_offset) +feature_offset_guard::feature_offset_guard(VW::example_predict& ex, uint64_t ft_index_offset) + : _ex(ex), _old_ft_index_offset(ex.ft_offset) { - _ex.ft_offset = ft_offset; + _ex.ft_offset = ft_index_offset; } -feature_offset_guard::~feature_offset_guard() { _ex.ft_offset = _old_ft_offset; } +feature_offset_guard::~feature_offset_guard() { _ex.ft_offset = _old_ft_index_offset; } -stride_shift_guard::stride_shift_guard(VW::example_predict& ex, uint64_t shift) : _ex(ex), _shift(shift) +feature_scale_guard::feature_scale_guard(VW::example_predict& ex, uint64_t ft_index_scale) + : _ex(ex), _ft_index_scale(ft_index_scale) { - if (_shift > 0) + if (_ft_index_scale > 1) { for (auto ns : _ex.indices) { - for (auto& f : _ex.feature_space[ns]) { f.index() <<= _shift; } + for (auto& f : _ex.feature_space[ns]) { f.index() *= _ft_index_scale; } } } } -stride_shift_guard::~stride_shift_guard() +feature_scale_guard::~feature_scale_guard() { - if (_shift > 0) + if (_ft_index_scale > 1) { for (auto ns : _ex.indices) { - for (auto& f : _ex.feature_space[ns]) { f.index() >>= _shift; } + for (auto& f : _ex.feature_space[ns]) { f.index() /= _ft_index_scale; } } } } diff --git a/vowpalwabbit/slim/test/data.h b/vowpalwabbit/slim/test/data.h index 5011d0ca5e9..5f598c0df43 100644 --- a/vowpalwabbit/slim/test/data.h +++ b/vowpalwabbit/slim/test/data.h @@ -1,330 +1,228 @@ -unsigned char regression_data_1_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, +unsigned char regression_data_1_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4a, 0x0d, 0xa8, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, - 0x94, 0x7b, 0xbe, 0x5c, 0xc5, 0x01, 0x00, 0x55, 0xea, 0x9d, 0x3f}; -unsigned int regression_data_1_model_len = 100; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x49, 0x8e, + 0xa9, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x94, 0x7b, 0xbe, 0x5c, 0xc5, 0x01, 0x00, 0x3c, 0xea, 0x9d, 0x3f}; +unsigned int regression_data_1_model_len = 70; unsigned char regression_data_1_pred[] = { - 0x30, 0x2e, 0x39, 0x38, 0x38, 0x30, 0x33, 0x30, 0x0a, 0x30, 0x2e, 0x30, 0x30, 0x35, 0x32, 0x39, 0x35, 0x0a}; + 0x30, 0x2e, 0x39, 0x38, 0x38, 0x30, 0x32, 0x38, 0x0a, 0x30, 0x2e, 0x30, 0x30, 0x35, 0x32, 0x39, 0x36, 0x0a}; unsigned int regression_data_1_pred_len = 18; -unsigned char regression_data_no_constant_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, +unsigned char regression_data_no_constant_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, - 0x73, 0x68, 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4a, 0x0d, 0xa8, 0x7d, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x8c, 0x1e, 0x0d, 0x3d}; -unsigned int regression_data_no_constant_model_len = 92; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x6e, 0x6f, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf1, 0x40, 0x85, 0xfb, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xe6, 0x1f, 0x0d, 0x3d}; +unsigned int regression_data_no_constant_model_len = 75; unsigned char regression_data_no_constant_pred[] = { - 0x30, 0x2e, 0x30, 0x33, 0x34, 0x34, 0x35, 0x33, 0x0a, 0x30, 0x2e, 0x31, 0x37, 0x32, 0x32, 0x36, 0x35, 0x0a}; + 0x30, 0x2e, 0x30, 0x33, 0x34, 0x34, 0x35, 0x34, 0x0a, 0x30, 0x2e, 0x31, 0x37, 0x32, 0x32, 0x37, 0x31, 0x0a}; unsigned int regression_data_no_constant_pred_len = 18; -unsigned char regression_data_ignore_linear_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, +unsigned char regression_data_ignore_linear_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, - 0x73, 0x68, 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, - 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x61, 0x20, 0x2d, 0x2d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6c, - 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x62, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0xec, 0x9d, 0x02, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, - 0x93, 0x0f, 0x3f, 0x5c, 0xc5, 0x01, 0x00, 0xb0, 0xd8, 0xe0, 0x3e, 0x5f, 0xd6, 0x02, 0x00, 0xca, 0xe5, 0x15, 0xbe}; -unsigned int regression_data_ignore_linear_model_len = 144; -unsigned char regression_data_ignore_linear_pred[] = { - 0x31, 0x2e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a}; -unsigned int regression_data_ignore_linear_pred_len = 18; -unsigned char regression_data_2_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x69, 0x67, + 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x61, 0x62, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x17, 0xa5, 0x23, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x94, 0x0f, 0x3f, 0x5c, 0xc5, 0x01, 0x00, 0xac, 0xd7, + 0xe0, 0x3e, 0x5f, 0xd6, 0x02, 0x00, 0x1d, 0xe5, 0x15, 0xbe}; +unsigned int regression_data_ignore_linear_model_len = 97; +unsigned char regression_data_ignore_linear_pred[] = {0x31, 0x2e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x30, 0x0a}; +unsigned int regression_data_ignore_linear_pred_len = 11; +unsigned char regression_data_2_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4a, 0x0d, 0xa8, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, - 0xee, 0xb4, 0x3e, 0xb2, 0x69, 0x01, 0x00, 0xcf, 0xee, 0x34, 0x3e, 0x5c, 0xc5, 0x01, 0x00, 0x60, 0x22, 0x96, 0x3e, - 0x5f, 0xd6, 0x02, 0x00, 0xd5, 0x2d, 0xc8, 0xbd}; -unsigned int regression_data_2_model_len = 116; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x49, 0x8e, + 0xa9, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xef, 0xb4, 0x3e, 0xb2, 0x69, 0x01, 0x00, 0x4c, 0xef, 0x34, 0x3e, + 0x5c, 0xc5, 0x01, 0x00, 0x66, 0x21, 0x96, 0x3e, 0x5f, 0xd6, 0x02, 0x00, 0x88, 0x2c, 0xc8, 0xbd}; +unsigned int regression_data_2_model_len = 86; unsigned char regression_data_2_pred[] = {0x31, 0x2e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x30, 0x0a}; unsigned int regression_data_2_pred_len = 11; -unsigned char regression_data_3_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, +unsigned char regression_data_3_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, - 0x20, 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x43, 0x94, 0xd3, 0x3c, 0x00, 0xb2, 0x69, 0x01, 0x00, 0xfe, 0x91, 0x3e, 0x3f, 0x5c, - 0xc5, 0x01, 0x00, 0xfe, 0x91, 0x3e, 0x3f, 0x05, 0x7e, 0x02, 0x00, 0xfb, 0x42, 0x2f, 0xbe, 0x33, 0x1d, 0x03, 0x00, - 0xfb, 0x42, 0x2f, 0xbe}; -unsigned int regression_data_3_model_len = 131; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, + 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x62, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc5, 0xa5, 0x6a, 0x34, 0x00, 0xb2, + 0x69, 0x01, 0x00, 0xaa, 0x92, 0x3e, 0x3f, 0x5c, 0xc5, 0x01, 0x00, 0xaa, 0x92, 0x3e, 0x3f, 0x05, 0x7e, 0x02, 0x00, + 0x19, 0x44, 0x2f, 0xbe, 0x33, 0x1d, 0x03, 0x00, 0x19, 0x44, 0x2f, 0xbe}; +unsigned int regression_data_3_model_len = 101; unsigned char regression_data_3_pred[] = { - 0x30, 0x2e, 0x38, 0x30, 0x34, 0x32, 0x31, 0x34, 0x0a, 0x30, 0x2e, 0x31, 0x31, 0x39, 0x35, 0x39, 0x39, 0x0a}; + 0x30, 0x2e, 0x38, 0x30, 0x34, 0x32, 0x31, 0x38, 0x0a, 0x30, 0x2e, 0x31, 0x31, 0x39, 0x35, 0x38, 0x35, 0x0a}; unsigned int regression_data_3_pred_len = 18; -unsigned char regression_data_4_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, +unsigned char regression_data_4_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x62, 0x63, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x25, 0x5b, 0x51, 0xe0, 0x00, 0x2b, 0x21, 0x00, 0x00, 0x86, - 0xc6, 0x9d, 0x3c, 0x74, 0x14, 0x01, 0x00, 0x37, 0xab, 0xc9, 0xbd, 0x77, 0x14, 0x01, 0x00, 0x37, 0x50, 0x43, 0x3d, - 0xb2, 0x69, 0x01, 0x00, 0xb2, 0x63, 0xab, 0x3d, 0x5c, 0xc5, 0x01, 0x00, 0xb2, 0x63, 0xab, 0x3d, 0x05, 0x7e, 0x02, - 0x00, 0x78, 0xd1, 0xa0, 0x3b, 0x62, 0xd6, 0x02, 0x00, 0x00, 0xb8, 0x4f, 0x3d}; -unsigned int regression_data_4_model_len = 159; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x62, 0x63, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x3d, + 0xa8, 0xc1, 0x00, 0x2b, 0x21, 0x00, 0x00, 0x22, 0xc4, 0x9d, 0x3c, 0x74, 0x14, 0x01, 0x00, 0x16, 0xaf, 0xc9, 0xbd, + 0x77, 0x14, 0x01, 0x00, 0x17, 0x53, 0x43, 0x3d, 0xb2, 0x69, 0x01, 0x00, 0x06, 0x67, 0xab, 0x3d, 0x5c, 0xc5, 0x01, + 0x00, 0x06, 0x67, 0xab, 0x3d, 0x05, 0x7e, 0x02, 0x00, 0x3e, 0xd6, 0xa0, 0x3b, 0x62, 0xd6, 0x02, 0x00, 0xd4, 0xb7, + 0x4f, 0x3d}; +unsigned int regression_data_4_model_len = 129; unsigned char regression_data_4_pred[] = { - 0x30, 0x2e, 0x36, 0x33, 0x35, 0x36, 0x32, 0x30, 0x0a, 0x30, 0x2e, 0x31, 0x31, 0x37, 0x38, 0x31, 0x33, 0x0a}; + 0x30, 0x2e, 0x36, 0x33, 0x35, 0x36, 0x33, 0x37, 0x0a, 0x30, 0x2e, 0x31, 0x31, 0x37, 0x38, 0x30, 0x38, 0x0a}; unsigned int regression_data_4_pred_len = 18; -unsigned char regression_data_5_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, +unsigned char regression_data_5_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x62, 0x63, 0x64, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0b, 0x1f, 0xb3, 0x77, 0x00, 0x74, 0x14, 0x01, 0x00, - 0x2d, 0x4f, 0x94, 0xbd, 0x77, 0x14, 0x01, 0x00, 0x87, 0x9e, 0x37, 0x3d, 0xc5, 0x22, 0x01, 0x00, 0x2d, 0x4f, 0x94, - 0xbc, 0xc6, 0x22, 0x01, 0x00, 0xd8, 0xd4, 0xf4, 0x3b, 0xb2, 0x69, 0x01, 0x00, 0x7d, 0xcf, 0xde, 0x3d, 0x5c, 0xc5, - 0x01, 0x00, 0x7d, 0xcf, 0xde, 0x3d, 0x05, 0x7e, 0x02, 0x00, 0x59, 0x79, 0x78, 0x3c, 0x62, 0xd6, 0x02, 0x00, 0xa7, - 0x34, 0x53, 0x3d}; -unsigned int regression_data_5_model_len = 168; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x62, 0x63, 0x64, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, + 0xd9, 0x47, 0xa4, 0x00, 0x74, 0x14, 0x01, 0x00, 0x1f, 0x4f, 0x94, 0xbd, 0x77, 0x14, 0x01, 0x00, 0x43, 0xa0, 0x37, + 0x3d, 0xc5, 0x22, 0x01, 0x00, 0x1f, 0x4f, 0x94, 0xbc, 0xc6, 0x22, 0x01, 0x00, 0xb0, 0xd5, 0xf4, 0x3b, 0xb2, 0x69, + 0x01, 0x00, 0x8a, 0xcd, 0xde, 0x3d, 0x5c, 0xc5, 0x01, 0x00, 0x8a, 0xcd, 0xde, 0x3d, 0x05, 0x7e, 0x02, 0x00, 0xa4, + 0x7a, 0x78, 0x3c, 0x62, 0xd6, 0x02, 0x00, 0xfb, 0x39, 0x53, 0x3d}; +unsigned int regression_data_5_model_len = 138; unsigned char regression_data_5_pred[] = { - 0x30, 0x2e, 0x37, 0x36, 0x31, 0x32, 0x34, 0x37, 0x0a, 0x30, 0x2e, 0x30, 0x34, 0x30, 0x31, 0x34, 0x38, 0x0a}; + 0x30, 0x2e, 0x37, 0x36, 0x31, 0x32, 0x36, 0x34, 0x0a, 0x30, 0x2e, 0x30, 0x34, 0x30, 0x31, 0x34, 0x38, 0x0a}; unsigned int regression_data_5_pred_len = 18; -unsigned char regression_data_6_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, +unsigned char regression_data_6_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, - 0x20, 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x9b, 0x9d, 0xc6, 0xde, 0x00, 0x33, 0x1d, 0x3b, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x20, - 0xdc, 0x90, 0x3b, 0x5c, 0xc5, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x19, 0xd8, 0x3d, 0x05, 0x7e, 0xde, 0x95, - 0x00, 0x00, 0x00, 0x00, 0x20, 0xdc, 0x90, 0x3b, 0xb2, 0x69, 0x25, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x19, 0xd8, - 0x3d}; -unsigned int regression_data_6_model_len = 147; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, + 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x62, 0x00, 0x04, 0x00, 0x00, 0x00, 0x77, 0xbd, 0xf7, 0x46, 0x00, 0x33, + 0x1d, 0x3b, 0xf5, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xf2, 0x90, 0x3b, 0x5c, 0xc5, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb9, 0x21, 0xd8, 0x3d, 0x05, 0x7e, 0xde, 0x95, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xf2, 0x90, 0x3b, 0xb2, 0x69, 0x25, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x21, 0xd8, 0x3d}; +unsigned int regression_data_6_model_len = 117; unsigned char regression_data_6_pred[] = { - 0x30, 0x2e, 0x32, 0x32, 0x38, 0x37, 0x31, 0x38, 0x0a, 0x30, 0x2e, 0x32, 0x34, 0x36, 0x34, 0x30, 0x31, 0x0a}; + 0x30, 0x2e, 0x32, 0x32, 0x38, 0x37, 0x36, 0x30, 0x0a, 0x30, 0x2e, 0x32, 0x34, 0x36, 0x34, 0x35, 0x34, 0x0a}; unsigned int regression_data_6_pred_len = 18; -unsigned char regression_data_7_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, +unsigned char regression_data_7_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4a, 0x0d, 0xa8, 0x7d, 0x00, 0x88, 0xd8, 0x00, 0x00, 0xdb, - 0xe8, 0x3c, 0x3e, 0x5c, 0xc5, 0x01, 0x00, 0xdb, 0xe8, 0x3c, 0x3e, 0xd2, 0x52, 0x02, 0x00, 0xb2, 0x6a, 0x14, 0x3e, - 0xe8, 0x78, 0x03, 0x00, 0xf9, 0xc3, 0x89, 0xbd}; -unsigned int regression_data_7_model_len = 116; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x49, 0x8e, + 0xa9, 0xc7, 0x00, 0x88, 0xd8, 0x00, 0x00, 0xc8, 0xe9, 0x3c, 0x3e, 0x5c, 0xc5, 0x01, 0x00, 0xc8, 0xe9, 0x3c, 0x3e, + 0xd2, 0x52, 0x02, 0x00, 0xc8, 0x6e, 0x14, 0x3e, 0xe8, 0x78, 0x03, 0x00, 0xe0, 0xc1, 0x89, 0xbd}; +unsigned int regression_data_7_model_len = 86; unsigned char regression_data_7_pred[] = { - 0x30, 0x2e, 0x36, 0x35, 0x38, 0x38, 0x34, 0x31, 0x0a, 0x30, 0x2e, 0x30, 0x39, 0x39, 0x38, 0x39, 0x31, 0x0a}; + 0x30, 0x2e, 0x36, 0x35, 0x38, 0x38, 0x37, 0x39, 0x0a, 0x30, 0x2e, 0x30, 0x39, 0x39, 0x39, 0x31, 0x34, 0x0a}; unsigned int regression_data_7_pred_len = 18; -unsigned char multiclass_data_4_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, +unsigned char multiclass_data_4_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, - 0x20, 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x20, 0x2d, - 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc7, 0x53, 0x35, 0xf9, 0x00, 0xb2, - 0x69, 0x01, 0x00, 0x9a, 0x5c, 0xe3, 0x3e, 0xb7, 0x69, 0x01, 0x00, 0x48, 0x97, 0x17, 0x3d, 0x5c, 0xc5, 0x01, 0x00, - 0x9a, 0x5c, 0xe3, 0x3e, 0x03, 0x7e, 0x02, 0x00, 0xde, 0x2e, 0x13, 0xbe, 0x16, 0x15, 0x03, 0x00, 0x18, 0x41, 0x44, - 0xbc, 0x35, 0x1d, 0x03, 0x00, 0xde, 0x2e, 0x13, 0xbe}; -unsigned int multiclass_data_4_model_len = 174; -unsigned char multiclass_data_4_pred[] = {0x32, 0x3a, 0x30, 0x2e, 0x30, 0x33, 0x38, 0x36, 0x32, 0x32, 0x33, 0x2c, 0x31, - 0x3a, 0x30, 0x2e, 0x34, 0x36, 0x39, 0x38, 0x33, 0x2c, 0x30, 0x3a, 0x30, 0x2e, 0x39, 0x30, 0x31, 0x30, 0x33, 0x38, - 0x0a, 0x0a}; -unsigned int multiclass_data_4_pred_len = 34; -unsigned char multiclass_data_5_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x36, 0x2e, 0x31, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, + 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, + 0x6b, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x62, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x91, 0xfa, 0x13, 0x4a, 0x00, 0xb2, 0x69, 0x01, 0x00, 0xe2, 0x5e, 0xe3, 0x3e, 0xb7, 0x69, 0x01, 0x00, + 0x98, 0x94, 0x17, 0x3d, 0x5c, 0xc5, 0x01, 0x00, 0xe2, 0x5e, 0xe3, 0x3e, 0x03, 0x7e, 0x02, 0x00, 0x21, 0x30, 0x13, + 0xbe, 0x16, 0x15, 0x03, 0x00, 0x29, 0x40, 0x44, 0xbc, 0x35, 0x1d, 0x03, 0x00, 0x21, 0x30, 0x13, 0xbe}; +unsigned int multiclass_data_4_model_len = 144; +unsigned char multiclass_data_4_pred[] = {0x33, 0x3a, 0x30, 0x2e, 0x30, 0x33, 0x38, 0x36, 0x30, 0x35, 0x2c, 0x32, 0x3a, + 0x30, 0x2e, 0x34, 0x36, 0x39, 0x38, 0x32, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x39, 0x30, 0x31, 0x30, 0x33, 0x35, 0x0a, + 0x0a}; +unsigned int multiclass_data_4_pred_len = 33; +unsigned char multiclass_data_5_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, - 0x20, 0x6d, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, - 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x58, 0xf3, - 0xe1, 0x52, 0x00, 0xa9, 0x91, 0x00, 0x00, 0x54, 0x4d, 0x34, 0x3e, 0xae, 0x91, 0x00, 0x00, 0x68, 0x58, 0x70, 0x3c, - 0x5c, 0xc5, 0x01, 0x00, 0x54, 0x4d, 0x34, 0x3e, 0x11, 0x76, 0x03, 0x00, 0x02, 0xc7, 0x03, 0x3d, 0x5f, 0xd7, 0x03, - 0x00, 0xb9, 0x4e, 0xc1, 0x3c}; -unsigned int multiclass_data_5_model_len = 151; -unsigned char multiclass_data_5_pred[] = {0x30, 0x3a, 0x30, 0x2e, 0x35, 0x35, 0x31, 0x37, 0x38, 0x34, 0x2c, 0x33, 0x3a, - 0x30, 0x2e, 0x35, 0x35, 0x31, 0x37, 0x38, 0x34, 0x2c, 0x34, 0x3a, 0x30, 0x2e, 0x35, 0x36, 0x30, 0x33, 0x35, 0x39, - 0x2c, 0x37, 0x3a, 0x30, 0x2e, 0x35, 0x36, 0x30, 0x33, 0x35, 0x39, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x35, 0x37, 0x35, - 0x33, 0x38, 0x31, 0x2c, 0x35, 0x3a, 0x30, 0x2e, 0x35, 0x39, 0x32, 0x35, 0x33, 0x31, 0x2c, 0x32, 0x3a, 0x30, 0x2e, - 0x35, 0x39, 0x38, 0x39, 0x37, 0x38, 0x2c, 0x36, 0x3a, 0x30, 0x2e, 0x36, 0x32, 0x34, 0x37, 0x30, 0x33, 0x0a, 0x0a}; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, + 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, + 0x6b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2c, 0x43, 0x9b, 0xba, 0x00, 0xa9, 0x91, 0x00, 0x00, 0x31, 0xc8, 0xc0, 0x3e, + 0xae, 0x91, 0x00, 0x00, 0x78, 0x85, 0x00, 0x3d, 0x5c, 0xc5, 0x01, 0x00, 0x31, 0xc8, 0xc0, 0x3e, 0x11, 0x76, 0x03, + 0x00, 0x68, 0xf2, 0x6b, 0xbe, 0x5f, 0xd7, 0x03, 0x00, 0x01, 0x06, 0xab, 0xbe}; +unsigned int multiclass_data_5_model_len = 121; +unsigned char multiclass_data_5_pred[] = {0x33, 0x3a, 0x30, 0x2e, 0x31, 0x32, 0x37, 0x34, 0x39, 0x32, 0x2c, 0x33, 0x3a, + 0x30, 0x2e, 0x34, 0x33, 0x38, 0x33, 0x33, 0x31, 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x34, 0x36, 0x31, 0x35, 0x32, 0x32, + 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x36, 0x36, 0x38, 0x37, 0x34, 0x38, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x37, 0x39, 0x35, + 0x35, 0x35, 0x32, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x37, 0x39, 0x35, 0x35, 0x35, 0x32, 0x2c, 0x31, 0x3a, 0x30, 0x2e, + 0x38, 0x39, 0x39, 0x31, 0x36, 0x35, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x38, 0x39, 0x39, 0x31, 0x36, 0x35, 0x0a, 0x0a}; unsigned int multiclass_data_5_pred_len = 89; -unsigned char cb_data_5_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, 0x5f, - 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, - 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, - 0x20, 0x2d, 0x2d, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, 0x30, 0x2e, 0x33, 0x20, 0x2d, 0x2d, 0x6c, 0x61, - 0x6d, 0x62, 0x64, 0x61, 0x20, 0x31, 0x20, 0x2d, 0x2d, 0x70, 0x73, 0x69, 0x20, 0x31, 0x20, 0x2d, 0x2d, 0x63, 0x62, - 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x70, 0x73, 0x20, - 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, - 0x6e, 0x65, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, - 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x31, - 0x09, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb2, 0x69, 0x01, 0x00, 0x87, 0xb4, 0x0d, 0x3d, 0xb7, 0x69, 0x01, 0x00, 0x08, 0xc2, 0x9d, 0x3d, 0x5c, 0xc5, 0x01, - 0x00, 0xec, 0xa1, 0x6c, 0x3f, 0x03, 0x7e, 0x02, 0x00, 0xa3, 0x99, 0x78, 0xbe, 0x16, 0x15, 0x03, 0x00, 0x1a, 0xbd, - 0xa5, 0xbc, 0x35, 0x1d, 0x03, 0x00, 0x1b, 0x69, 0x2e, 0xbc}; -unsigned int cb_data_5_model_len = 271; -unsigned char cb_data_5_pred[] = {0x32, 0x3a, 0x30, 0x2e, 0x38, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x31, 0x2c, 0x30, 0x3a, - 0x30, 0x2e, 0x31, 0x0a, 0x0a, 0x32, 0x3a, 0x30, 0x2e, 0x38, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x31, 0x2c, 0x30, 0x3a, +unsigned char cb_data_5_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, + 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, 0x20, + 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6d, 0x74, 0x72, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, + 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x2d, 0x2d, + 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, + 0x6e, 0x20, 0x30, 0x2e, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x39, 0x32, 0x30, 0x39, 0x32, 0x39, + 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x62, 0x00, 0x04, 0x00, 0x00, + 0x00, 0xf8, 0x33, 0x84, 0x29, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xb2, 0x69, 0x01, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0xb7, 0x69, 0x01, 0x00, 0x3c, 0x8e, 0x63, 0x3c, + 0x5c, 0xc5, 0x01, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0x03, 0x7e, 0x02, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0x16, 0x15, 0x03, + 0x00, 0x3c, 0x8e, 0x63, 0x3c, 0x35, 0x1d, 0x03, 0x00, 0xaa, 0xaa, 0x2a, 0x3e}; +unsigned int cb_data_5_model_len = 236; +unsigned char cb_data_5_pred[] = {0x30, 0x3a, 0x30, 0x2e, 0x38, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x31, 0x2c, 0x32, 0x3a, + 0x30, 0x2e, 0x31, 0x0a, 0x0a, 0x30, 0x3a, 0x30, 0x2e, 0x38, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x31, 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x31, 0x0a, 0x0a}; unsigned int cb_data_5_pred_len = 38; -unsigned char cb_data_6_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, 0x5f, - 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, - 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, - 0x20, 0x2d, 0x2d, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0x61, 0x20, 0x2d, 0x32, 0x20, 0x2d, 0x2d, 0x70, 0x73, 0x69, 0x20, - 0x31, 0x20, 0x2d, 0x2d, 0x73, 0x6f, 0x66, 0x74, 0x6d, 0x61, 0x78, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, - 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x70, 0x73, 0x20, 0x2d, 0x2d, 0x63, - 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, - 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, - 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4f, 0x24, 0x56, 0xa0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x69, 0x01, - 0x00, 0xb3, 0x32, 0x51, 0x3d, 0xb7, 0x69, 0x01, 0x00, 0x10, 0x4e, 0xd3, 0x3c, 0x5c, 0xc5, 0x01, 0x00, 0x64, 0x7a, - 0x9e, 0x3e, 0x03, 0x7e, 0x02, 0x00, 0xac, 0x65, 0x84, 0xbb, 0x16, 0x15, 0x03, 0x00, 0x98, 0x88, 0xb0, 0xb9, 0x35, - 0x1d, 0x03, 0x00, 0x94, 0x6a, 0xdb, 0x3a}; -unsigned int cb_data_6_model_len = 268; -unsigned char cb_data_6_pred[] = {0x32, 0x3a, 0x30, 0x2e, 0x33, 0x33, 0x37, 0x36, 0x31, 0x34, 0x2c, 0x31, 0x3a, 0x30, - 0x2e, 0x33, 0x33, 0x33, 0x33, 0x31, 0x35, 0x2c, 0x30, 0x3a, 0x30, 0x2e, 0x33, 0x32, 0x39, 0x30, 0x37, 0x31, 0x0a, - 0x0a, 0x32, 0x3a, 0x30, 0x2e, 0x34, 0x31, 0x30, 0x39, 0x37, 0x31, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x33, 0x32, 0x37, - 0x37, 0x31, 0x31, 0x2c, 0x30, 0x3a, 0x30, 0x2e, 0x32, 0x36, 0x31, 0x33, 0x31, 0x39, 0x0a, 0x0a}; -unsigned int cb_data_6_pred_len = 68; -unsigned char cb_data_7_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, 0x5f, - 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, - 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, - 0x20, 0x2d, 0x2d, 0x62, 0x61, 0x67, 0x20, 0x33, 0x20, 0x2d, 0x2d, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0x61, 0x20, 0x31, - 0x20, 0x2d, 0x2d, 0x70, 0x73, 0x69, 0x20, 0x31, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, - 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x70, 0x73, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, - 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x2d, 0x2d, 0x63, - 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x83, 0x4b, 0x89, 0xbc, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x54, 0x00, 0x00, 0x00, 0x4e, - 0xaa, 0xbc, 0x59, 0x54, 0x00, 0x00, 0xe9, 0x6a, 0xae, 0xbc, 0x5a, 0x54, 0x00, 0x00, 0x2e, 0x68, 0xa5, 0xbc, 0xd4, - 0x74, 0x00, 0x00, 0x9f, 0xa9, 0xf3, 0xbb, 0xd5, 0x74, 0x00, 0x00, 0xaf, 0xba, 0xf5, 0xbb, 0xd6, 0x74, 0x00, 0x00, - 0xb7, 0x94, 0x29, 0xbc, 0xc8, 0xa6, 0x01, 0x00, 0x39, 0x8e, 0xdf, 0x3c, 0xc9, 0xa6, 0x01, 0x00, 0x9e, 0xb1, 0xdf, - 0x3c, 0xca, 0xa6, 0x01, 0x00, 0xe6, 0x26, 0x0f, 0x3d, 0xdc, 0xa6, 0x01, 0x00, 0x8b, 0x17, 0xa0, 0x3d, 0xdd, 0xa6, - 0x01, 0x00, 0xd2, 0xc3, 0xa2, 0x3d, 0xde, 0xa6, 0x01, 0x00, 0x96, 0x56, 0x9d, 0x3d, 0x0c, 0xf8, 0x01, 0x00, 0xbc, - 0x6e, 0x7f, 0xbe, 0x0d, 0xf8, 0x01, 0x00, 0x9b, 0xd2, 0x82, 0xbe, 0x0e, 0xf8, 0x01, 0x00, 0x6c, 0x1a, 0x78, 0xbe, - 0x70, 0x15, 0x03, 0x00, 0x4a, 0x2e, 0x70, 0x3f, 0x71, 0x15, 0x03, 0x00, 0x7b, 0x25, 0x74, 0x3f, 0x72, 0x15, 0x03, - 0x00, 0x9c, 0x07, 0x6c, 0x3f}; -unsigned int cb_data_7_model_len = 361; -unsigned char cb_data_7_pred[] = {0x32, 0x3a, 0x31, 0x2c, 0x31, 0x3a, 0x30, 0x2c, 0x30, 0x3a, 0x30, 0x0a, 0x0a, 0x32, - 0x3a, 0x31, 0x2c, 0x31, 0x3a, 0x30, 0x2c, 0x30, 0x3a, 0x30, 0x0a, 0x0a}; +unsigned char cb_data_6_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, + 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, 0x20, + 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6d, 0x74, 0x72, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, + 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x2d, 0x2d, + 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0x61, + 0x20, 0x2d, 0x32, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x62, 0x20, + 0x2d, 0x2d, 0x73, 0x6f, 0x66, 0x74, 0x6d, 0x61, 0x78, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0xe4, 0xbd, 0x5d, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x69, 0x01, + 0x00, 0x0d, 0x57, 0x2a, 0x3e, 0xb7, 0x69, 0x01, 0x00, 0xbd, 0x1e, 0x63, 0x3c, 0x5c, 0xc5, 0x01, 0x00, 0x0d, 0x57, + 0x2a, 0x3e, 0x03, 0x7e, 0x02, 0x00, 0x0d, 0x57, 0x2a, 0x3e, 0x16, 0x15, 0x03, 0x00, 0xbd, 0x1e, 0x63, 0x3c, 0x35, + 0x1d, 0x03, 0x00, 0x0d, 0x57, 0x2a, 0x3e}; +unsigned int cb_data_6_model_len = 230; +unsigned char cb_data_6_pred[] = {0x30, 0x3a, 0x30, 0x2e, 0x36, 0x36, 0x34, 0x37, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x32, + 0x34, 0x34, 0x39, 0x39, 0x38, 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x30, 0x39, 0x30, 0x33, 0x30, 0x32, 0x0a, 0x0a, 0x30, + 0x3a, 0x30, 0x2e, 0x38, 0x36, 0x36, 0x38, 0x31, 0x33, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x31, 0x31, 0x37, 0x33, 0x31, + 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x30, 0x31, 0x35, 0x38, 0x37, 0x36, 0x0a, 0x0a}; +unsigned int cb_data_6_pred_len = 65; +unsigned char cb_data_7_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x62, 0x61, 0x67, 0x20, 0x33, + 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, + 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6d, + 0x74, 0x72, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, + 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x72, 0x61, + 0x6e, 0x64, 0x6f, 0x6d, 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x37, 0x35, 0x38, 0x39, 0x30, 0x36, 0x30, 0x31, 0x32, + 0x31, 0x34, 0x36, 0x33, 0x30, 0x32, 0x31, 0x32, 0x34, 0x30, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6c, 0x85, 0x14, 0x21, + 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x54, + 0x00, 0x00, 0xbe, 0x9c, 0x29, 0x3c, 0x59, 0x54, 0x00, 0x00, 0x94, 0xad, 0x2e, 0x3c, 0x5a, 0x54, 0x00, 0x00, 0x3c, + 0x8e, 0x63, 0x3c, 0xd4, 0x74, 0x00, 0x00, 0xba, 0x19, 0x98, 0x3c, 0xd5, 0x74, 0x00, 0x00, 0xe5, 0x51, 0xbd, 0x3c, + 0xd6, 0x74, 0x00, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0xc8, 0xa6, 0x01, 0x00, 0xc8, 0x50, 0x3c, 0x3d, 0xc9, 0xa6, 0x01, + 0x00, 0xf4, 0x52, 0x56, 0x3d, 0xca, 0xa6, 0x01, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0xdc, 0xa6, 0x01, 0x00, 0x29, 0x7f, + 0xea, 0x3c, 0xdd, 0xa6, 0x01, 0x00, 0xe5, 0x3e, 0xe4, 0x3c, 0xde, 0xa6, 0x01, 0x00, 0x3c, 0x8e, 0x63, 0x3c, 0x0c, + 0xf8, 0x01, 0x00, 0x1f, 0x6b, 0xfe, 0x3d, 0x0d, 0xf8, 0x01, 0x00, 0x31, 0x02, 0x03, 0x3e, 0x0e, 0xf8, 0x01, 0x00, + 0xaa, 0xaa, 0x2a, 0x3e, 0x70, 0x15, 0x03, 0x00, 0x5c, 0xdf, 0xaf, 0x3e, 0x71, 0x15, 0x03, 0x00, 0x28, 0x2f, 0xab, + 0x3e, 0x72, 0x15, 0x03, 0x00, 0xaa, 0xaa, 0x2a, 0x3e}; +unsigned int cb_data_7_model_len = 346; +unsigned char cb_data_7_pred[] = {0x30, 0x3a, 0x31, 0x2c, 0x31, 0x3a, 0x30, 0x2c, 0x32, 0x3a, 0x30, 0x0a, 0x0a, 0x30, + 0x3a, 0x31, 0x2c, 0x31, 0x3a, 0x30, 0x2c, 0x32, 0x3a, 0x30, 0x0a, 0x0a}; unsigned int cb_data_7_pred_len = 26; -unsigned char cb_data_8_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, 0x5f, - 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, - 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, - 0x20, 0x2d, 0x2d, 0x62, 0x61, 0x67, 0x20, 0x35, 0x20, 0x2d, 0x2d, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, - 0x30, 0x2e, 0x32, 0x37, 0x20, 0x2d, 0x2d, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0x61, 0x20, 0x31, 0x20, 0x2d, 0x2d, 0x70, - 0x73, 0x69, 0x20, 0x31, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x70, 0x73, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, - 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, - 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb1, 0xf7, 0x2d, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xa8, 0x00, 0x00, 0x71, 0x18, 0x9b, 0xbc, 0xb1, 0xa8, - 0x00, 0x00, 0x7d, 0x0d, 0xb6, 0xbc, 0xb2, 0xa8, 0x00, 0x00, 0x54, 0x87, 0xbb, 0xbc, 0xb3, 0xa8, 0x00, 0x00, 0x42, - 0x3d, 0xab, 0xbc, 0xb4, 0xa8, 0x00, 0x00, 0x43, 0xee, 0xa1, 0xbc, 0xa8, 0xe9, 0x00, 0x00, 0xb6, 0x76, 0x38, 0xbc, - 0xa9, 0xe9, 0x00, 0x00, 0x20, 0xb2, 0x39, 0xbc, 0xaa, 0xe9, 0x00, 0x00, 0x5a, 0x46, 0x45, 0xbc, 0xab, 0xe9, 0x00, - 0x00, 0x7e, 0x0e, 0x49, 0xbc, 0xac, 0xe9, 0x00, 0x00, 0xa1, 0x9a, 0x5a, 0xbc, 0xe0, 0x2a, 0x02, 0x00, 0x51, 0x4e, - 0x63, 0x3f, 0xe1, 0x2a, 0x02, 0x00, 0x4d, 0xe9, 0x79, 0x3f, 0xe2, 0x2a, 0x02, 0x00, 0x14, 0xcd, 0x7e, 0x3f, 0xe3, - 0x2a, 0x02, 0x00, 0x41, 0xca, 0x70, 0x3f, 0xe4, 0x2a, 0x02, 0x00, 0xe8, 0xb9, 0x68, 0x3f, 0x90, 0x4d, 0x03, 0x00, - 0x6b, 0x97, 0x17, 0x3d, 0x91, 0x4d, 0x03, 0x00, 0xd1, 0x6f, 0x17, 0x3d, 0x92, 0x4d, 0x03, 0x00, 0x0f, 0xd3, 0x1d, - 0x3d, 0x93, 0x4d, 0x03, 0x00, 0xed, 0xa8, 0x23, 0x3d, 0x94, 0x4d, 0x03, 0x00, 0x44, 0xa8, 0x2b, 0x3d, 0xb8, 0x4d, - 0x03, 0x00, 0x8f, 0x87, 0x97, 0x3d, 0xb9, 0x4d, 0x03, 0x00, 0x2a, 0x98, 0xa6, 0x3d, 0xba, 0x4d, 0x03, 0x00, 0x7a, - 0xdf, 0xa9, 0x3d, 0xbb, 0x4d, 0x03, 0x00, 0xc9, 0x85, 0xa0, 0x3d, 0xbc, 0x4d, 0x03, 0x00, 0xc9, 0x1d, 0x9b, 0x3d, - 0x18, 0xf0, 0x03, 0x00, 0xda, 0xa7, 0x68, 0xbe, 0x19, 0xf0, 0x03, 0x00, 0xc3, 0x88, 0x88, 0xbe, 0x1a, 0xf0, 0x03, - 0x00, 0x95, 0xa5, 0x8c, 0xbe, 0x1b, 0xf0, 0x03, 0x00, 0x5c, 0x6c, 0x80, 0xbe, 0x1c, 0xf0, 0x03, 0x00, 0xea, 0xf0, - 0x72, 0xbe}; -unsigned int cb_data_8_model_len = 472; -unsigned char cb_data_8_pred[] = {0x32, 0x3a, 0x30, 0x2e, 0x38, 0x32, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x30, 0x39, 0x2c, - 0x30, 0x3a, 0x30, 0x2e, 0x30, 0x39, 0x0a, 0x0a, 0x32, 0x3a, 0x30, 0x2e, 0x38, 0x32, 0x2c, 0x31, 0x3a, 0x30, 0x2e, - 0x30, 0x39, 0x2c, 0x30, 0x3a, 0x30, 0x2e, 0x30, 0x39, 0x0a, 0x0a}; +unsigned char cb_data_8_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x62, 0x61, 0x67, 0x20, 0x35, + 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, + 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6d, + 0x74, 0x72, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, + 0x2d, 0x2d, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, 0x30, 0x2e, 0x32, 0x37, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x31, 0x30, 0x37, 0x32, 0x38, 0x38, 0x33, 0x36, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, + 0x63, 0x20, 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, + 0x31, 0x36, 0x37, 0x30, 0x39, 0x32, 0x38, 0x30, 0x35, 0x30, 0x37, 0x32, 0x38, 0x33, 0x33, 0x33, 0x35, 0x35, 0x36, + 0x30, 0x00, 0x04, 0x00, 0x00, 0x00, 0x77, 0x5b, 0xb6, 0xc8, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xa8, 0x00, 0x00, 0x3c, 0x8e, 0x63, 0x3c, 0xb1, 0xa8, 0x00, + 0x00, 0xa8, 0xfd, 0x2c, 0x3c, 0xb2, 0xa8, 0x00, 0x00, 0x94, 0xad, 0x2e, 0x3c, 0xb3, 0xa8, 0x00, 0x00, 0x3c, 0x8e, + 0x63, 0x3c, 0xb4, 0xa8, 0x00, 0x00, 0x3c, 0x8e, 0x63, 0x3c, 0xa8, 0xe9, 0x00, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0xa9, + 0xe9, 0x00, 0x00, 0xfb, 0x83, 0xb3, 0x3c, 0xaa, 0xe9, 0x00, 0x00, 0xe5, 0x51, 0xbd, 0x3c, 0xab, 0xe9, 0x00, 0x00, + 0xaa, 0xaa, 0x2a, 0x3e, 0xac, 0xe9, 0x00, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0xe0, 0x2a, 0x02, 0x00, 0xaa, 0xaa, 0x2a, + 0x3e, 0xe1, 0x2a, 0x02, 0x00, 0xe0, 0x91, 0xac, 0x3e, 0xe2, 0x2a, 0x02, 0x00, 0x28, 0x2f, 0xab, 0x3e, 0xe3, 0x2a, + 0x02, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0xe4, 0x2a, 0x02, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0x90, 0x4d, 0x03, 0x00, 0xaa, + 0xaa, 0x2a, 0x3e, 0x91, 0x4d, 0x03, 0x00, 0x08, 0x2e, 0x4f, 0x3d, 0x92, 0x4d, 0x03, 0x00, 0xf4, 0x52, 0x56, 0x3d, + 0x93, 0x4d, 0x03, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0x94, 0x4d, 0x03, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0xb8, 0x4d, 0x03, + 0x00, 0x3c, 0x8e, 0x63, 0x3c, 0xb9, 0x4d, 0x03, 0x00, 0xd5, 0x17, 0xe6, 0x3c, 0xba, 0x4d, 0x03, 0x00, 0xe5, 0x3e, + 0xe4, 0x3c, 0xbb, 0x4d, 0x03, 0x00, 0x3c, 0x8e, 0x63, 0x3c, 0xbc, 0x4d, 0x03, 0x00, 0x3c, 0x8e, 0x63, 0x3c, 0x18, + 0xf0, 0x03, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0x19, 0xf0, 0x03, 0x00, 0x40, 0xbe, 0x01, 0x3e, 0x1a, 0xf0, 0x03, 0x00, + 0x31, 0x02, 0x03, 0x3e, 0x1b, 0xf0, 0x03, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0x1c, 0xf0, 0x03, 0x00, 0xaa, 0xaa, 0x2a, + 0x3e}; +unsigned int cb_data_8_model_len = 471; +unsigned char cb_data_8_pred[] = {0x30, 0x3a, 0x30, 0x2e, 0x38, 0x32, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x30, 0x39, 0x2c, + 0x32, 0x3a, 0x30, 0x2e, 0x30, 0x39, 0x0a, 0x0a, 0x30, 0x3a, 0x30, 0x2e, 0x38, 0x32, 0x2c, 0x31, 0x3a, 0x30, 0x2e, + 0x30, 0x39, 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x30, 0x39, 0x0a, 0x0a}; unsigned int cb_data_8_pred_len = 44; -unsigned char cb_data_9_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, 0x5f, - 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, - 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, - 0x20, 0x2d, 0x2d, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, 0x30, 0x2e, 0x33, 0x20, 0x2d, 0x2d, 0x6c, 0x61, - 0x6d, 0x62, 0x64, 0x61, 0x20, 0x31, 0x20, 0x2d, 0x2d, 0x70, 0x73, 0x69, 0x20, 0x31, 0x20, 0x2d, 0x2d, 0x63, 0x62, - 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x72, 0x20, 0x2d, - 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, - 0x65, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, 0x69, - 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2a, 0x6d, 0x36, - 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0xfc, 0x00, 0x00, 0x5d, 0x18, 0x2c, 0x38, 0x07, 0xfc, 0x00, 0x00, 0x9f, 0x19, 0xe6, 0x33, 0x2c, 0x2a, 0x02, 0x00, - 0xe3, 0x3a, 0x8e, 0x36, 0x6a, 0x3a, 0x02, 0x00, 0xaf, 0x53, 0x0a, 0xb8, 0x64, 0xd3, 0x02, 0x00, 0x62, 0x48, 0xa4, - 0x38, 0x6e, 0xd3, 0x02, 0x00, 0x0b, 0x9f, 0x2a, 0x3d, 0xb8, 0x8a, 0x03, 0x00, 0x44, 0xf5, 0xff, 0x3e, 0xb9, 0x8a, - 0x03, 0x00, 0xfd, 0xff, 0x7f, 0x3f}; -unsigned int cb_data_9_model_len = 286; +unsigned char cb_data_9_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x6d, 0x36, 0x70, 0xc2, 0xbf, 0x29, 0x5e, 0x62, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, + 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, 0x20, + 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x72, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, + 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x2d, 0x2d, 0x63, + 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, + 0x20, 0x30, 0x2e, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x39, 0x32, 0x30, 0x39, 0x32, 0x39, 0x20, + 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x62, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x0f, 0xd3, 0x3b, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0xfc, 0x00, 0x00, 0x4e, 0x66, 0xa0, 0x3d, 0x07, 0xfc, 0x00, 0x00, 0x30, 0xa5, 0xa0, 0x3d, 0x2c, + 0x2a, 0x02, 0x00, 0x92, 0xdd, 0xd5, 0x3b, 0x2d, 0x2a, 0x02, 0x00, 0x90, 0x31, 0xd6, 0x3b, 0x6a, 0x3a, 0x02, 0x00, + 0x06, 0xa3, 0x94, 0xbc, 0x6b, 0x3a, 0x02, 0x00, 0xcb, 0x5a, 0x95, 0xbc, 0x64, 0xd3, 0x02, 0x00, 0x60, 0x13, 0x23, + 0xbc, 0x65, 0xd3, 0x02, 0x00, 0x09, 0xc9, 0x1f, 0xbc, 0x6e, 0xd3, 0x02, 0x00, 0xf8, 0xc2, 0x14, 0x3d, 0x6f, 0xd3, + 0x02, 0x00, 0x23, 0xab, 0x14, 0x3d, 0xb8, 0x8a, 0x03, 0x00, 0x66, 0x24, 0xdf, 0x3e, 0xb9, 0x8a, 0x03, 0x00, 0xa7, + 0x00, 0xdf, 0x3e}; +unsigned int cb_data_9_model_len = 283; unsigned char cb_data_9_pred[] = {0x30, 0x3a, 0x30, 0x2e, 0x38, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x31, 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x31, 0x0a, 0x0a, 0x30, 0x3a, 0x30, 0x2e, 0x38, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x31, 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x31, 0x0a, 0x0a}; unsigned int cb_data_9_pred_len = 38; -unsigned char cb_data_epsilon_0_skype_jb_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2E, 0x34, 0x2E, 0x30, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x41, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x20, 0x2D, 0x2D, 0x71, 0x75, - 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x36, 0x38, 0x20, 0x2D, 0x2D, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, - 0x74, 0x69, 0x63, 0x20, 0x31, 0x38, 0x20, 0x2D, 0x2D, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, - 0x33, 0x38, 0x20, 0x2D, 0x2D, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x34, 0x38, 0x20, 0x2D, - 0x2D, 0x63, 0x62, 0x5F, 0x65, 0x78, 0x70, 0x6C, 0x6F, 0x72, 0x65, 0x5F, 0x61, 0x64, 0x66, 0x20, 0x2D, 0x2D, 0x65, - 0x70, 0x73, 0x69, 0x6C, 0x6F, 0x6E, 0x20, 0x30, 0x2E, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x2D, 0x2D, 0x63, - 0x62, 0x5F, 0x61, 0x64, 0x66, 0x20, 0x2D, 0x2D, 0x63, 0x62, 0x5F, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x70, 0x73, - 0x20, 0x2D, 0x2D, 0x63, 0x73, 0x6F, 0x61, 0x61, 0x5F, 0x6C, 0x64, 0x66, 0x20, 0x6D, 0x75, 0x6C, 0x74, 0x69, 0x6C, - 0x69, 0x6E, 0x65, 0x20, 0x2D, 0x2D, 0x63, 0x73, 0x6F, 0x61, 0x61, 0x5F, 0x72, 0x61, 0x6E, 0x6B, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x50, 0x5F, 0x61, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1F, 0x6C, 0x90, 0x3C, 0x11, 0x00, 0x00, 0x00, 0xC9, 0x0B, 0xD1, - 0x3C, 0x22, 0x00, 0x00, 0x00, 0x16, 0xDA, 0x91, 0x3B, 0x24, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0x92, 0x3C, 0x30, 0x00, - 0x00, 0x00, 0xFF, 0xC4, 0x63, 0x3B, 0x31, 0x00, 0x00, 0x00, 0x24, 0x2A, 0x91, 0xB9, 0x34, 0x00, 0x00, 0x00, 0x34, - 0x71, 0x24, 0x3D, 0x40, 0x00, 0x00, 0x00, 0x08, 0x54, 0xF9, 0x3C, 0x42, 0x00, 0x00, 0x00, 0x0F, 0x4A, 0x55, 0x3C, - 0x50, 0x00, 0x00, 0x00, 0x52, 0x60, 0x14, 0x3C, 0x51, 0x00, 0x00, 0x00, 0x71, 0x7B, 0x23, 0x3C, 0x52, 0x00, 0x00, - 0x00, 0x4E, 0xD3, 0x10, 0x3C, 0x53, 0x00, 0x00, 0x00, 0x4A, 0x47, 0x17, 0x3C, 0x54, 0x00, 0x00, 0x00, 0x4E, 0x6F, - 0x16, 0x3C, 0x55, 0x00, 0x00, 0x00, 0x24, 0x25, 0x1B, 0x3C, 0x56, 0x00, 0x00, 0x00, 0x52, 0xF4, 0x1A, 0x3C, 0x57, - 0x00, 0x00, 0x00, 0x5E, 0x4A, 0x28, 0x3C, 0x58, 0x00, 0x00, 0x00, 0x3A, 0xFA, 0x24, 0x3C, 0x59, 0x00, 0x00, 0x00, - 0x2E, 0x47, 0x2B, 0x3C, 0x07, 0x04, 0x00, 0x00, 0xEA, 0x0E, 0x1A, 0x3D, 0x17, 0x04, 0x00, 0x00, 0xF6, 0x83, 0x64, - 0xBA, 0x27, 0x04, 0x00, 0x00, 0x08, 0xA3, 0xA2, 0xBA, 0x60, 0x19, 0x00, 0x00, 0xCF, 0xB0, 0x93, 0x3B, 0x61, 0x19, - 0x00, 0x00, 0xD0, 0xE4, 0x8C, 0x3B, 0x62, 0x19, 0x00, 0x00, 0xE0, 0x96, 0x98, 0x3B, 0x63, 0x19, 0x00, 0x00, 0x85, - 0xE5, 0x8A, 0x3B, 0x64, 0x19, 0x00, 0x00, 0x06, 0xC2, 0xA5, 0x3B, 0x65, 0x19, 0x00, 0x00, 0x70, 0x22, 0xB7, 0x3B, - 0x66, 0x19, 0x00, 0x00, 0x6F, 0xA2, 0x90, 0x3B, 0x67, 0x19, 0x00, 0x00, 0xAF, 0x6D, 0xAF, 0x3B, 0x68, 0x19, 0x00, - 0x00, 0x5C, 0x03, 0x9F, 0x3B, 0x69, 0x19, 0x00, 0x00, 0x7C, 0x12, 0xBA, 0x3B, 0x90, 0x1A, 0x00, 0x00, 0xCE, 0x61, - 0xEB, 0x3B, 0x91, 0x1A, 0x00, 0x00, 0xDE, 0x5C, 0xEC, 0x3B, 0x92, 0x1A, 0x00, 0x00, 0xA8, 0x99, 0xE6, 0x3B, 0x93, - 0x1A, 0x00, 0x00, 0x3B, 0x98, 0xDF, 0x3B, 0x94, 0x1A, 0x00, 0x00, 0x17, 0xA7, 0x00, 0x3C, 0x95, 0x1A, 0x00, 0x00, - 0x54, 0xC4, 0x00, 0x3C, 0x96, 0x1A, 0x00, 0x00, 0x3D, 0xF9, 0x07, 0x3C, 0x97, 0x1A, 0x00, 0x00, 0x72, 0xBB, 0xF9, - 0x3B, 0x9A, 0x1A, 0x00, 0x00, 0xC5, 0x53, 0x06, 0x3C, 0x9B, 0x1A, 0x00, 0x00, 0x0B, 0x26, 0xFA, 0x3B, 0xD0, 0x35, - 0x00, 0x00, 0x01, 0xA2, 0x73, 0x3A, 0xD1, 0x35, 0x00, 0x00, 0x2E, 0x1B, 0x76, 0xB9, 0xD2, 0x35, 0x00, 0x00, 0x0A, - 0xD5, 0xFB, 0x38, 0xD3, 0x35, 0x00, 0x00, 0x3F, 0xE2, 0x59, 0x3A, 0xD4, 0x35, 0x00, 0x00, 0x05, 0x35, 0xA8, 0xB9, - 0xD5, 0x35, 0x00, 0x00, 0xED, 0x75, 0xC1, 0xB8, 0xD6, 0x35, 0x00, 0x00, 0xE9, 0x66, 0x84, 0xBA, 0xD7, 0x35, 0x00, - 0x00, 0xA3, 0x93, 0x5B, 0xBA, 0xDE, 0x35, 0x00, 0x00, 0xD8, 0xEB, 0x28, 0x3A, 0xDF, 0x35, 0x00, 0x00, 0xF2, 0xA3, - 0x28, 0x3A, 0xF4, 0x38, 0x00, 0x00, 0x07, 0xE5, 0xB3, 0x3B, 0xF5, 0x38, 0x00, 0x00, 0xF3, 0x63, 0xB1, 0x3B, 0xF8, - 0x38, 0x00, 0x00, 0xC5, 0xF0, 0xC0, 0x3B, 0xF9, 0x38, 0x00, 0x00, 0x40, 0x85, 0xBE, 0x3B, 0xFA, 0x38, 0x00, 0x00, - 0xEB, 0xCB, 0xAE, 0x3B, 0xFB, 0x38, 0x00, 0x00, 0x64, 0xBC, 0xC0, 0x3B, 0xFC, 0x38, 0x00, 0x00, 0xB8, 0x35, 0x94, - 0x3B, 0xFD, 0x38, 0x00, 0x00, 0xB2, 0x87, 0x9D, 0x3B, 0xFE, 0x38, 0x00, 0x00, 0x86, 0x21, 0xA4, 0x3B, 0xFF, 0x38, - 0x00, 0x00, 0x4F, 0x11, 0xA1, 0x3B, 0xC0, 0x4B, 0x00, 0x00, 0x9C, 0x97, 0x14, 0x3A, 0xC1, 0x4B, 0x00, 0x00, 0x8C, - 0x68, 0x75, 0x3A, 0xC2, 0x4B, 0x00, 0x00, 0x31, 0xC2, 0x20, 0x3A, 0xC3, 0x4B, 0x00, 0x00, 0xEF, 0x20, 0xB5, 0x39, - 0xC4, 0x4B, 0x00, 0x00, 0xC0, 0x6A, 0x4C, 0x39, 0xC5, 0x4B, 0x00, 0x00, 0x37, 0x8A, 0x7B, 0xB9, 0xC6, 0x4B, 0x00, - 0x00, 0x0C, 0x50, 0xB6, 0x3A, 0xC7, 0x4B, 0x00, 0x00, 0x7F, 0x54, 0xE2, 0x39, 0xC8, 0x4B, 0x00, 0x00, 0x0F, 0x8B, - 0x8A, 0x3A, 0xC9, 0x4B, 0x00, 0x00, 0xD3, 0x50, 0xB2, 0x3A, 0x70, 0x4D, 0x00, 0x00, 0x98, 0x6D, 0xA5, 0xB9, 0x71, - 0x4D, 0x00, 0x00, 0x69, 0x76, 0xA5, 0xB9, 0x72, 0x4D, 0x00, 0x00, 0xD1, 0xBD, 0xA5, 0x39, 0x73, 0x4D, 0x00, 0x00, - 0x88, 0x23, 0xA5, 0xB9, 0x74, 0x4D, 0x00, 0x00, 0xFD, 0x72, 0xA5, 0xB9, 0x75, 0x4D, 0x00, 0x00, 0x1E, 0x79, 0xA5, - 0xB9, 0x76, 0x4D, 0x00, 0x00, 0x79, 0x77, 0xA5, 0xB9, 0x77, 0x4D, 0x00, 0x00, 0x6C, 0x77, 0xA5, 0xB9, 0x7A, 0x4D, - 0x00, 0x00, 0x06, 0x78, 0xA5, 0xB9, 0x7B, 0x4D, 0x00, 0x00, 0xEF, 0x6D, 0xA5, 0xB9, 0x84, 0x51, 0x00, 0x00, 0x1A, - 0x82, 0x57, 0x3C, 0x85, 0x51, 0x00, 0x00, 0x52, 0xA5, 0x54, 0x3C, 0x88, 0x51, 0x00, 0x00, 0x54, 0xD8, 0x4D, 0x3C, - 0x89, 0x51, 0x00, 0x00, 0x9F, 0xE9, 0x3D, 0x3C, 0x8A, 0x51, 0x00, 0x00, 0xD7, 0xA9, 0x4A, 0x3C, 0x8B, 0x51, 0x00, - 0x00, 0x90, 0x5C, 0x4D, 0x3C, 0x8C, 0x51, 0x00, 0x00, 0x7F, 0x1A, 0x4B, 0x3C, 0x8D, 0x51, 0x00, 0x00, 0x01, 0x70, - 0x51, 0x3C, 0x8E, 0x51, 0x00, 0x00, 0x36, 0x65, 0x2E, 0x3C, 0x8F, 0x51, 0x00, 0x00, 0xAF, 0x53, 0x4F, 0x3C, 0x90, - 0x64, 0x00, 0x00, 0xA4, 0x16, 0x13, 0x3C, 0x91, 0x64, 0x00, 0x00, 0x1C, 0x79, 0xE7, 0x3B, 0x92, 0x64, 0x00, 0x00, - 0xCE, 0xB9, 0x07, 0x3C, 0x93, 0x64, 0x00, 0x00, 0xC9, 0x54, 0x0D, 0x3C, 0x94, 0x64, 0x00, 0x00, 0x94, 0x39, 0x0A, - 0x3C, 0x95, 0x64, 0x00, 0x00, 0xAB, 0xD9, 0x14, 0x3C, 0x96, 0x64, 0x00, 0x00, 0xC1, 0x47, 0x0C, 0x3C, 0x97, 0x64, - 0x00, 0x00, 0x45, 0x0E, 0x1C, 0x3C, 0x98, 0x64, 0x00, 0x00, 0xD0, 0xA3, 0x16, 0x3C, 0x99, 0x64, 0x00, 0x00, 0xE3, - 0xBB, 0x17, 0x3C, 0xB0, 0x67, 0x00, 0x00, 0x2F, 0x90, 0x8C, 0x3B, 0xB1, 0x67, 0x00, 0x00, 0x77, 0xB4, 0x3C, 0x3B, - 0xB2, 0x67, 0x00, 0x00, 0xD3, 0x3E, 0x8C, 0x3B, 0xB3, 0x67, 0x00, 0x00, 0x7A, 0xD7, 0x09, 0x3B, 0xB4, 0x67, 0x00, - 0x00, 0xC6, 0x3C, 0x59, 0x3B, 0xB5, 0x67, 0x00, 0x00, 0x69, 0x4B, 0x0A, 0x3B, 0xB6, 0x67, 0x00, 0x00, 0x77, 0xDD, - 0x48, 0x3B, 0xB7, 0x67, 0x00, 0x00, 0x78, 0xE8, 0xA1, 0x3A, 0xBE, 0x67, 0x00, 0x00, 0x81, 0x47, 0x87, 0x3B, 0xBF, - 0x67, 0x00, 0x00, 0x97, 0x87, 0x8E, 0x3B, 0x5C, 0xC5, 0x01, 0x00, 0x15, 0x90, 0xFD, 0x3C, 0x50, 0x57, 0x02, 0x00, - 0x9C, 0xC7, 0x2C, 0x3C, 0x51, 0x57, 0x02, 0x00, 0x5B, 0x0E, 0x14, 0x3C, 0x52, 0x57, 0x02, 0x00, 0xE4, 0x30, 0x24, - 0x3C, 0x53, 0x57, 0x02, 0x00, 0x0E, 0x23, 0x0D, 0x3C, 0x54, 0x57, 0x02, 0x00, 0x15, 0xCC, 0x42, 0x3C, 0x55, 0x57, - 0x02, 0x00, 0x8D, 0x14, 0x3F, 0x3C, 0x56, 0x57, 0x02, 0x00, 0x84, 0x3F, 0x44, 0x3C, 0x57, 0x57, 0x02, 0x00, 0xA2, - 0x59, 0x0D, 0x3C, 0x5C, 0x57, 0x02, 0x00, 0xA6, 0x7B, 0x44, 0x3C, 0x5D, 0x57, 0x02, 0x00, 0xC9, 0xC8, 0x32, 0x3C, - 0x60, 0x70, 0x02, 0x00, 0x56, 0x18, 0x0D, 0xBA, 0x61, 0x70, 0x02, 0x00, 0x00, 0x10, 0x39, 0x34, 0x62, 0x70, 0x02, - 0x00, 0xE1, 0x7E, 0x9B, 0x39, 0x63, 0x70, 0x02, 0x00, 0x41, 0xFD, 0x0C, 0xBA, 0x64, 0x70, 0x02, 0x00, 0xF0, 0xBE, - 0x0C, 0xBA, 0x65, 0x70, 0x02, 0x00, 0xC3, 0xC2, 0x0C, 0xBA, 0x66, 0x70, 0x02, 0x00, 0xCA, 0x22, 0x0D, 0xBA, 0x67, - 0x70, 0x02, 0x00, 0x54, 0xC2, 0x0C, 0xBA, 0x6C, 0x70, 0x02, 0x00, 0x48, 0x2C, 0x0D, 0xBA, 0x6D, 0x70, 0x02, 0x00, - 0xDC, 0x44, 0x0D, 0xBA, 0x30, 0x89, 0x02, 0x00, 0x39, 0x9F, 0x00, 0xB9, 0x31, 0x89, 0x02, 0x00, 0x23, 0x11, 0x03, - 0xBB, 0x32, 0x89, 0x02, 0x00, 0x19, 0xA2, 0x02, 0xBB, 0x33, 0x89, 0x02, 0x00, 0xFF, 0xF0, 0xD6, 0xBA, 0x34, 0x89, - 0x02, 0x00, 0x0C, 0x23, 0x03, 0xBB, 0x35, 0x89, 0x02, 0x00, 0x4C, 0xC7, 0x02, 0xBB, 0x36, 0x89, 0x02, 0x00, 0x36, - 0xE6, 0x9D, 0x39, 0x37, 0x89, 0x02, 0x00, 0x38, 0xE8, 0x3F, 0xB9, 0x3C, 0x89, 0x02, 0x00, 0xDD, 0x62, 0xD9, 0x39, - 0x3D, 0x89, 0x02, 0x00, 0x88, 0xE6, 0x03, 0xBB}; -unsigned int cb_data_epsilon_0_skype_jb_model_len = 1368; -unsigned char cb_data_epsilon_0_skype_jb_pred[] = {0x00}; -unsigned int cb_data_epsilon_0_skype_jb_pred_len = 1; \ No newline at end of file diff --git a/vowpalwabbit/slim/test/data/cb_data_5.model b/vowpalwabbit/slim/test/data/cb_data_5.model index b62b3d410dfff32300ee5529928b076d47707a9d..140b6f4740b8ceedcf1c0a690072fe6570d1369a 100644 GIT binary patch literal 236 zcmZQ$U|_J+v(z(SU<9%lazO+GLxa5#gaIeZfh+}G-Q=YB#FR7$BekL+C%-5aAy86T zkgAYdQUsDN&QDB?&jBjUEzK#(%*o74g^Ly?=4AspsRhNEIr(`C271N@U|?uyX=Gq& zWC@fjEKN))N-W7tR!B@@U;$eF!?;EB1k^DROi;$AOh$%PtF-L418JMSWSf|y5I%Dq R6IfhKlo>2;D$5M!0|3()IynFU literal 271 zcmZQ$U|_J&Gu1O-U<9%lazR9BXsCk_h=BxV0oe+=x*3VZ8S%xbsVNEuKwe>KVoFhB zNoKM_ViJ&>oD`p0QIL~glp3Fyk_Hq=Ehx^+$=P4ZW{}#ubdRYl KGlO)d-W~wR=tnjH diff --git a/vowpalwabbit/slim/test/data/cb_data_5.pred b/vowpalwabbit/slim/test/data/cb_data_5.pred index a95a5317690..37724df1fb5 100644 --- a/vowpalwabbit/slim/test/data/cb_data_5.pred +++ b/vowpalwabbit/slim/test/data/cb_data_5.pred @@ -1,4 +1,4 @@ -2:0.8,1:0.1,0:0.1 +0:0.8,1:0.1,2:0.1 -2:0.8,1:0.1,0:0.1 +0:0.8,1:0.1,2:0.1 diff --git a/vowpalwabbit/slim/test/data/cb_data_6.model b/vowpalwabbit/slim/test/data/cb_data_6.model index d5d865327217dc0b0b1d7f172f2a00dd9b7d3e7d..a3c9537945a183c4ca8f0809ba2204f88482ea19 100644 GIT binary patch literal 230 zcmZQ$U|_J+v(z(SU<9%lazO+GLxa5#gaIcDfh+}G-Q=YB#FR7$BekL+C%-5aAy86T zkgAYdQUsDN&QDB?&jBjUEzK#(%*o74g^Ly?=4AspIf=PRDTxZYMnHC9X<|xIVo7GQ zLShn-Tb!R(lABn;zyh?C?aAI)E~qo)V9wc;$;iMPu4T6!Nbi+Pwuw0k;WO7UfyKo{ MnZe?wvdmyU0Ba64w*UYD literal 268 zcmZQ$U|_J&Gu1O-U<9%lazR9BXsCk_h=ByA1KA3?x*3VZ8S%xbsVNEuKwe>KVoFhB zNoKM_ViJ&>oD`p0QIL~glp3Fyk_HsWNz6@3NmS4^0{aDqOTEF)tg)0g7cSWTvF%m1LGwGOz%h z=C2aA0Lirw=B7+WhRsHSw%dWUfZt`Cn4^pgDOL0AnCqAr)}*%V787M=n9;Fer>QJ6 J!<4MsRsbj}M<)OP diff --git a/vowpalwabbit/slim/test/data/cb_data_6.pred b/vowpalwabbit/slim/test/data/cb_data_6.pred index 7f05b1bbb53..3a9347e2e86 100644 --- a/vowpalwabbit/slim/test/data/cb_data_6.pred +++ b/vowpalwabbit/slim/test/data/cb_data_6.pred @@ -1,4 +1,4 @@ -2:0.337614,1:0.333315,0:0.329071 +0:0.6647,1:0.244998,2:0.090302 -2:0.410971,1:0.327711,0:0.261319 +0:0.866813,1:0.11731,2:0.015876 diff --git a/vowpalwabbit/slim/test/data/cb_data_7.model b/vowpalwabbit/slim/test/data/cb_data_7.model index ffb0fa232617f3f86155d6f459d0c4f989b381a7..3cfd196c90d8d562f74eece93bee7b3af6e1a835 100644 GIT binary patch literal 346 zcmZQ$U|_J+v(z(SU<9%lazO+GLxa5#gaId8fh+}G-K4~H1!EwcoD`p!k_KU>|8K+?teiHY$!K&82*IVG7nnR%&j(W1n>Y#^twG%=+pu_QBDAu$Qa z1&XHR=f)SOrlu&En_5^Jm>C!v8Jd_G8yFcHnHVsz03DLkDx!E4>NI~QC?g_-fnnbq zO`Av{J!P$)O%#x}=}We`Qo_KnOLB(IRUrK|aIeiZAiZjpmfeYEj0`6NY-~>g=`TTH zwx@tJNc;|v)~tVJa~DWIwR>W74@iT|;rYSHAfNrumKR7HGBMln0cnu>0#Rm$nEUJP Q3W2nS{%X4-APo`+0Mh(mKVoFhB zNoKM_ViJ&>oD`p0QIL~glp3Fyk_Hq=N=#QU2GTi+xk)LB3Wh*tL2)LS2C9Xq0WwM| z3sMy_3yMKT6z3-<#^(Ta=a%M_Waeb%rNTvv67#Y_hGhb&%#_r;lFX7y1{R>Zn!P*s zAUPGnj0geJeyjFG0_m4o>-IzeX}yf4d#;o)Fw9^1dG}Qyy?)o%-PeHh_9>csPAp?& zu^b%TvhZ#< diff --git a/vowpalwabbit/slim/test/data/cb_data_7.pred b/vowpalwabbit/slim/test/data/cb_data_7.pred index dd30d21e58d..57b426532cc 100644 --- a/vowpalwabbit/slim/test/data/cb_data_7.pred +++ b/vowpalwabbit/slim/test/data/cb_data_7.pred @@ -1,4 +1,4 @@ -2:1,1:0,0:0 +0:1,1:0,2:0 -2:1,1:0,0:0 +0:1,1:0,2:0 diff --git a/vowpalwabbit/slim/test/data/cb_data_8.model b/vowpalwabbit/slim/test/data/cb_data_8.model index 7cbdf184d7f035095f5652b4986229d76861f48b..c2a367b22466e4adcc7373f232eb8c9d4faf684c 100644 GIT binary patch literal 471 zcmZQ$U|_J+v(z(SU<9%lazO+GLxa5#gaIcP0a*&Vx=D%Y3Z_6hIVnCdB@MzzttiOJ zFG@uSlvEa^D&&?FfuxJ`6BFZefJ$>qb4oIEGV@a5qD6^$*+5QeL2+hIex8DXo{_l$ z2pAfe8(CNwn*rqtOA}Ly5=%0Z6%vzxT%eAW{M`8B)YKFOLo;&&OCt*dQ;=$7V`EcO zGXn+|pexIxx1G2Eb$0<1l(At21A|Rpvdu;yz2dKq%_bl{Wv!mgW~lfUD81q(1H-CS zT6Qae^zY`)HmiX2)4;tptD)j+p!5SRCa}7PK>ESNHFl4Hw1)m_yT?%RCs2BVFEd!( zL?F$f=Wja+NPh_mvz-hTp8}b^__E;?Hb$0qLi9Pi%HW#rHsIi4PF-B!RTU TK1Mq!AZ^IRY$pvBmx0m%k0p$k literal 472 zcmYk$IYlpeQB9@o@BNOm!42n{zI78;53Zg3l4jI zBTAL|+!7P&5Ha`>tG_D5OD znB?J``(HNezn}lcy(A&Q(gfd!lLZ-m0Q;k7{1CR$G(UpvAL~5%N=Rm`iKn1&(9Cz> zKvySE!$@H_--YX|1N^=wm-O{|#0S{(8Wta6$yG#rf~}XD_zYi8yy9Gsg^a|lbRJ#@ ztaJeu-Bi&<_@1n$ORytZOON4fG)_-o&B_)%g%fuvdIm41*C@|gm7t}c7IM4oHOt_6 WEM}I&<;@wh0uHKEW+i<444L2a2bcx` diff --git a/vowpalwabbit/slim/test/data/cb_data_8.pred b/vowpalwabbit/slim/test/data/cb_data_8.pred index cad4def2485..c04ca26f912 100644 --- a/vowpalwabbit/slim/test/data/cb_data_8.pred +++ b/vowpalwabbit/slim/test/data/cb_data_8.pred @@ -1,4 +1,4 @@ -2:0.82,1:0.09,0:0.09 +0:0.82,1:0.09,2:0.09 -2:0.82,1:0.09,0:0.09 +0:0.82,1:0.09,2:0.09 diff --git a/vowpalwabbit/slim/test/data/cb_data_9.model b/vowpalwabbit/slim/test/data/cb_data_9.model index 483fe59757312e3ca9501ca40ab79dd096b117a8..885283780f1e90f06ba84cbb2c6182e2dea32926 100644 GIT binary patch literal 283 zcmZQ$U|_J+v(z(SU<9%la?J`3?bnP;au5RXkU$xbt)Q!$oD`p!k_KUs{iSao=mAR!kC7C&yd8u&GqQtyxASbn;I5Q_dPr*RX*Z>R+4K0lf zER8IIa)qUdDMg7TnaK)?NenDNoB1zW2O>EJ!eslyz~Gm*z?L0I8!TO5tE0ulFzN19 zYh55c!SI@OmK75N+u|vEvVrvJsHuBWE;BJC2rKVN1=5@+<@e+P=^uwgZ1aJ%@@f&= T9bL=}X)5>ab^__;4EOB-Jh@G{ literal 286 zcmZQ$U|_J&Gu1O-U<9%lazR9BXsCk_h=BxV0@(_>x*3VZ8S%xbsVNEuKwe>KVoFhB zNoKM_ViJ&>oD`p0QIL~glp3Fyk_Hq=Ehx^+$jONEOTCFW&=%*q5(nJKAxC7C6a3@kv$ zY2})M+=vR;{xC4aO6XXy1L^sa&y01nm>3>g^_gW^F)^$U=Gu{RnTa9EV~Ir`kmjDR VWxJz`nZf1jf4iMP`tSdGdjR1%O<({3 diff --git a/vowpalwabbit/slim/test/data/generate-data.sh b/vowpalwabbit/slim/test/data/generate-data.sh old mode 100644 new mode 100755 index ad4adbd996b..e8b1b65c462 --- a/vowpalwabbit/slim/test/data/generate-data.sh +++ b/vowpalwabbit/slim/test/data/generate-data.sh @@ -4,96 +4,101 @@ VW=${1:-vw} echo > $DATA_H -$VW --quiet -d regression_data_1.txt -f regression_data_1.model -c -k --passes 100 --holdout_off +$VW --quiet -d regression_data_1.txt -f regression_data_1.model -c -k --passes 100 --holdout_off --predict_only_model $VW --quiet -d regression_data_1.txt -i regression_data_1.model -t -p regression_data_1.pred xxd -i regression_data_1.model >> $DATA_H xxd -i regression_data_1.pred >> $DATA_H -$VW --quiet -d regression_data_1.txt -f regression_data_no_constant.model -c -k --passes 100 --holdout_off --noconstant +$VW --quiet -d regression_data_1.txt -f regression_data_no_constant.model -c -k --passes 100 --holdout_off --noconstant --predict_only_model $VW --quiet -d regression_data_1.txt -i regression_data_no_constant.model -t -p regression_data_no_constant.pred xxd -i regression_data_no_constant.model >> $DATA_H xxd -i regression_data_no_constant.pred >> $DATA_H -$VW --quiet -d regression_data_2.txt -f regression_data_ignore_linear.model -c -k --passes 100 --holdout_off --ignore_linear a --ignore_linear b +$VW --quiet -d regression_data_2.txt -f regression_data_ignore_linear.model -c -k --passes 100 --holdout_off --ignore_linear a --ignore_linear b --predict_only_model $VW --quiet -d regression_data_2.txt -i regression_data_ignore_linear.model -t -p regression_data_ignore_linear.pred xxd -i regression_data_ignore_linear.model >> $DATA_H xxd -i regression_data_ignore_linear.pred >> $DATA_H -$VW --quiet -d regression_data_2.txt -f regression_data_2.model -c -k --passes 100 --holdout_off +$VW --quiet -d regression_data_2.txt -f regression_data_2.model -c -k --passes 100 --holdout_off --predict_only_model $VW --quiet -d regression_data_2.txt -i regression_data_2.model -t -p regression_data_2.pred xxd -i regression_data_2.model >> $DATA_H xxd -i regression_data_2.pred >> $DATA_H # testing interactions order 2 -$VW --quiet -d regression_data_3.txt -f regression_data_3.model -c -k --passes 100 --holdout_off -q ab +$VW --quiet -d regression_data_3.txt -f regression_data_3.model -c -k --passes 100 --holdout_off -q ab --predict_only_model $VW --quiet -d regression_data_3.txt -i regression_data_3.model -t -p regression_data_3.pred xxd -i regression_data_3.model >> $DATA_H xxd -i regression_data_3.pred >> $DATA_H # testing interactions order 3 -$VW --quiet -d regression_data_4.txt -f regression_data_4.model -c -k --passes 2 --holdout_off --interactions abc +$VW --quiet -d regression_data_4.txt -f regression_data_4.model -c -k --passes 2 --holdout_off --interactions abc --predict_only_model $VW --quiet -d regression_data_4.txt -i regression_data_4.model -t -p regression_data_4.pred xxd -i regression_data_4.model >> $DATA_H xxd -i regression_data_4.pred >> $DATA_H # testing interactions order 4 -$VW --quiet -d regression_data_4.txt -f regression_data_5.model -c -k --passes 2 --holdout_off --interactions abcd +$VW --quiet -d regression_data_4.txt -f regression_data_5.model -c -k --passes 2 --holdout_off --interactions abcd --predict_only_model $VW --quiet -d regression_data_4.txt -i regression_data_5.model -t -p regression_data_5.pred xxd -i regression_data_5.model >> $DATA_H xxd -i regression_data_5.pred >> $DATA_H # testing large models -$VW --quiet -d regression_data_3.txt -f regression_data_6.model -c -k --passes 2 --holdout_off -q ab -b 33 --sparse_weights +$VW --quiet -d regression_data_3.txt -f regression_data_6.model -c -k --passes 2 --holdout_off -q ab -b 33 --sparse_weights --predict_only_model $VW --quiet -d regression_data_3.txt -i regression_data_6.model -t -p regression_data_6.pred --sparse_weights xxd -i regression_data_6.model >> $DATA_H xxd -i regression_data_6.pred >> $DATA_H # testing feature hashing -$VW --quiet -d regression_data_7.txt -f regression_data_7.model -c -k --passes 2 --holdout_off +$VW --quiet -d regression_data_7.txt -f regression_data_7.model -c -k --passes 2 --holdout_off --predict_only_model $VW --quiet -d regression_data_7.txt -i regression_data_7.model -t -p regression_data_7.pred xxd -i regression_data_7.model >> $DATA_H xxd -i regression_data_7.pred >> $DATA_H # multi-class classification -$VW --quiet -d multiclass_data_4.txt --csoaa_ldf m --csoaa_rank -q ab -k -c --holdout_off --passes 100 -f multiclass_data_4.model +$VW --quiet -d multiclass_data_4.txt --csoaa_ldf m --csoaa_rank -q ab -k -c --holdout_off --passes 100 -f multiclass_data_4.model --predict_only_model $VW --quiet -d multiclass_data_4.txt -i multiclass_data_4.model -t -p multiclass_data_4.pred -# manual creation of (sort by action id) multiclass_data_4.pred.manual xxd -i multiclass_data_4.model >> $DATA_H xxd -i multiclass_data_4.pred >> $DATA_H +$VW --quiet -d multiclass_data_5.txt --csoaa_ldf m --csoaa_rank -k -c --holdout_off --passes 100 -f multiclass_data_5.model --predict_only_model +$VW --quiet -d multiclass_data_5.txt -i multiclass_data_5.model -t -p multiclass_data_5.pred + +xxd -i multiclass_data_5.model >> $DATA_H +xxd -i multiclass_data_5.pred >> $DATA_H + # epsilon greedy -$VW --quiet -d cb_data_5.txt --cb_explore_adf --epsilon 0.3 -q ab -k -c --holdout_off --passes 100 -f cb_data_5.model +$VW --quiet -d cb_data_5.txt --cb_explore_adf --epsilon 0.3 -q ab -k -c --holdout_off --passes 100 -f cb_data_5.model --predict_only_model $VW --quiet -d cb_data_5.txt -i cb_data_5.model -p cb_data_5.pred xxd -i cb_data_5.model >> $DATA_H xxd -i cb_data_5.pred >> $DATA_H # softmax -$VW --quiet -d cb_data_5.txt --cb_explore_adf --softmax --lambda -2 -q ab -k -c --holdout_off --passes 5 -f cb_data_6.model +$VW --quiet -d cb_data_5.txt --cb_explore_adf --softmax --lambda -2 -q ab -k -c --holdout_off --passes 5 -f cb_data_6.model --predict_only_model $VW --quiet -d cb_data_5.txt -i cb_data_6.model -p cb_data_6.pred xxd -i cb_data_6.model >> $DATA_H xxd -i cb_data_6.pred >> $DATA_H # bag -$VW --quiet -d cb_data_5.txt --cb_explore_adf --bag 3 -q ab -k -c --holdout_off --passes 100 -f cb_data_7.model +$VW --quiet -d cb_data_5.txt --cb_explore_adf --bag 3 -q ab -k -c --holdout_off --passes 100 -f cb_data_7.model --predict_only_model $VW --quiet -d cb_data_5.txt -i cb_data_7.model -p cb_data_7.pred xxd -i cb_data_7.model >> $DATA_H xxd -i cb_data_7.pred >> $DATA_H # bag + epsilon greedy -$VW --quiet -d cb_data_5.txt --cb_explore_adf --bag 5 --epsilon 0.27 -q ab -k -c --holdout_off --passes 100 -f cb_data_8.model +$VW --quiet -d cb_data_5.txt --cb_explore_adf --bag 5 --epsilon 0.27 -q ab -k -c --holdout_off --passes 100 -f cb_data_8.model --predict_only_model $VW --quiet -d cb_data_5.txt -i cb_data_8.model -p cb_data_8.pred xxd -i cb_data_8.model >> $DATA_H @@ -101,7 +106,7 @@ xxd -i cb_data_8.pred >> $DATA_H # epsilon greedy + dr # TODO: results are confusing (for both dr & mtr) as they don't match ips in a simple example -$VW --quiet -d cb_data_5.txt --cb_explore_adf --epsilon 0.3 --cb_type dr -q ab -k -c --holdout_off --passes 1000 -f cb_data_9.model +$VW --quiet -d cb_data_5.txt --cb_explore_adf --epsilon 0.3 --cb_type dr -q ab -k -c --holdout_off --passes 1000 -f cb_data_9.model --predict_only_model $VW --quiet -d cb_data_5.txt -i cb_data_9.model -p cb_data_9.pred xxd -i cb_data_9.model >> $DATA_H diff --git a/vowpalwabbit/slim/test/data/multiclass_data_4.model b/vowpalwabbit/slim/test/data/multiclass_data_4.model index 34351571b78d93cf980d79048c905b8f794ded6e..b994afe6658b862c4ca77134b9edfe2c51d22f64 100644 GIT binary patch delta 94 zcmZ3-IDwI!je&u|QqOWCyCRD=kU7y)&aJRCF{LQ6Br{ndF^Pc%B=}3%i(ykHBg3P( m$9CI+^o%LuwlPN`eC9eP21NtmePW`_44MuudrW1S!F&LADH!zt delta 124 zcmbQhxQ>yXje&u|LeF#}yP~2ekg1@nn~_+Y5nr5|nxbF;h*~ QqRb2ujxKvlWtqWz09bt_6aWAK diff --git a/vowpalwabbit/slim/test/data/multiclass_data_4.pred b/vowpalwabbit/slim/test/data/multiclass_data_4.pred index 151607bbf2d..60ff4928422 100644 --- a/vowpalwabbit/slim/test/data/multiclass_data_4.pred +++ b/vowpalwabbit/slim/test/data/multiclass_data_4.pred @@ -1,2 +1,2 @@ -2:0.0386223,1:0.46983,0:0.901038 +3:0.038605,2:0.46982,1:0.901035 diff --git a/vowpalwabbit/slim/test/data/multiclass_data_5.pred b/vowpalwabbit/slim/test/data/multiclass_data_5.pred index 9d4795324c6..5d98d4b54fb 100644 --- a/vowpalwabbit/slim/test/data/multiclass_data_5.pred +++ b/vowpalwabbit/slim/test/data/multiclass_data_5.pred @@ -1,2 +1,2 @@ -0:0.551784,3:0.551784,4:0.560359,7:0.560359,1:0.575381,5:0.592531,2:0.598978,6:0.624703 +3:0.127492,3:0.438331,2:0.461522,2:0.668748,1:0.795552,1:0.795552,1:0.899165,1:0.899165 diff --git a/vowpalwabbit/slim/test/data/regression_data_1.model b/vowpalwabbit/slim/test/data/regression_data_1.model index 3a2f6112659748adee6e38c7ff7128967ab92b32..e60c4fb0010c097b1d173f19786e93ad4d8f4a4e 100644 GIT binary patch delta 44 vcmYdsV`pPvV6fD)oXD;y#|UIHumG`V-^$}4HiP$+>U}Xs85wL|&9w&rppgl; delta 74 zcmZ=uVP|7tV6f0Loye|eBM)RM=;~%97H7m4r>3ST7yx-WnR(d?nJKAxC7C6a3@kt; ZUc4)6ffNHn%arPUF-I90LSN0b2LOAe6O{k} diff --git a/vowpalwabbit/slim/test/data/regression_data_1.pred b/vowpalwabbit/slim/test/data/regression_data_1.pred index 961a1add22d..8f23c2b166d 100644 --- a/vowpalwabbit/slim/test/data/regression_data_1.pred +++ b/vowpalwabbit/slim/test/data/regression_data_1.pred @@ -1,2 +1,2 @@ -0.988030 -0.005295 +0.988028 +0.005296 diff --git a/vowpalwabbit/slim/test/data/regression_data_2.model b/vowpalwabbit/slim/test/data/regression_data_2.model index d730bd5c5a401a5e8d5ba0e1c81f8a14e09fb264..449d484133357ad44d177177ccca1098846f69e9 100644 GIT binary patch delta 60 zcmXR3V`pPvV6fD)oXD=I#|UIHumG`V-^$}4HiOUmEq0qS8G*EkUCdENhBU=#cJbGk K7&>%L>;(XD%nyzL delta 90 zcmWG5VP|7tV6f0Loye}}BM)RM=;~%97H7m4r>3ST7yx-WnR(d?nJKAxC7C6a3@kt; oUc4)6ffNJ7`FC6FHf1sbX%oAcql^p*O4ID(uQ4%P)jhEn005gBX8-^I diff --git a/vowpalwabbit/slim/test/data/regression_data_3.model b/vowpalwabbit/slim/test/data/regression_data_3.model index 31245ca1032a1ddb5f333768cec0975eed02b5a2..83e1c26faa4257cf225c01996c3151e89f992101 100644 GIT binary patch delta 76 zcmZo>Ol4 Weauk^&05FAAnBsN&sdfjOalO))DqwT delta 106 zcmYdoW@Kk$U|_J&Go8q;7_A3nD(LEFBo=4H7pJDCC>Q{Fg{6rpMTsSu$qI={KyFTE xUbaGJN@`w7W=SOj3s8sil*={@n=%<0{!O&Ak2wmVS?ib>emm*!GnQor(*Wr8AA0}* diff --git a/vowpalwabbit/slim/test/data/regression_data_3.pred b/vowpalwabbit/slim/test/data/regression_data_3.pred index d6d02d56323..e6e7359d503 100644 --- a/vowpalwabbit/slim/test/data/regression_data_3.pred +++ b/vowpalwabbit/slim/test/data/regression_data_3.pred @@ -1,2 +1,2 @@ -0.804214 -0.119599 +0.804218 +0.119585 diff --git a/vowpalwabbit/slim/test/data/regression_data_4.model b/vowpalwabbit/slim/test/data/regression_data_4.model index db5bea2f15255807b29b4166b507458727c17908..57c7fe2fae26cbd3493f6b07da94eff251673c15 100644 GIT binary patch delta 105 zcmbQw*vQDv#=yW}sb@KnT`^Jw$W+kP&CDxFElNx-$;{6yR!B@rW?%t|yW6ff$e^vr zz@T(wu1$#uBZJublY7g7w0N+y?WRmd2DbFowlPN`G;19bgWa_S)=Afx7_Myhw*>%E Cg&e#9 delta 135 zcmZoJl*!1j cDS5SR%uxu3M#d=dFBSY8Od$uu0Av9|p6T_0K3Y(;BObov* GgKYuVl_LoN delta 145 zcmeBTT*1iB#=yW}p=UagU9sL6$W+kP%}6ZHh%Zh}O;Ioa@-p*EQi~FkOEUBGiWL%* zl2d?UIhlFc3YjUXc_o=8l?*IEZQSyk%Na^U7#Vc^r|c~U((UuiZI3E}`FoB5=^IzR jSZ~T?WT-uV&o<^Lgl4T{Vu-A)ut~bc#IW2Xn9&vhw5Kem diff --git a/vowpalwabbit/slim/test/data/regression_data_5.pred b/vowpalwabbit/slim/test/data/regression_data_5.pred index 04ee51f85e8..1aad0fa2718 100644 --- a/vowpalwabbit/slim/test/data/regression_data_5.pred +++ b/vowpalwabbit/slim/test/data/regression_data_5.pred @@ -1,2 +1,2 @@ -0.761247 +0.761264 0.040148 diff --git a/vowpalwabbit/slim/test/data/regression_data_6.model b/vowpalwabbit/slim/test/data/regression_data_6.model index 566fcac1776f979fb0f1c2c3c93c853fea370241..43c6a9a5dd5a2c30153e8ba1fa327ba07a0bfd40 100644 GIT binary patch delta 92 zcmbQtSjx`Ez`$UsXE~8w(N_S-RM6EeEKN))N-W7tR!B@@U;&Di@BQw^U@U9>7070I g@o9o}%+ZY?Cc{p}8@8-<_ojl_An{F^sx~lj072CnNdN!< delta 122 zcmXS&%*f8hz`$UkXF8ExFMF;Q#;t diff --git a/vowpalwabbit/slim/test/data/regression_data_6.pred b/vowpalwabbit/slim/test/data/regression_data_6.pred index a2204c96afa..44277405900 100644 --- a/vowpalwabbit/slim/test/data/regression_data_6.pred +++ b/vowpalwabbit/slim/test/data/regression_data_6.pred @@ -1,2 +1,2 @@ -0.228718 -0.246401 +0.228760 +0.246454 diff --git a/vowpalwabbit/slim/test/data/regression_data_7.model b/vowpalwabbit/slim/test/data/regression_data_7.model index 0f2dae856a3b99aa87f82ab5331f9bc8ca16adf9..5584d8794698cf8c9267bf4aec48b4629c6b0b0b 100644 GIT binary patch delta 60 zcmXR3V`pPvV6fD)oXD=I#|UIHumG`V-^$|*9XA*lPQ0|Si#f^&rY{9CF`UQ~v3pU$ K%<$k~=UxD=l@faZ delta 90 zcmWG5VP|7tV6f0Loye}}BM)RM=;~%97H7m4r>3ST7yx-WnR(d?nJKAxC7C6a3@kt; nUc4)689Ht-Fx-A&V;6Ij5lmkSVq(~oC1UrYf|=px;m*APC!icG diff --git a/vowpalwabbit/slim/test/data/regression_data_7.pred b/vowpalwabbit/slim/test/data/regression_data_7.pred index f7f8dd0188d..c6638c10565 100644 --- a/vowpalwabbit/slim/test/data/regression_data_7.pred +++ b/vowpalwabbit/slim/test/data/regression_data_7.pred @@ -1,2 +1,2 @@ -0.658841 -0.099891 +0.658879 +0.099914 diff --git a/vowpalwabbit/slim/test/data/regression_data_ignore_linear.model b/vowpalwabbit/slim/test/data/regression_data_ignore_linear.model index 68d808987f7bea25af5a5de93f6547fbb7604a27..b891f0a195f248827a05f242a6f3e098071b245e 100644 GIT binary patch delta 72 zcmbQhn8?n?z`$UsXE~8w(NYA+RM6GUOwY?NN{!FS%u7uyQb{HQw06PH^L;wH) literal 144 zcmZQ$U|_J&Gu1O-U<9%lazO+GLxa5#gaId=fh+}G-HgQIjQHZz)D#5+ATKjLFTW@? zJ|{CTHL*w`5kn*iC<2tsR>(|A%`3?)sbpXQ8uMl@(`>N0%O~^O#~fv3*l^>4UHmmB KhEq>P_W=OFBP56b diff --git a/vowpalwabbit/slim/test/data/regression_data_ignore_linear.pred b/vowpalwabbit/slim/test/data/regression_data_ignore_linear.pred index f225669ada0..5e715fea88b 100644 --- a/vowpalwabbit/slim/test/data/regression_data_ignore_linear.pred +++ b/vowpalwabbit/slim/test/data/regression_data_ignore_linear.pred @@ -1,2 +1,2 @@ 1.000000 -0.000000 +0 diff --git a/vowpalwabbit/slim/test/data/regression_data_no_constant.model b/vowpalwabbit/slim/test/data/regression_data_no_constant.model index 1175c06f5446d8f44e010003c1889858e6ec4514..71ed9b947f1a4133feba34b8bc228320650d4e81 100644 GIT binary patch delta 49 zcma#?W@lqyV6fD)oXD=I%m-vD=<4R>C+FuCmn7zuFt7kcK037i22u3ST7yx-WnR(d?nJKAxC7C6a3@kt; QUc4)6ffNHnj~uTp0OkD-@Bjb+ diff --git a/vowpalwabbit/slim/test/data/regression_data_no_constant.pred b/vowpalwabbit/slim/test/data/regression_data_no_constant.pred index 89b02b9f031..ec553b2b5e9 100644 --- a/vowpalwabbit/slim/test/data/regression_data_no_constant.pred +++ b/vowpalwabbit/slim/test/data/regression_data_no_constant.pred @@ -1,2 +1,2 @@ -0.034453 -0.172265 +0.034454 +0.172271 diff --git a/vowpalwabbit/slim/test/ut_util.cc b/vowpalwabbit/slim/test/ut_util.cc index 431a38d4649..65e8be040b2 100644 --- a/vowpalwabbit/slim/test/ut_util.cc +++ b/vowpalwabbit/slim/test/ut_util.cc @@ -8,6 +8,7 @@ #include +#include #include #include #include @@ -85,7 +86,6 @@ test_data get_test_data(const char* model_filename) TEST_DATA(model_filename, regression_data_ignore_linear); TEST_DATA(model_filename, multiclass_data_4); TEST_DATA(model_filename, multiclass_data_5); - TEST_DATA(model_filename, cb_data_epsilon_0_skype_jb); TEST_DATA(model_filename, cb_data_5); TEST_DATA(model_filename, cb_data_6); TEST_DATA(model_filename, cb_data_7); @@ -214,7 +214,7 @@ void run_predict_in_memory( // compare output std::vector preds_expected = read_floats(td.pred, td.pred_len); - EXPECT_THAT(preds, Pointwise(FloatNear(1e-5f), preds_expected)); + EXPECT_THAT(preds, Pointwise(FloatNear(1e-4f), preds_expected)); } enum class predict_param_weight_type @@ -343,11 +343,11 @@ TEST_P(invalid_model_test, Run) } invalid_model_param invalid_model_param[] = { - {"regression_data_1", regression_data_1_model, regression_data_1_model_len, {84, 92}, + {"regression_data_1", regression_data_1_model, regression_data_1_model_len, {54, 62}, predict_param_weight_type::SPARSE}, // 2 weights - {"regression_data_1", regression_data_1_model, regression_data_1_model_len, {84, 92}, + {"regression_data_1", regression_data_1_model, regression_data_1_model_len, {54, 62}, predict_param_weight_type::DENSE}, // 2 weights - {"regression_data_6", regression_data_6_model, regression_data_6_model_len, {99, 111, 123, 135}, + {"regression_data_6", regression_data_6_model, regression_data_6_model_len, {69, 81, 93, 105}, predict_param_weight_type::SPARSE} // 4 weights }; @@ -384,7 +384,9 @@ TEST(VowpalWabbitSlim, MulticlassData4) std::vector preds_expected = {0.901038f, 0.46983f, 0.0386223f}; // compare output - EXPECT_THAT(out_scores, Pointwise(FloatNear(1e-5f), preds_expected)); + std::sort(out_scores.begin(), out_scores.end()); + std::sort(preds_expected.begin(), preds_expected.end()); + EXPECT_THAT(out_scores, Pointwise(FloatNear(1e-4f), preds_expected)); } TEST(VowpalWabbitSlim, MulticlassData5) @@ -429,51 +431,13 @@ TEST(VowpalWabbitSlim, MulticlassData5) ASSERT_EQ(S_VW_PREDICT_OK, vw.predict(shared, ex, 8, out_scores)); - // 0:0.551784,3:0.551784,4:0.560359,7:0.560359,1:0.575381,5:0.592531,2:0.598978,6:0.624703 - std::vector preds_expected = { - 0.551784f, 0.575380862f, 0.598977983f, 0.5517838f, 0.560358882f, 0.592531085f, 0.624703348f, 0.560358882f}; + // 3:0.127492,3:0.438331,2:0.461522,2:0.668748,1:0.795552,1:0.795552,1:0.899165,1:0.899165 + std::vector preds_expected = {0.127492, 0.438331, 0.461522, 0.668748, 0.795552, 0.795552, 0.899165, 0.899165}; // compare output - EXPECT_THAT(out_scores, Pointwise(FloatNear(1e-5f), preds_expected)); -} - -void cb_data_epsilon_0_skype_jb_test_runner(int call_type, int modality, int network_type, int platform, - const std::vector& ranking_expected, const std::vector& pdf_expected) -{ - // load model. - vw_predict vw; - test_data td = get_test_data("cb_data_epsilon_0_skype_jb"); - ASSERT_EQ(0, vw.load((const char*)td.model, td.model_len)); - - // we have loaded the model and can push the features - VW::example_predict features; - vw_slim::example_predict_builder bOa(&features, "64"); // NOLINT - bOa.push_feature(static_cast(call_type), 1.f); - vw_slim::example_predict_builder bOb(&features, "16"); // NOLINT - bOb.push_feature(static_cast(modality), 1.f); - vw_slim::example_predict_builder bOc(&features, "32"); // NOLINT - bOc.push_feature(static_cast(network_type), 1.f); - vw_slim::example_predict_builder bOd(&features, "48"); // NOLINT - bOd.push_feature(static_cast(platform), 1.f); - - // push actions - const int min_delay_actions = 10; - VW::example_predict actions[min_delay_actions]; - for (int i = 0; i < min_delay_actions; i++) - { - vw_slim::example_predict_builder bOe(&actions[i], "80"); // NOLINT - bOe.push_feature(i, 1.f); - } - - // predict CB value - std::vector pdfs; - std::vector rankings; - int result = vw.predict("eid", features, actions, min_delay_actions, pdfs, rankings); - - // compare output with expected. - EXPECT_EQ(result, 0); - EXPECT_THAT(pdfs, Pointwise(FloatNear(1e-5f), pdf_expected)); - EXPECT_THAT(rankings, Pointwise(Eq(), ranking_expected)); + std::sort(out_scores.begin(), out_scores.end()); + std::sort(preds_expected.begin(), preds_expected.end()); + EXPECT_THAT(out_scores, Pointwise(FloatNear(1e-4f), preds_expected)); } TEST(VowpalWabbitSlim, InteractionNumBitsBug) @@ -522,52 +486,6 @@ TEST(VowpalWabbitSlim, InteractionNumBitsBug) EXPECT_EQ(rankings[0], 3); } -TEST(VowpalWabbitSlim, CbDataEpsilon0SkypeJb) -{ - // Since the model is epsilon=0, the first entry should always be 0. - std::vector pdf_expected = {1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; - - // {0, 1, 2, 0} => 1 - std::vector ranking_expected = {1, 0, 2, 3, 4, 5, 7, 6, 8, 9}; - cb_data_epsilon_0_skype_jb_test_runner(0, 1, 2, 0, ranking_expected, pdf_expected); - - // {0, 1, 4, 0} => 1 - ranking_expected = {1, 0, 2, 3, 4, 5, 6, 8, 7, 9}; - cb_data_epsilon_0_skype_jb_test_runner(0, 1, 4, 0, ranking_expected, pdf_expected); - - // {0, 0, 2, 0} => 1 - ranking_expected = {1, 2, 0, 3, 4, 5, 6, 7, 8, 9}; - cb_data_epsilon_0_skype_jb_test_runner(0, 0, 2, 0, ranking_expected, pdf_expected); - - // {0, 0, 4, 0} => 1 - ranking_expected = {1, 3, 2, 0, 4, 6, 5, 8, 7, 9}; - cb_data_epsilon_0_skype_jb_test_runner(0, 0, 4, 0, ranking_expected, pdf_expected); - - // {2, 0, 4, 0} => 3 - ranking_expected = {3, 1, 0, 2, 5, 4, 7, 6, 8, 9}; - cb_data_epsilon_0_skype_jb_test_runner(2, 0, 4, 0, ranking_expected, pdf_expected); - - // {0, 1, 999, 0} => 2 - ranking_expected = {2, 4, 6, 1, 0, 5, 3, 7, 8, 9}; - cb_data_epsilon_0_skype_jb_test_runner(0, 1, 999, 0, ranking_expected, pdf_expected); - - // {0, 0, 999, 0} => 2 - ranking_expected = {2, 4, 6, 1, 3, 5, 0, 7, 8, 9}; - cb_data_epsilon_0_skype_jb_test_runner(0, 0, 999, 0, ranking_expected, pdf_expected); - - // {2, 0, 999, 0} => 2 - ranking_expected = {2, 5, 4, 3, 6, 1, 0, 7, 8, 9}; - cb_data_epsilon_0_skype_jb_test_runner(2, 0, 999, 0, ranking_expected, pdf_expected); - - // {999, 0, 4, 0} => 1 - ranking_expected = {0, 1, 4, 2, 6, 3, 8, 7, 5, 9}; - cb_data_epsilon_0_skype_jb_test_runner(999, 0, 4, 0, ranking_expected, pdf_expected); - - // {999, 0, 2, 0} => 2 - ranking_expected = {0, 1, 4, 2, 7, 3, 6, 8, 5, 9}; - cb_data_epsilon_0_skype_jb_test_runner(999, 0, 2, 0, ranking_expected, pdf_expected); -} - void clear(VW::example_predict& ex) { for (auto ns : ex.indices) { ex.feature_space[ns].clear(); } @@ -670,38 +588,38 @@ TEST_P(cb_predict_test, CBRunPredict) //} #endif - EXPECT_THAT(histogram, Pointwise(FloatNear(1e-2f), GetParam().ranking_pdf_expected)); + EXPECT_THAT(histogram, Pointwise(FloatNear(2e-2f), GetParam().ranking_pdf_expected)); } cb_predict_param cb_predict_params[] = { - {"CB Epsilon Greedy", "cb_data_5", 10000, {0.1f, 0.1f, 0.8f}, + {"CB Epsilon Greedy", "cb_data_5", 10000, {0.8f, 0.1f, 0.1f}, { - // see top action 2 w / 0.8 - 0.1f, 0.09f, 0.80f, // slot 0 - // most of the time we should see action 2 - // in 10% we should see the top action 0 swapped from top-slot to here - 0.0f, 0.90f, 0.09f, // slot 1 - // most of the time we should see action 1 - // in 20% we should see the top action 2 swapped from top-slot to here - 0.89f, 0.0f, 0.10f, // slot 2 + 0.8f, 0.1f, 0.1f, // slot 0 + // most of the time we should see action 0 + 0.1f, 0.9f, 0.0f, // slot 1 + // most of the time we should see action 1 + // in 10% we should see the top action 0 swapped from top-slot to here + 0.1f, 0.0f, 0.9f, // slot 2 + // most of the time we should see action 2 + // in 10% we should see the top action 0 swapped from top-slot to here }}, - {"CB Softmax", "cb_data_6", 1000, {0.329f, 0.333f, 0.337f}, + {"CB Softmax", "cb_data_6", 1000, {0.664f, 0.245f, 0.090f}, { - 0.328f, 0.354f, 0.316f, // slot 0 - 0.000f, 0.644f, 0.354f, // slot 1 - 0.671f, 0.000f, 0.328f, // slot 2 + 0.664f, 0.245f, 0.090f, // slot 0 + 0.245f, 0.755f, 0.000f, // slot 1 + 0.090f, 0.000f, 0.910f, // slot 2 }}, - {"CB Bag", "cb_data_7", 5, {0.0f, 0.0f, 1.0f}, + {"CB Bag", "cb_data_7", 5, {1.0f, 0.0f, 0.0f}, { - 0.0f, 0.0f, 1.0f, // slot 0 + 1.0f, 0.0f, 0.0f, // slot 0 0.0f, 1.0f, 0.0f, // slot 1 - 1.0f, 0.0f, 0.0f, // slot 2 + 0.0f, 0.0f, 1.0f, // slot 2 }}, - {"CB Bag Epsilon Greedy", "cb_data_8", 10000, {0.09f, 0.09f, 0.82f}, + {"CB Bag Epsilon Greedy", "cb_data_8", 10000, {0.82f, 0.09f, 0.09f}, { - 0.091f, 0.086f, 0.82f, // slot 0 - 0.00f, 0.91f, 0.086f, // slot 1 - 0.90f, 0.00f, 0.09f, // slot 2 + 0.82f, 0.09f, 0.09f, // slot 0 + 0.09f, 0.91f, 0.00f, // slot 1 + 0.09f, 0.00f, 0.91f, // slot 2 }}, }; From f204897f2f020f3102a8080e3cef0b0531a2ee0a Mon Sep 17 00:00:00 2001 From: Etienne Kintzler Date: Thu, 23 May 2024 17:30:50 +0200 Subject: [PATCH 3/3] docs: Simplification of the DFtoVW tutorial (#4693) * first version of the simplified tutorial * fix typo + rm dedicated section for df creation * rename title * use black linting * use default kernel --------- Co-authored-by: Griffin Bassman --- .../python_simplified_dftovw_tuto.ipynb | 307 ++++++++++++++++++ 1 file changed, 307 insertions(+) create mode 100644 python/docs/source/tutorials/python_simplified_dftovw_tuto.ipynb diff --git a/python/docs/source/tutorials/python_simplified_dftovw_tuto.ipynb b/python/docs/source/tutorials/python_simplified_dftovw_tuto.ipynb new file mode 100644 index 00000000000..85f9c1efc99 --- /dev/null +++ b/python/docs/source/tutorials/python_simplified_dftovw_tuto.ipynb @@ -0,0 +1,307 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "51f41eaf-f24f-44fc-8178-3270efa46ec4", + "metadata": {}, + "source": [ + "# Simple pandas to vowpalwabbit conversion tutorial" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "b9a21a43-39ad-4213-9c7f-814bbafd8a54", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from vowpalwabbit.dftovw import DFtoVW\n", + "from vowpalwabbit import Workspace" + ] + }, + { + "cell_type": "markdown", + "id": "fc831353-b5aa-4bb0-a928-c47b340397a5", + "metadata": {}, + "source": [ + "### Building simple examples using `DftoVW.from_column_names`" + ] + }, + { + "cell_type": "markdown", + "id": "c60089f1-ce41-49ee-a3a9-74f0fb2cb34f", + "metadata": {}, + "source": [ + "Let's create the following pandas dataframe:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a31118c2-b315-4129-b28a-2ea37d2dae50", + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.DataFrame(\n", + " [\n", + " {\n", + " \"income\": 0,\n", + " \"age\": 27,\n", + " \"marital-status\": \"Separated\",\n", + " \"education\": \"HS-grad\",\n", + " \"occupation\": \"Handlers-cleaners\",\n", + " \"hours-per-week\": 25,\n", + " },\n", + " {\n", + " \"income\": 1,\n", + " \"age\": 34,\n", + " \"marital-status\": \"Married-civ-spouse\",\n", + " \"education\": \"Bachelors\",\n", + " \"occupation\": \"Prof-specialty\",\n", + " \"hours-per-week\": 40,\n", + " },\n", + " {\n", + " \"income\": 0,\n", + " \"age\": 44,\n", + " \"marital-status\": \"Never-married\",\n", + " \"education\": \"Assoc-voc\",\n", + " \"occupation\": \"Priv-house-serv\",\n", + " \"hours-per-week\": 25,\n", + " },\n", + " {\n", + " \"income\": 1,\n", + " \"age\": 38,\n", + " \"marital-status\": \"Married-civ-spouse\",\n", + " \"education\": \"Bachelors\",\n", + " \"occupation\": \"Prof-specialty\",\n", + " \"hours-per-week\": 60,\n", + " },\n", + " {\n", + " \"income\": 0,\n", + " \"age\": 34,\n", + " \"marital-status\": \"Married-civ-spouse\",\n", + " \"education\": \"HS-grad\",\n", + " \"occupation\": \"Other-service\",\n", + " \"hours-per-week\": 36,\n", + " },\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "473e5c72-ab6c-4d72-a466-7352ec604393", + "metadata": {}, + "source": [ + "The user builds the examples using the class method `DftoVW.from_column_names`. The method is called using the dataframe object (`df`) and its various column names. The conversion to vowpal wabbit examples is then performed by calling the `convert_df` method:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "2be83f6c-ecaa-45cb-bb3f-2f47827d6016", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['0 | age:27 marital-status=Separated education=HS-grad occupation=Handlers-cleaners hours-per-week:25',\n", + " '1 | age:34 marital-status=Married-civ-spouse education=Bachelors occupation=Prof-specialty hours-per-week:40',\n", + " '0 | age:44 marital-status=Never-married education=Assoc-voc occupation=Priv-house-serv hours-per-week:25',\n", + " '1 | age:38 marital-status=Married-civ-spouse education=Bachelors occupation=Prof-specialty hours-per-week:60',\n", + " '0 | age:34 marital-status=Married-civ-spouse education=HS-grad occupation=Other-service hours-per-week:36']" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "converter = DFtoVW.from_column_names(\n", + " df=df,\n", + " y=\"income\",\n", + " x=[\"age\", \"marital-status\", \"education\", \"occupation\", \"hours-per-week\"],\n", + ")\n", + "examples = converter.convert_df()\n", + "examples" + ] + }, + { + "cell_type": "markdown", + "id": "6109f95e-cd17-485b-947d-8c2c33a5843a", + "metadata": {}, + "source": [ + "Note that the vowpal wabbit format for categorical features is `feature_name=feature_value` whereas for numerical features the format is `feature_name:feature_value`. When using `DFtoVW` class, the appropriate format will be inferred from the dataframe columns types.\n", + "\n", + "We then train the model on these examples:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c0269980-78b3-4123-84eb-27e0fba929b4", + "metadata": {}, + "outputs": [], + "source": [ + "model = Workspace(P=1, enable_logging=True)\n", + "\n", + "for ex in examples:\n", + " model.learn(ex)\n", + "model.finish()" + ] + }, + { + "cell_type": "markdown", + "id": "50470ca2-f33d-495e-a3f9-46ae1a618e6d", + "metadata": {}, + "source": [ + "### Building more complex examples" + ] + }, + { + "cell_type": "markdown", + "id": "30a526a6-7f8f-48e4-8dca-f9058a0d87fb", + "metadata": {}, + "source": [ + "The class method `DFtoVW.from_column_names` represents a quick and simple way to build the examples, but if the user needs more control over the way the examples are created, she or he can either use the class `Feature` or the class `Namespace` for building features, and any of the label class available (see below) based on the nature of the task. \n", + "\n", + "- When using `Namespace` class (see https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Namespaces for the meaning) the user specifies the name of the namespace with the `name` field, and will pass one or a list of `Feature` object to the `features` field.\n", + "\n", + "- The `Feature` class has a `value` field, which is the name of the column. The user can also rename the feature using the `rename_feature` field or choose to enforce a specific type (`\"numerical\"` or `\"categorical\"`) using `as_type` field.\n", + "\n", + "Regarding the labels, multiple classes are available:\n", + "- `SimpleLabel` for regression\n", + "- `MulticlassLabel` and `Multilabel` for classification\n", + "- `ContextualbanditLabel`.\n", + "\n", + "In the following examples we'll build 2 namespaces based on socio-demographic features and the job features." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "90a69d90-a0a6-42d4-8867-5d1b0e73f4ec", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['0 |ns_sociodemo age:27 marital-status=Separated education=HS-grad |ns_job occupation=Handlers-cleaners hours-per-week:25',\n", + " '1 |ns_sociodemo age:34 marital-status=Married-civ-spouse education=Bachelors |ns_job occupation=Prof-specialty hours-per-week:40',\n", + " '0 |ns_sociodemo age:44 marital-status=Never-married education=Assoc-voc |ns_job occupation=Priv-house-serv hours-per-week:25',\n", + " '1 |ns_sociodemo age:38 marital-status=Married-civ-spouse education=Bachelors |ns_job occupation=Prof-specialty hours-per-week:60',\n", + " '0 |ns_sociodemo age:34 marital-status=Married-civ-spouse education=HS-grad |ns_job occupation=Other-service hours-per-week:36']" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from vowpalwabbit.dftovw import SimpleLabel, Namespace, Feature\n", + "\n", + "ns_sociodemo = Namespace(\n", + " features=[Feature(col) for col in [\"age\", \"marital-status\", \"education\"]],\n", + " name=\"ns_sociodemo\",\n", + ")\n", + "ns_job = Namespace(\n", + " features=[Feature(col) for col in [\"occupation\", \"hours-per-week\"]], name=\"ns_job\"\n", + ")\n", + "label = SimpleLabel(\"income\")\n", + "\n", + "converter_advanced = DFtoVW(df=df, namespaces=[ns_sociodemo, ns_job], label=label)\n", + "examples_advanced = converter_advanced.convert_df()\n", + "examples_advanced[:5]" + ] + }, + { + "cell_type": "markdown", + "id": "071326d7-f969-4db1-a73e-3cee225921f4", + "metadata": {}, + "source": [ + "We train the model by also including interactions between the variables of the 2 namespaces:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "f0ed661f-d9a0-4ebb-93b8-f5747347c7b4", + "metadata": {}, + "outputs": [], + "source": [ + "model_advanced = Workspace(\n", + " # arg_str=\"--interactions ns_sociodemo:ns_job\", P=1, enable_logging=True\n", + " arg_str=\"--redefine a:=ns_job b:=ns_sociodemo -q ab \",\n", + " P=1,\n", + " enable_logging=True,\n", + ")\n", + "\n", + "for ex in examples_advanced:\n", + " model_advanced.learn(ex)\n", + "\n", + "model_advanced.finish()" + ] + }, + { + "cell_type": "markdown", + "id": "5bb2208e-9d0e-44ef-8d91-faccedf41ac0", + "metadata": {}, + "source": [ + "Finally, we can get the estimated weights associated to each namespace and feature:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "06aabeab-2365-4f86-bf60-7043b0e59190", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[('ns_job', 'occupation', 0.0),\n", + " ('ns_job', 'hours-per-week', 0.0019117757910862565),\n", + " ('ns_sociodemo', 'age', 0.001858704723417759),\n", + " ('ns_sociodemo', 'marital-status', 0.0),\n", + " ('ns_sociodemo', 'education', 0.0)]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[\n", + " (ns.name, feature.name, model_advanced.get_weight_from_name(feature.name, ns.name))\n", + " for ns in [ns_job, ns_sociodemo]\n", + " for feature in ns.features\n", + "]" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}