Xgboost: v1.2.1 рдФрд░ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдореЗрдВ рдЕрд▓рдЧ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА

рдХреЛ рдирд┐рд░реНрдорд┐рдд 6 рдирд╡ре░ 2020  ┬╖  35рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dmlc/xgboost

рдореИрдВ рдЕрдЬрдЧрд░ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╕рд╛рди рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд╕рдВрд╕реНрдХрд░рдг 1.2.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ c_api рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╕реА рдХреЛрдб рднреА рд▓рд┐рдЦрддрд╛ рд╣реВрдВред рдпрджрд┐ v1.2.1 libxgboost.so рд╕реЗ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЕрдЬрдЧрд░ рдФрд░ c рдХреЗ рдмреАрдЪ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпреЛрдВ рдХрд╛ рдЕрдВрддрд░ рдмрд┐рд▓реНрдХреБрд▓ рд╢реВрдиреНрдп рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рд╕реЗ libxgboost.so рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ (5 рдирд╡рдВрдмрд░, 2020 рдХреЛ f3a425398 рдкреНрд░рддрд┐рдмрджреНрдз), рддреЛ рдПрдХ рдЕрдВрддрд░ рд╣реИред

рдореИрдВ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реА рдХреЛрдб рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рд╕реНрдерд┐рд░ lib рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдЕрдм v1.2.1 рдФрд░ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреЗ рдмреАрдЪ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпреЛрдВ рдХрд╛ рдЕрдВрддрд░ рдореБрдЭреЗ рд░реЛрдХрддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рджред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@ShvetsKS

рдХреНрдпрд╛ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдВрддрд░ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдирддреЗ рд╣реИрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ рдЬреЛ рдЕрдиреБрдорд╛рди рдХреЗ рд▓рд┐рдП рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо ( @RAMitchell , @ рддреБрдЪреНрдЫрдлрд╝реАрд╕ , рдФрд░ рдореИрдВ ) рдпрд╣рд╛рдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реИрдВред рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рд╕рдЯреАрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдпрддрд╛ рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рд╣рдорд╛рд░реА рдХреНрд╖рдорддрд╛ рдореЗрдВ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдмрд╛рдзрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреАред рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдкреНрд░рд╕рд┐рджреНрдз рд░реВрдк рд╕реЗ рдЧреИрд░-рд╕рд╣рдпреЛрдЧреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛ рдХреА рд╕реВрдЪреА рдХрд╛ рдпреЛрдЧ рдЬреЛрдбрд╝ рдХреЗ рдХреНрд░рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред

XGBoost 1.2.0 рдФрд░ рдирд╡реАрдирддрдо master рд╢рд╛рдЦрд╛ рдХреЗ рдмреАрдЪ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдореЗрдВ рдХрд┐рддрдирд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдкреНрд░рдпреЛрдЧ рдЪрд▓рд╛рдпрд╛ рд╣реИ:
Distribution of change in prediction

рдореИрдВрдиреЗ 1000 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ 1.2.0 рдФрд░ рдорд╛рд╕реНрдЯрд░ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП 1000 рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреАред рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдмреАрдЬреЛрдВ рдХреЗ рдмреАрдЪ рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд░ рдХрднреА рднреА 9.2e-7 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдкрд░рд┐рд╡рд░реНрддрди рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рдХрд╛рд░рдг рд╣реБрдЖ рдерд╛ рди рдХрд┐ рддрд░реНрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг ред

рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ

**test.py**: рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░реИрдВрдбрдо рдмреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде 1000 рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдкреНрд░реЗрдбрд┐рдХреНрд╢рди рдЪрд▓рд╛рдПрдВред

import numpy as np
import xgboost as xgb
import argparse

def main(args):
    m2 = xgb.Booster({'nthread': '4'})  # init model
    m2.load_model('xgb.model.bin')  # load data
    out = {}
    for seed in range(1000):
        rng = np.random.default_rng(seed=seed)
        rx = rng.standard_normal(size=(100, 127 + 7 + 1))
        rx = rx.astype(np.float32, order='C')
        dtest = xgb.DMatrix(rx, missing=0.0)
        out[str(seed)] = m2.predict(dtest)
    np.savez(args.out_pred, **out)

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--out-pred', type=str, required=True)
    args = parser.parse_args()
    main(args)
рдХрдорд╛рдВрдб: `рдкрд╛рдпрдерди test.py --out-pred [out.npz]`ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ Python env рдореЗрдВ XGBoost рдХрд╛ рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдЖрдЗрдП рдорд╛рди рд▓реЗрдВ рдХрд┐ `xgb120.npz` XGBoost 1.2.0 рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ `xgblatest.npz` рдирд╡реАрдирддрдо рдорд╛рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред **рддреБрд▓рдирд╛ рдХрд░реЗрдВ.py**: рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рдЕрдВрддрд░ рдХреЗ рд▓рд┐рдП рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдкреНрд▓реЙрдЯ рдмрдирд╛рдПрдВ
import numpy as np
import matplotlib.pyplot as plt

xgb120 = np.load('xgb120.npz')
xgblatest = np.load('xgblatest.npz')

percentile_pts = [50, 90, 99]

colors = ['tab:cyan', 'tab:olive', 'tab:green', 'tab:pink']

percentile = {}
for x in percentile_pts:
    percentile[x] = []
percentile['max'] = []

for seed in range(1000):
    diff = np.abs(xgb120[str(seed)] - xgblatest[str(seed)])
    t = np.percentile(diff, percentile_pts)
    for x, y in zip(percentile_pts, t):
        percentile[x].append(y)
    percentile['max'].append(np.max(diff))

bins = np.linspace(0, np.max(percentile['max']), 100)
idx = 0
for x in percentile_pts:
    plt.hist(percentile[x], label=f'Percentile {x}%', bins=bins, alpha=0.8, color=colors[idx])
    idx += 1
plt.hist(percentile['max'], label='Max', bins=bins, alpha=0.8, color=colors[idx])
plt.legend(loc='best')
plt.title('Distribution in prediction difference between XGBoost 1.2.0\nand master branch, tried over seed=[0..1000]')
plt.xlabel('Absolute difference')
plt.ylabel('Frequency')
plt.savefig('foobar.png', dpi=100)

рд╕рднреА 35 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рдмрдЧ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХреЗрдВ?

рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдЖрдкрдХреЛ Python рдкреИрдХреЗрдЬ рдХреЗ рдорд╛рд╕реНрдЯрд░ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ C API рд╕реЗ рднрд┐рдиреНрди рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ?

рд╕реАрдкреАрдпреВ рдкреНрд░реЗрдбрд┐рдХреНрдЯрд░ рдкрд░ рдХреБрдЫ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдПрд░рд░ рд╕реЗ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг рд╣реИ?

рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдЖрдкрдХреЛ Python рдкреИрдХреЗрдЬ рдХреЗ рдорд╛рд╕реНрдЯрд░ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ C API рд╕реЗ рднрд┐рдиреНрди рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ?

рдореИрдВ рдЕрдЬрдЧрд░ рдкреИрдХреЗрдЬ рдХреЗ v1.2.1 рдФрд░ рд╕реА рдПрдкреАрдЖрдИ рдХреА рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@7starsea рдХреНрдпрд╛ рдЖрдк рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рд╕реЗ рдкрд╛рдпрдерди рдФрд░ рд╕реА рдПрдкреАрдЖрдИ рджреЛрдиреЛрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреА рддреБрд▓рдирд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╕рдорд╕реНрдпрд╛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ C API рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

@7starsea рдХреНрдпрд╛ рдЖрдк рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рд╕реЗ рдкрд╛рдпрдерди рдФрд░ рд╕реА рдПрдкреАрдЖрдИ рджреЛрдиреЛрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреА рддреБрд▓рдирд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╕рдорд╕реНрдпрд╛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ C API рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдореИрдВрдиреЗ рдЕрдЬрдЧрд░ рдФрд░ рд╕реА рдПрдкреАрдЖрдИ рдХреА рддреБрд▓рдирд╛ рдХреА, рджреЛрдиреЛрдВ v1.2.1 рд╕реЗ рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реИрдВред

@7starsea рд╕рдордЭ рдЧрдпрд╛ред рдпрджрд┐ рдЖрдк Python рдФрд░ C рджреЛрдиреЛрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреЛрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╣реА рдореЙрдбрд▓ рд╕реЗ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдФрд░ рдирд┐рд╡рд╛рд░рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

@ hcho3 рдпрд╣рд╛рдБ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рд╣реИ

https://github.com/7starsea/xgboost-testing

@ 7starsea рдореИрдВрдиреЗ рдЕрднреА рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛:

difference: [0. 0. 0. 0.] 0.0 0.0

рдореИрдВрдиреЗ XGBoost (debeae2509d90ec1d3402a3a185fba7a25113ff1) рдХреА рдирд╡реАрдирддрдо рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

@ 7starsea рдореИрдВрдиреЗ рдЕрднреА рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛:

difference: [0. 0. 0. 0.] 0.0 0.0

рдореИрдВрдиреЗ XGBoost ( debeae2 ) рдХреА рдирд╡реАрдирддрдо рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдЕрдЬрдЧрд░ рд╕рдВрд╕реНрдХрд░рдг v1.2.1 рд╣реИ?

рдореБрдЭреЗ рдЕрднреА рднреА XGBoost ( debeae2 ) рд╕реЗ рдЬреБрдбрд╝реЗ рдЕрдЬрдЧрд░-рд╕рдВрд╕реНрдХрд░рдг 1.2.1 рдФрд░ c рдПрдкреАрдЖрдИ рдХреЗ рдмреАрдЪ рдХреБрдЫ рдЕрдВрддрд░ рд╣реИред

@7starsea рдирд╣реАрдВ, рдореИрдВрдиреЗ рдирд╡реАрдирддрдо рд╕реНрд░реЛрдд рд╕реЗ XGBoost рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ (рдкреНрд░рддрд┐рдмрджреНрдз debeae2509d90ec1d3402a3a185fba7a25113ff1), рдЗрд╕рд▓рд┐рдП рдпрд╣ v1.2.1 рд╕реЗ рдЕрдзрд┐рдХ рд╣рд╛рд▓ рдХрд╛ рд╣реИред рдореЗрд░рд╛ XGBoost Python рдкреИрдХреЗрдЬ 1.3.0-SNAPSHOT xgboost.__version__ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП

@ hcho3 рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ XGBoost рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ (рдХрдо рд╕реЗ рдХрдо рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ) рдХреЗ рдмреАрдЪ рд▓рдЧрд╛рддрд╛рд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП?
рд╕рд╛рде рд╣реА v1.3.0 рдХреЗ рд░рд┐рд▓реАрдЬ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред
(рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдм рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)
рдЖрдкрдХреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@7starsea рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╕рд╣реЗрдЬреЗ рдЧрдП рдореЙрдбрд▓ рдХреЛ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдЖрдкрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ред рдХреНрдпрд╛ рдЖрдк рдбреЙрдХрд░ рдЫрд╡рд┐ рдпрд╛ рд╡реАрдПрдо рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдореЗрд░реЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@7starsea FYI рдХрд░реЗрдВ, рдореИрдВрдиреЗ рд╕реНрд░реЛрдд рд╕реЗ XGBoost 1.2.1 рдмрдирд╛рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

git clone --recursive https://github.com/dmlc/xgboost -b release_1.2.0 xgb_source
cd xgb_source
mkdir build
cd build
cmake ..
make
cd ../python-package
python setup.py install

рдкрд░рд┐рдгрд╛рдо рдлрд┐рд░ рд╕реЗ difference: [0. 0. 0. 0.] 0.0 0.0 рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ

рдЕрдВрддрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ XGBoost рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдг рдЪрд╛рд╣рд┐рдП, рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП v1.2.1 рдФрд░

dtest = xgb.DMatrix(rx, missing=0.0)
y1 = m2.predict(dtest)   # # internally using libxgboost.so  v1.2.1

рдФрд░ cpp . рдХреЗ рд▓рд┐рдП рдПрдХ

m1 = XgbShannonPredictor(fname)
y2 = m1.predict(rx2)   # # internally using libxgboost.so from the master branch (debeae2)

рдореИрдВ рдПрдХ рдбреЙрдХрд░ рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ (рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдирдпрд╛ рд╣реИ)ред

рдореБрдЭреЗ рджреЗрдЦрдиреЗ рджреЛред

рдореИрдВ рдПрдХ рдбреЙрдХрд░ рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ (рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдирдпрд╛ рд╣реИ)ред

рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВред

рдЕрд╕рд▓ рдореЗрдВ, рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ XGBoost рдХрд╛ рджреЗрд╡ рд╕рдВрд╕реНрдХрд░рдг XGBoost 1.2.0 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ; рд╕реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг (рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬ рдХреА рд╕реНрдерд╛рдкрдирд╛):

import numpy as np
import xgboost as xgb

rng = np.random.default_rng(seed=2020)
rx = rng.standard_normal(size=(100, 127 + 7 + 1))
rx = rx.astype(np.float32, order='C')

m2 = xgb.Booster({'nthread': '4'})  # init model
m2.load_model('xgb.model.bin')  # load data

dtest = xgb.DMatrix(rx, missing=0.0)
y1 = m2.predict(dtest)
print(xgb.__version__)
print(y1)

1.2.0 рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ:

1.2.0
[ 0.00698659 -0.00211251  0.00180039 -0.00016004  0.00526169  0.00801963
  0.00016755  0.00226218  0.00276762  0.00408182  0.00303206  0.00291929
  0.01101092  0.0068329   0.00145864  0.00326979  0.00572816  0.01019934
  0.00074345  0.00784767  0.00173795 -0.00219297  0.0060181   0.00606489
  0.00447372  0.00103396  0.00932363  0.00230178  0.00389203  0.00151157
  0.0034163   0.00821933  0.006686    0.00630778  0.00331488  0.00775066
  0.00443819  0.01030204  0.00924486  0.00645933  0.00777653  0.00231206
  0.00457835  0.00390425  0.00947028  0.00410065  0.00220913  0.00292507
  0.00637993  0.00796807  0.00140873  0.00887537  0.00496858  0.01049942
  0.00908098  0.00332722  0.00799242  0.00228494  0.00463879  0.00213429
  0.00729388  0.01049232  0.00790522  0.01269361 -0.00425893  0.00256333
  0.00859573  0.00472835  0.00077197  0.00191873  0.01546788  0.0014475
  0.00888193  0.00648022  0.00115797  0.00351191  0.00580138  0.00614035
  0.00632426  0.00408354  0.00346044 -0.00034332  0.00599384  0.00302595
  0.00657633  0.01086903  0.00625807  0.00096565  0.00061804  0.00038511
  0.00523874  0.00633043  0.00379965  0.00302553 -0.00123322  0.00153473
  0.00725579  0.00836438  0.01295918  0.00737873]

рдзреНрдпрд╛рди рджреЗрдВред XGBoost 1.0.0 рдФрд░ 1.1.0 рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рд╕реЗ 1.2.0 рдХреЗ рд╕рдорд╛рди рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИред

рджреЗрд╡ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ (c5645180a6afb9d3d771165e681985fe3522adf6)

1.3.0-SNAPSHOT
[ 0.00698666 -0.00211278  0.00180034 -0.00016027  0.00526194  0.00801962
  0.00016758  0.00226211  0.00276773  0.00408198  0.00303223  0.00291933
  0.01101091  0.00683288  0.00145871  0.00326988  0.00572827  0.01019943
  0.00074329  0.00784767  0.00173803 -0.00219286  0.00601804  0.00606472
  0.00447388  0.00103391  0.00932358  0.00230171  0.003892    0.00151177
  0.00341637  0.00821943  0.00668607  0.00630774  0.00331502  0.00775074
  0.0044381   0.01030211  0.00924495  0.00645958  0.00777672  0.00231205
  0.00457842  0.00390424  0.00947046  0.00410091  0.0022092   0.00292498
  0.00638005  0.00796804  0.00140869  0.00887531  0.00496863  0.01049942
  0.00908096  0.00332738  0.00799218  0.00228496  0.004639    0.00213413
  0.00729368  0.01049243  0.00790528  0.01269368 -0.00425872  0.00256319
  0.00859569  0.00472848  0.0007721   0.00191874  0.01546813  0.00144742
  0.00888212  0.00648021  0.00115819  0.00351191  0.00580168  0.00614044
  0.00632418  0.0040833   0.00346038 -0.00034315  0.00599405  0.00302578
  0.0065765   0.01086897  0.00625799  0.00096572  0.00061766  0.00038494
  0.00523901  0.00633054  0.00379964  0.00302567 -0.00123339  0.00153471
  0.00725584  0.00836433  0.01295913  0.00737863]

@ hcho3 рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдореИрдВ рджреНрд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдПрдХ рд╕реЗрдХрдВрдб рд░реБрдХреЛ, рдореИрдВ рдЕрдкрдиреЗ рд░реЗрдкреНрд░реЛ рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬ рд╕реЗрдЯ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ред рдореБрдЭреЗ рдореВрд░реНрдЦред

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд░реЗрдкреНрд░реЛ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ред рдмрдЧ рдЕрднреА рднреА рдХрд╛рдпрдо рд╣реИред рдореИрдВрдиреЗ XGBoost 1.0.0 рдФрд░ 1.1.0 рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯреЗрдб рд░реЗрдкреНрд░реЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ XGBoost 1.2.0 рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╕реЗ рд╕рд╣рдордд рд╣реИрдВред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:

Prediction from 1.0.0
==  Prediction from 1.1.0
==  Prediction from 1.2.0
!=  Prediction from latest master

@рдЯреНрд░рд┐рд╡рд┐рдпрд▓рдлрд┐рд╕ рд╣рд╛рдВ, рдЖрдкрдХреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред

рдЗрд╕реЗ рдЕрд╡рд░реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ.

рд╕рдордЭ рд▓рд┐рдпрд╛ред

a4ce0eae43f7e0e2f91566ef2360830b86b9fdcf рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред @ShvetsKS рдХреНрдпрд╛ рдЖрдк рдПрдХ рдирдЬрд╝рд░

a4ce0ea рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред @ShvetsKS рдХреНрдпрд╛ рдЖрдк рдПрдХ рдирдЬрд╝рд░

рдЬрд╝рд░реВрд░ред рдХреНрдпрд╛ рдЖрдк рдЕрдЬрдЧрд░ рдкреБрдирд░реБрддреНрдкрд╛рджрдХ рд╕реЗ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
m2.load_model('xgb.model.bin') # load data
рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ XGBoost рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреМрди рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП?

@ShvetsKS рдЖрдк https://github.com/7starsea/xgboost-testing рд╕реЗ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ xgb.model.bin рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдореЙрдбрд▓ рдХреЛ 1.0.0 рдХреЗ рд╕рд╛рде рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

@ShvetsKS рдЖрдк https://github.com/7starsea/xgboost-testing рд╕реЗ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ xgb.model.bin рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдореЙрдбрд▓ рдХреЛ 1.0.0 рдХреЗ рд╕рд╛рде рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореЙрдбрд▓ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 1.2.1 рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

 param = {'max_depth': 8, 'eta': 0.1, 'min_child_weight': 2, 'gamma': 1e-8, 'subsample': 0.6, 'nthread': 4}

рдзрдиреНрдпрд╡рд╛рджред

рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЫреЛрдЯрд╛ рдЕрдВрддрд░ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрджрд▓реЗ рд╣реБрдП рдХреНрд░рдо рдХреЗ рдХрд╛рд░рдг рд╣реИред
_рд╕рдЯреАрдХ рдХрд╛рд░рдг:_
a4ce0ea рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рд╕рднреА рдЯреНрд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдЪрд░ psum (рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░) рдореЗрдВ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ рдФрд░ out_preds рд╕реЗ рдЙрдЪрд┐рдд рдорд╛рди рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░рддреЗ рд╣реИрдВред
A4ce0ea рдореЗрдВ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЯреНрд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ out_preds рдорд╛рди рдмрдврд╝рд╛рддреЗ рд╣реИрдВред

рдлрд┐рдХреНрд╕ рддреИрдпрд╛рд░ рд╣реИ: https://github.com/dmlc/xgboost/pull/6384

@ 7starsea рдЕрдВрддрд░ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХреНрдпрд╛ рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕реБрдзрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@ hcho3, @trivialfis рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдВрддрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ рдЬреЛ рдЕрдиреБрдорд╛рди рдХреЗ рд▓рд┐рдП рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдРрд╕реА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рд╣реЛред

рдХреНрдпрд╛ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдВрддрд░ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдирддреЗ рд╣реИрдВ?

рдЖрдорддреМрд░ рдкрд░ рдирд╣реАрдВред рдореБрдЭреЗ рдЖрдкрдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рджреЗрдВред ;-)

@ShvetsKS рдореИрдВрдиреЗ рдЕрднреА рдЬрд╛рдБрдЪ рдХреА рд╣реИ рдФрд░ рдЕрдВрддрд░ рдЕрдм рдмрд┐рд▓реНрдХреБрд▓ рд╢реВрдиреНрдп рд╣реИред рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЕрдВрддрд░ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@ShvetsKS

рдХреНрдпрд╛ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдВрддрд░ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдирддреЗ рд╣реИрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ рдЬреЛ рдЕрдиреБрдорд╛рди рдХреЗ рд▓рд┐рдП рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо ( @RAMitchell , @ рддреБрдЪреНрдЫрдлрд╝реАрд╕ , рдФрд░ рдореИрдВ ) рдпрд╣рд╛рдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реИрдВред рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рд╕рдЯреАрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдпрддрд╛ рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рд╣рдорд╛рд░реА рдХреНрд╖рдорддрд╛ рдореЗрдВ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдмрд╛рдзрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреАред рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдкреНрд░рд╕рд┐рджреНрдз рд░реВрдк рд╕реЗ рдЧреИрд░-рд╕рд╣рдпреЛрдЧреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛ рдХреА рд╕реВрдЪреА рдХрд╛ рдпреЛрдЧ рдЬреЛрдбрд╝ рдХреЗ рдХреНрд░рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред

XGBoost 1.2.0 рдФрд░ рдирд╡реАрдирддрдо master рд╢рд╛рдЦрд╛ рдХреЗ рдмреАрдЪ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдореЗрдВ рдХрд┐рддрдирд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдкреНрд░рдпреЛрдЧ рдЪрд▓рд╛рдпрд╛ рд╣реИ:
Distribution of change in prediction

рдореИрдВрдиреЗ 1000 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ 1.2.0 рдФрд░ рдорд╛рд╕реНрдЯрд░ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП 1000 рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреАред рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдмреАрдЬреЛрдВ рдХреЗ рдмреАрдЪ рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд░ рдХрднреА рднреА 9.2e-7 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдкрд░рд┐рд╡рд░реНрддрди рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рдХрд╛рд░рдг рд╣реБрдЖ рдерд╛ рди рдХрд┐ рддрд░реНрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг ред

рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ

**test.py**: рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░реИрдВрдбрдо рдмреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде 1000 рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдкреНрд░реЗрдбрд┐рдХреНрд╢рди рдЪрд▓рд╛рдПрдВред

import numpy as np
import xgboost as xgb
import argparse

def main(args):
    m2 = xgb.Booster({'nthread': '4'})  # init model
    m2.load_model('xgb.model.bin')  # load data
    out = {}
    for seed in range(1000):
        rng = np.random.default_rng(seed=seed)
        rx = rng.standard_normal(size=(100, 127 + 7 + 1))
        rx = rx.astype(np.float32, order='C')
        dtest = xgb.DMatrix(rx, missing=0.0)
        out[str(seed)] = m2.predict(dtest)
    np.savez(args.out_pred, **out)

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--out-pred', type=str, required=True)
    args = parser.parse_args()
    main(args)
рдХрдорд╛рдВрдб: `рдкрд╛рдпрдерди test.py --out-pred [out.npz]`ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ Python env рдореЗрдВ XGBoost рдХрд╛ рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдЖрдЗрдП рдорд╛рди рд▓реЗрдВ рдХрд┐ `xgb120.npz` XGBoost 1.2.0 рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ `xgblatest.npz` рдирд╡реАрдирддрдо рдорд╛рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред **рддреБрд▓рдирд╛ рдХрд░реЗрдВ.py**: рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рдЕрдВрддрд░ рдХреЗ рд▓рд┐рдП рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдкреНрд▓реЙрдЯ рдмрдирд╛рдПрдВ
import numpy as np
import matplotlib.pyplot as plt

xgb120 = np.load('xgb120.npz')
xgblatest = np.load('xgblatest.npz')

percentile_pts = [50, 90, 99]

colors = ['tab:cyan', 'tab:olive', 'tab:green', 'tab:pink']

percentile = {}
for x in percentile_pts:
    percentile[x] = []
percentile['max'] = []

for seed in range(1000):
    diff = np.abs(xgb120[str(seed)] - xgblatest[str(seed)])
    t = np.percentile(diff, percentile_pts)
    for x, y in zip(percentile_pts, t):
        percentile[x].append(y)
    percentile['max'].append(np.max(diff))

bins = np.linspace(0, np.max(percentile['max']), 100)
idx = 0
for x in percentile_pts:
    plt.hist(percentile[x], label=f'Percentile {x}%', bins=bins, alpha=0.8, color=colors[idx])
    idx += 1
plt.hist(percentile['max'], label='Max', bins=bins, alpha=0.8, color=colors[idx])
plt.legend(loc='best')
plt.title('Distribution in prediction difference between XGBoost 1.2.0\nand master branch, tried over seed=[0..1000]')
plt.xlabel('Absolute difference')
plt.ylabel('Frequency')
plt.savefig('foobar.png', dpi=100)

рдЪреВрдВрдХрд┐ рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ + рдЬрд┐рд╕рдореЗрдВ рдлреНрд▓реЛрдЯ рдПрдХ рд╕рдореВрд╣ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ, рд╣рдо рд╣рдЯрд╛рдП рдЧрдП рдпреЛрдЧ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдПрдХ рдкреЗрдбрд╝ рдкрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдо рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рдЯреНрд░рд┐рд╡рд┐рдпрд▓рдлрд┐рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрдм рдореИрдВрдиреЗ ntree_limit=1 рддрд░реНрдХ рдХреЛ m2.predict() рдЬреЛрдбрд╝рд╛, рддреЛ рдЕрдВрддрд░ 0 рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдорд╣рд╛рди! рддреЛ рдЕрдЧрд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рд╣рдореЗрдВ рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред

рдореБрдЭреЗ рдЙрд╕ рдкрд░ рд╕реЛрдиреЗ рджреЛред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрд╣рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдмрдЧ рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

nnorton24 picture nnorton24  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

nicoJiang picture nicoJiang  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Str1ker17 picture Str1ker17  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pplonski picture pplonski  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

uasthana15 picture uasthana15  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ