From 4bbbd36bbfe75b03f6d4ed1c7ea6a4bbd863faee Mon Sep 17 00:00:00 2001 From: ablaom <30517088+ablaom@users.noreply.github.com> Date: Fri, 9 Oct 2026 03:32:50 +0000 Subject: [PATCH] update notebook markdown --- .../01_data_representation/notebook.md | 10 +- .../MLJTutorial/02_models/learning_curve.png | Bin 15822 -> 15552 bytes .../MLJTutorial/02_models/notebook.md | 276 ++++----- .../MLJTutorial/03_pipelines/notebook.md | 16 +- .../MLJTutorial/04_tuning/gamma_sampler.png | Bin 9276 -> 9334 bytes .../MLJTutorial/04_tuning/notebook.md | 4 +- .../MLJTutorial/04_tuning/tuning.png | Bin 41907 -> 41916 bytes .../MLJTutorial/05_composition/notebook.md | 100 ++-- .../99_solution_to_exercises/exercise_7c.png | Bin 22708 -> 23435 bytes .../99_solution_to_exercises/notebook.md | 64 +-- .../notebooks/UsingMLJ/01_basics/notebook.md | 89 ++- .../UsingMLJ/02_model_composition/notebook.md | 23 +- .../03_model_tuning/learning_curve.svg | 64 +-- .../UsingMLJ/03_model_tuning/notebook.md | 37 +- .../03_model_tuning/tuned_model_grid.svg | 534 +++++++++--------- .../03_model_tuning/tuned_model_random.svg | 492 ++++++++-------- docs/src/notebooks/lightning_tour/notebook.md | 34 +- learning_curve.svg | 64 +-- tuned_model_grid.svg | 534 +++++++++--------- tuned_model_random.svg | 492 ++++++++-------- 20 files changed, 1415 insertions(+), 1418 deletions(-) diff --git a/docs/src/notebooks/MLJTutorial/01_data_representation/notebook.md b/docs/src/notebooks/MLJTutorial/01_data_representation/notebook.md index 63dd2b0..6d04a3a 100644 --- a/docs/src/notebooks/MLJTutorial/01_data_representation/notebook.md +++ b/docs/src/notebooks/MLJTutorial/01_data_representation/notebook.md @@ -290,7 +290,7 @@ csv_file = Downloads.download(url) ```` ```` -"/tmp/jl_ruz0kP/horse.csv" +"/tmp/jl_kOThHT/horse.csv" ```` Entering these lines of code downloads the data to a temporary file at the location @@ -531,8 +531,8 @@ A = rand(2, 3) ```` 2×3 Matrix{Float64}: - 0.113155 0.33251 0.397839 - 0.171581 0.90293 0.436722 + 0.832781 0.999535 0.163212 + 0.685279 0.998338 0.966773 ```` ````@julia @@ -550,8 +550,8 @@ Asparse = sparse(A) ```` 2×3 SparseArrays.SparseMatrixCSC{Float64, Int64} with 6 stored entries: - 0.113155 0.33251 0.397839 - 0.171581 0.90293 0.436722 + 0.832781 0.999535 0.163212 + 0.685279 0.998338 0.966773 ```` ````@julia diff --git a/docs/src/notebooks/MLJTutorial/02_models/learning_curve.png b/docs/src/notebooks/MLJTutorial/02_models/learning_curve.png index 7234cf4b5a2f95adb72495a9da41c977bf2d3725..e848c6bd36f525c29f6c3b9441b19ba02edcf3cf 100755 GIT binary patch literal 15552 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 UYs^-77#Q(LPF1!<+9de@13A3YasU7T literal 15822 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 XdTxn=<>(SxFd{FbEL|b_)c=0~&E1py diff --git a/docs/src/notebooks/MLJTutorial/02_models/notebook.md b/docs/src/notebooks/MLJTutorial/02_models/notebook.md index c2bde2b..d9e9949 100644 --- a/docs/src/notebooks/MLJTutorial/02_models/notebook.md +++ b/docs/src/notebooks/MLJTutorial/02_models/notebook.md @@ -625,8 +625,8 @@ mach = machine(model, X, y) untrained Machine; caches model-specific representations of data model: NeuralNetworkClassifier(builder = Short(n_hidden = 0, …), …) args: - 1: Source @909 ⏎ ScientificTypesBase.Table{AbstractVector{ScientificTypesBase.Continuous}} - 2: Source @399 ⏎ AbstractVector{ScientificTypesBase.Multiclass{3}} + 1: Source @381 ⏎ ScientificTypesBase.Table{AbstractVector{ScientificTypesBase.Continuous}} + 2: Source @900 ⏎ AbstractVector{ScientificTypesBase.Multiclass{3}} ```` @@ -652,18 +652,18 @@ fit!(mach, rows=train, verbosity=2); ```` [ Info: Training machine(NeuralNetworkClassifier(builder = Short(n_hidden = 0, …), …), …). [ Info: MLJFlux: converting input data to Float32 -[ Info: Loss is 2.023 -[ Info: Loss is 1.592 -[ Info: Loss is 1.491 -[ Info: Loss is 1.205 -[ Info: Loss is 1.227 -[ Info: Loss is 1.177 -[ Info: Loss is 1.19 -[ Info: Loss is 1.128 -[ Info: Loss is 1.09 -[ Info: Loss is 1.058 -[ Info: Loss is 1.059 -[ Info: Loss is 1.056 +[ Info: Loss is 1.843 +[ Info: Loss is 1.666 +[ Info: Loss is 1.449 +[ Info: Loss is 1.333 +[ Info: Loss is 1.242 +[ Info: Loss is 1.188 +[ Info: Loss is 1.105 +[ Info: Loss is 1.003 +[ Info: Loss is 0.9239 +[ Info: Loss is 0.9508 +[ Info: Loss is 0.8857 +[ Info: Loss is 0.94 ```` @@ -676,9 +676,9 @@ yhat[1:3] ```` 3-element CategoricalDistributions.UnivariateFiniteVector{ScientificTypesBase.Multiclass{3}, String, UInt32, Float32}: - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.38, Iris-versicolor=>0.293, Iris-virginica=>0.327) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.449, Iris-versicolor=>0.271, Iris-virginica=>0.281) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.454, Iris-versicolor=>0.27, Iris-virginica=>0.276) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.293, Iris-versicolor=>0.352, Iris-virginica=>0.355) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.618, Iris-versicolor=>0.198, Iris-virginica=>0.184) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.595, Iris-versicolor=>0.211, Iris-virginica=>0.194) ```` We'll have more to say on the form of this prediction shortly. @@ -701,7 +701,7 @@ report(mach) ```` ```` -(training_losses = Float32[1.7850709, 2.023422, 1.5918993, 1.4905419, 1.2054352, 1.2269526, 1.1768, 1.1895036, 1.128155, 1.0898077, 1.0582713, 1.0594574, 1.056259],) +(training_losses = Float32[1.9923493, 1.8433424, 1.6657014, 1.4489316, 1.3331685, 1.2423297, 1.187512, 1.1045707, 1.003318, 0.9239003, 0.95083165, 0.88573194, 0.939968],) ```` You save a machine like this: @@ -720,9 +720,9 @@ yhat[1:3] ```` 3-element CategoricalDistributions.UnivariateFiniteVector{ScientificTypesBase.Multiclass{3}, String, UInt32, Float32}: - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.379, Iris-versicolor=>0.304, Iris-virginica=>0.317) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.454, Iris-versicolor=>0.269, Iris-virginica=>0.277) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.377, Iris-versicolor=>0.292, Iris-virginica=>0.331) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.28, Iris-versicolor=>0.36, Iris-virginica=>0.36) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.605, Iris-versicolor=>0.205, Iris-virginica=>0.19) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.288, Iris-versicolor=>0.353, Iris-virginica=>0.359) ```` Machines remember the last set of hyperparameters used during fit, @@ -737,10 +737,10 @@ fit!(mach, rows=train, verbosity=2); ```` [ Info: Updating machine(NeuralNetworkClassifier(builder = Short(n_hidden = 0, …), …), …) (with warm restart if possible). -[ Info: Loss is 1.067 -[ Info: Loss is 1.038 -[ Info: Loss is 1.034 -[ Info: Loss is 1.038 +[ Info: Loss is 0.9071 +[ Info: Loss is 0.8656 +[ Info: Loss is 0.9126 +[ Info: Loss is 0.8793 ```` @@ -771,10 +771,10 @@ fit!(mach, rows=train, verbosity=2); ```` [ Info: Updating machine(NeuralNetworkClassifier(builder = Short(n_hidden = 0, …), …), …) (with warm restart if possible). -[ Info: Loss is 0.9739 -[ Info: Loss is 0.9423 -[ Info: Loss is 0.9133 -[ Info: Loss is 0.8122 +[ Info: Loss is 0.8646 +[ Info: Loss is 0.7723 +[ Info: Loss is 0.7511 +[ Info: Loss is 0.7037 ```` @@ -789,26 +789,26 @@ fit!(mach, rows=train, verbosity=2); ```` [ Info: Updating machine(NeuralNetworkClassifier(builder = Short(n_hidden = 0, …), …), …) (with warm restart if possible). [ Info: MLJFlux: converting input data to Float32 -[ Info: Loss is 1.285 -[ Info: Loss is 0.9493 -[ Info: Loss is 0.9647 -[ Info: Loss is 0.8598 -[ Info: Loss is 0.8699 -[ Info: Loss is 0.859 -[ Info: Loss is 0.843 -[ Info: Loss is 0.8556 -[ Info: Loss is 0.8016 -[ Info: Loss is 0.7762 -[ Info: Loss is 0.7672 -[ Info: Loss is 0.6868 -[ Info: Loss is 0.7414 -[ Info: Loss is 0.7573 -[ Info: Loss is 0.7062 -[ Info: Loss is 0.7683 -[ Info: Loss is 0.725 -[ Info: Loss is 0.8516 -[ Info: Loss is 0.7587 -[ Info: Loss is 0.7132 +[ Info: Loss is 1.152 +[ Info: Loss is 0.9846 +[ Info: Loss is 0.9392 +[ Info: Loss is 0.8941 +[ Info: Loss is 0.8051 +[ Info: Loss is 0.7857 +[ Info: Loss is 0.6737 +[ Info: Loss is 0.6225 +[ Info: Loss is 0.6503 +[ Info: Loss is 0.642 +[ Info: Loss is 0.6935 +[ Info: Loss is 0.5629 +[ Info: Loss is 0.5992 +[ Info: Loss is 0.5452 +[ Info: Loss is 0.6846 +[ Info: Loss is 0.6737 +[ Info: Loss is 0.649 +[ Info: Loss is 0.679 +[ Info: Loss is 0.7019 +[ Info: Loss is 0.6518 ```` @@ -827,7 +827,7 @@ yhat[1] ```` ```` -UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.156, Iris-versicolor=>0.519, Iris-virginica=>0.326) +UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0677, Iris-versicolor=>0.624, Iris-virginica=>0.308) ```` What's going on here? @@ -858,7 +858,7 @@ pdf(yhat[1], "Iris-virginica") ```` ```` -0.32571402f0 +0.30793336f0 ```` To get the most likely observation, we do @@ -879,10 +879,10 @@ broadcast(pdf, yhat[1:4], "Iris-versicolor") ```` 4-element Vector{Float32}: - 0.5187301 - 0.0025167037 - 0.00241053 - 0.0027305766 + 0.6243697 + 0.02210315 + 0.023541868 + 0.027490756 ```` ````@julia @@ -921,10 +921,10 @@ pdf(yhat, L)[1:4, :] ```` 4×3 Matrix{Float32}: - 0.155556 0.51873 0.325714 - 0.997162 0.0025167 0.000321372 - 0.997287 0.00241053 0.000302146 - 0.996915 0.00273058 0.000354911 + 0.067697 0.62437 0.307933 + 0.975022 0.0221031 0.00287438 + 0.973352 0.0235419 0.00310646 + 0.968749 0.0274908 0.00376043 ```` However, in a typical MLJ workflow, this is not as useful as you might imagine. In @@ -936,7 +936,7 @@ log_loss(yhat, y[test]) ```` ```` -0.41664216811287624 +0.3023546542336178 ```` To apply a deterministic measure, we first need to obtain point-estimates: @@ -946,7 +946,7 @@ misclassification_rate(mode.(yhat), y[test]) ```` ```` -0.08888888888888889 +0.044444444444444446 ```` For more on metrics provided by MLJ, see the [StatisticalMeasures.jl @@ -974,15 +974,15 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: NeuralNetworkClassifier-433 +Tag: NeuralNetworkClassifier-246 Extract: ┌─────────────────────────┬──────────────┬─────────────┐ │ measure │ operation │ measurement │ ├─────────────────────────┼──────────────┼─────────────┤ -│ LogLoss( │ predict │ 0.417 │ +│ LogLoss( │ predict │ 0.302 │ │ tol = 2.22045e-16) │ │ │ -│ MisclassificationRate() │ predict_mode │ 0.0889 │ -│ BrierScore() │ predict │ -0.236 │ +│ MisclassificationRate() │ predict_mode │ 0.0444 │ +│ BrierScore() │ predict │ -0.159 │ └─────────────────────────┴──────────────┴─────────────┘ Apply `describe` to this result for a named tuple summary. ```` @@ -1004,23 +1004,23 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: NeuralNetworkClassifier-136 +Tag: NeuralNetworkClassifier-510 Extract: ┌───┬─────────────────────────┬──────────────┬─────────────┬─────────┐ │ │ measure │ operation │ measurement │ 1.96*SE │ ├───┼─────────────────────────┼──────────────┼─────────────┼─────────┤ -│ A │ LogLoss( │ predict │ 0.276 │ 0.035 │ +│ A │ LogLoss( │ predict │ 0.311 │ 0.036 │ │ │ tol = 2.22045e-16) │ │ │ │ │ B │ MisclassificationRate() │ predict_mode │ 0.04 │ 0.022 │ -│ C │ BrierScore() │ predict │ -0.143 │ 0.026 │ +│ C │ BrierScore() │ predict │ -0.164 │ 0.027 │ └───┴─────────────────────────┴──────────────┴─────────────┴─────────┘ -┌───┬──────────────────────────────────────────────────────────┐ -│ │ per_fold │ -├───┼──────────────────────────────────────────────────────────┤ -│ A │ [0.312, 0.256, 0.219, 0.263, 0.277, 0.33] │ -│ B │ [0.04, 0.04, 0.0, 0.04, 0.08, 0.04] │ -│ C │ Float32[-0.181, -0.127, -0.0987, -0.137, -0.142, -0.172] │ -└───┴──────────────────────────────────────────────────────────┘ +┌───┬─────────────────────────────────────────────────────────┐ +│ │ per_fold │ +├───┼─────────────────────────────────────────────────────────┤ +│ A │ [0.339, 0.268, 0.278, 0.358, 0.275, 0.347] │ +│ B │ [0.04, 0.04, 0.0, 0.08, 0.04, 0.04] │ +│ C │ Float32[-0.184, -0.137, -0.149, -0.204, -0.128, -0.183] │ +└───┴─────────────────────────────────────────────────────────┘ Apply `describe` to this result for a named tuple summary. ```` @@ -1043,22 +1043,22 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: NeuralNetworkClassifier-762 +Tag: NeuralNetworkClassifier-417 Extract: ┌───┬─────────────────────────┬──────────────┬─────────────┬─────────┐ │ │ measure │ operation │ measurement │ 1.96*SE │ ├───┼─────────────────────────┼──────────────┼─────────────┼─────────┤ -│ A │ LogLoss( │ predict │ 0.318 │ 0.035 │ +│ A │ LogLoss( │ predict │ 0.298 │ 0.034 │ │ │ tol = 2.22045e-16) │ │ │ │ -│ B │ MisclassificationRate() │ predict_mode │ 0.042 │ 0.023 │ -│ C │ BrierScore() │ predict │ -0.171 │ 0.023 │ +│ B │ MisclassificationRate() │ predict_mode │ 0.047 │ 0.025 │ +│ C │ BrierScore() │ predict │ -0.154 │ 0.025 │ └───┴─────────────────────────┴──────────────┴─────────────┴─────────┘ ┌───┬─────────────────────────────────────────────────────────────────────────── │ │ per_fold ⋯ ├───┼─────────────────────────────────────────────────────────────────────────── -│ A │ [0.263, 0.309, 0.294, 0.313, 0.317, 0.216, 0.388, 0.297, 0.427, 0.275, 0 ⋯ -│ B │ [0.0, 0.04, 0.04, 0.0, 0.04, 0.04, 0.2, 0.0, 0.0, 0.04, 0.04, 0.08, 0.08 ⋯ -│ C │ Float32[-0.133, -0.164, -0.153, -0.156, -0.175, -0.117, -0.246, -0.158, ⋯ +│ A │ [0.299, 0.369, 0.239, 0.341, 0.317, 0.173, 0.359, 0.363, 0.328, 0.296, 0 ⋯ +│ B │ [0.0, 0.12, 0.04, 0.0, 0.08, 0.04, 0.04, 0.08, 0.0, 0.0, 0.04, 0.08, 0.0 ⋯ +│ C │ Float32[-0.155, -0.208, -0.105, -0.176, -0.171, -0.0781, -0.191, -0.202, ⋯ └───┴─────────────────────────────────────────────────────────────────────────── 1 column omitted Apply `describe` to this result for a named tuple summary. @@ -1085,51 +1085,51 @@ predict(mach, rows=test) # and predict missing targets ```` 45-element CategoricalDistributions.UnivariateFiniteVector{ScientificTypesBase.Multiclass{3}, String, UInt32, Float32}: - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0903, Iris-versicolor=>0.528, Iris-virginica=>0.382) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.979, Iris-versicolor=>0.0153, Iris-virginica=>0.00547) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.978, Iris-versicolor=>0.0163, Iris-virginica=>0.00586) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.975, Iris-versicolor=>0.0185, Iris-virginica=>0.00674) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.134, Iris-versicolor=>0.524, Iris-virginica=>0.342) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>8.56e-5, Iris-versicolor=>0.228, Iris-virginica=>0.772) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.983, Iris-versicolor=>0.0127, Iris-virginica=>0.00446) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.98, Iris-versicolor=>0.0149, Iris-virginica=>0.00533) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.00347, Iris-versicolor=>0.395, Iris-virginica=>0.602) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.135, Iris-versicolor=>0.521, Iris-virginica=>0.343) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>2.86e-5, Iris-versicolor=>0.19, Iris-virginica=>0.81) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>9.2e-5, Iris-versicolor=>0.231, Iris-virginica=>0.769) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>3.58e-5, Iris-versicolor=>0.198, Iris-virginica=>0.802) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0527, Iris-versicolor=>0.52, Iris-virginica=>0.427) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.978, Iris-versicolor=>0.0164, Iris-virginica=>0.0059) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.144, Iris-versicolor=>0.518, Iris-virginica=>0.338) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>8.25e-5, Iris-versicolor=>0.227, Iris-virginica=>0.773) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.000144, Iris-versicolor=>0.248, Iris-virginica=>0.752) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.00414, Iris-versicolor=>0.404, Iris-virginica=>0.592) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0957, Iris-versicolor=>0.528, Iris-virginica=>0.376) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.215, Iris-versicolor=>0.494, Iris-virginica=>0.291) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.045, Iris-versicolor=>0.515, Iris-virginica=>0.44) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0742, Iris-versicolor=>0.526, Iris-virginica=>0.4) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>5.45e-5, Iris-versicolor=>0.212, Iris-virginica=>0.788) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.964, Iris-versicolor=>0.0261, Iris-virginica=>0.0098) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>4.02e-5, Iris-versicolor=>0.202, Iris-virginica=>0.798) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.131, Iris-versicolor=>0.523, Iris-virginica=>0.346) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.00176, Iris-versicolor=>0.361, Iris-virginica=>0.637) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.000152, Iris-versicolor=>0.25, Iris-virginica=>0.749) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.000158, Iris-versicolor=>0.252, Iris-virginica=>0.748) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0393, Iris-versicolor=>0.51, Iris-virginica=>0.451) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.969, Iris-versicolor=>0.023, Iris-virginica=>0.00853) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0425, Iris-versicolor=>0.513, Iris-virginica=>0.445) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.097, Iris-versicolor=>0.527, Iris-virginica=>0.376) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>4.55e-5, Iris-versicolor=>0.206, Iris-virginica=>0.794) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.00276, Iris-versicolor=>0.383, Iris-virginica=>0.614) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>9.93e-5, Iris-versicolor=>0.234, Iris-virginica=>0.766) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.138, Iris-versicolor=>0.521, Iris-virginica=>0.341) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.977, Iris-versicolor=>0.0165, Iris-virginica=>0.00596) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.977, Iris-versicolor=>0.0171, Iris-virginica=>0.00619) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.000143, Iris-versicolor=>0.248, Iris-virginica=>0.752) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.97, Iris-versicolor=>0.0217, Iris-virginica=>0.00804) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.00164, Iris-versicolor=>0.357, Iris-virginica=>0.641) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.124, Iris-versicolor=>0.525, Iris-virginica=>0.351) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.00131, Iris-versicolor=>0.346, Iris-virginica=>0.652) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.117, Iris-versicolor=>0.646, Iris-virginica=>0.237) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.997, Iris-versicolor=>0.00257, Iris-virginica=>7.17e-11) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.997, Iris-versicolor=>0.00255, Iris-virginica=>7.19e-11) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.997, Iris-versicolor=>0.00283, Iris-virginica=>8.77e-11) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.142, Iris-versicolor=>0.69, Iris-virginica=>0.168) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0346, Iris-versicolor=>0.311, Iris-virginica=>0.654) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.998, Iris-versicolor=>0.00218, Iris-virginica=>5.37e-11) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.998, Iris-versicolor=>0.00242, Iris-virginica=>6.45e-11) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0467, Iris-versicolor=>0.382, Iris-virginica=>0.571) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.223, Iris-versicolor=>0.732, Iris-virginica=>0.0447) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0322, Iris-versicolor=>0.295, Iris-virginica=>0.673) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.035, Iris-versicolor=>0.313, Iris-virginica=>0.652) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0323, Iris-versicolor=>0.296, Iris-virginica=>0.672) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0765, Iris-versicolor=>0.517, Iris-virginica=>0.407) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.997, Iris-versicolor=>0.0026, Iris-virginica=>7.3700004e-11) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.261, Iris-versicolor=>0.716, Iris-virginica=>0.0236) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0329, Iris-versicolor=>0.3, Iris-virginica=>0.667) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0339, Iris-versicolor=>0.306, Iris-virginica=>0.66) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0469, Iris-versicolor=>0.38, Iris-virginica=>0.573) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.118, Iris-versicolor=>0.645, Iris-virginica=>0.236) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.362, Iris-versicolor=>0.634, Iris-virginica=>0.00444) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0913, Iris-versicolor=>0.575, Iris-virginica=>0.334) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.135, Iris-versicolor=>0.685, Iris-virginica=>0.18) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0323, Iris-versicolor=>0.296, Iris-virginica=>0.672) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.996, Iris-versicolor=>0.00382, Iris-virginica=>1.45e-10) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0322, Iris-versicolor=>0.295, Iris-virginica=>0.672) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.175, Iris-versicolor=>0.723, Iris-virginica=>0.101) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0368, Iris-versicolor=>0.324, Iris-virginica=>0.639) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0343, Iris-versicolor=>0.309, Iris-virginica=>0.656) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0341, Iris-versicolor=>0.307, Iris-virginica=>0.659) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0992, Iris-versicolor=>0.596, Iris-virginica=>0.304) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.996, Iris-versicolor=>0.00359, Iris-virginica=>1.36e-10) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.103, Iris-versicolor=>0.611, Iris-virginica=>0.286) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.152, Iris-versicolor=>0.703, Iris-virginica=>0.145) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0327, Iris-versicolor=>0.299, Iris-virginica=>0.668) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0445, Iris-versicolor=>0.368, Iris-virginica=>0.587) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0337, Iris-versicolor=>0.305, Iris-virginica=>0.661) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.222, Iris-versicolor=>0.736, Iris-virginica=>0.0425) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.997, Iris-versicolor=>0.00283, Iris-virginica=>8.7000004e-11) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.997, Iris-versicolor=>0.00269, Iris-virginica=>7.92e-11) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0346, Iris-versicolor=>0.311, Iris-virginica=>0.655) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.997, Iris-versicolor=>0.00341, Iris-virginica=>1.2e-10) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0418, Iris-versicolor=>0.353, Iris-virginica=>0.605) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.156, Iris-versicolor=>0.707, Iris-virginica=>0.137) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(Iris-setosa=>0.0395, Iris-versicolor=>0.341, Iris-virginica=>0.62) ```` ### On learning curves @@ -1158,7 +1158,7 @@ curve = learning_curve( ```` ```` -(parameter_name = "epochs", parameter_scale = :log10, parameter_values = [1, 2, 3, 4, 5, 7, 9, 11, 14, 17, 22, 28, 36, 45, 57, 73, 92, 117, 149, 189, 240, 304, 386, 489, 621, 788, 1000], measurements = [0.9792367389813159, 0.861137424251525, 0.795194663958999, 0.7178450923341597, 0.6672852524240639, 0.6298719732484978, 0.5722341032114211, 0.5468304476118365, 0.5176573197034343, 0.49085053804968687, 0.4656446207911134, 0.4495242488591051, 0.4099614796325163, 0.42257271926898354, 0.31717065032020536, 0.3321625563432286, 0.2845664781923225, 0.22536592494730678, 0.1853560701976897, 0.24943364437705945, 0.24673236950764432, 0.20234975793565377, 0.20691858169733499, 0.20911653361243762, 0.22259957311318937, 0.21965174517509872, 0.21279597941067163]) +(parameter_name = "epochs", parameter_scale = :log10, parameter_values = [1, 2, 3, 4, 5, 7, 9, 11, 14, 17, 22, 28, 36, 45, 57, 73, 92, 117, 149, 189, 240, 304, 386, 489, 621, 788, 1000], measurements = [1.1101430890270785, 1.0523844064782457, 0.9552739719860082, 0.8252618878652416, 0.7407029729629422, 0.7117540611099686, 0.6473811832752417, 0.6051996950232142, 0.5927533935853231, 0.6014127857471417, 0.520697202909161, 0.46281622944694667, 0.408509822448981, 0.3938544280811988, 0.28662257565458665, 0.3400356434034648, 0.3170479733060074, 0.3172615464977853, 0.3085572772007371, 0.29101642775211295, 0.3078519856587645, 0.31229959524410067, 0.2664894730764057, 0.3094692929634764, 0.2821135795288816, 0.31090260857700913, 0.2931820005629499]) ```` ````@julia @@ -1221,16 +1221,16 @@ y4 = [n_devices(row.salary) for row in eachrow(X4)] ```` 10-element Vector{Int64}: - 3 + 2 + 2 + 2 + 1 1 - 3 - 0 2 + 1 6 - 0 - 0 2 - 1 + 5 ```` (b) What models can be applied if you coerce the salary to a @@ -1256,10 +1256,10 @@ pretty(data) │ Int64 │ Float64 │ Float64 │ CategoricalValue{String, UInt32} │ │ Count │ Continuous │ Continuous │ OrderedFactor{2} │ ├───────┼────────────┼────────────┼──────────────────────────────────┤ -│ 1 │ 0.754755 │ 0.208445 │ male │ -│ 2 │ 0.874161 │ 0.399919 │ female │ -│ 3 │ 0.906202 │ 0.19441 │ female │ -│ 4 │ 0.718781 │ 0.818259 │ male │ +│ 1 │ 0.834465 │ 0.356333 │ male │ +│ 2 │ 0.0335365 │ 0.292738 │ female │ +│ 3 │ 0.40159 │ 0.334114 │ female │ +│ 4 │ 0.745999 │ 0.11353 │ male │ └───────┴────────────┴────────────┴──────────────────────────────────┘ ```` diff --git a/docs/src/notebooks/MLJTutorial/03_pipelines/notebook.md b/docs/src/notebooks/MLJTutorial/03_pipelines/notebook.md index f8049ef..9383c41 100644 --- a/docs/src/notebooks/MLJTutorial/03_pipelines/notebook.md +++ b/docs/src/notebooks/MLJTutorial/03_pipelines/notebook.md @@ -31,8 +31,8 @@ x = rand(100); ```` ```` -mean(x) = 0.47696749924138343 -std(x) = 0.29728842148044776 +mean(x) = 0.488231598311445 +std(x) = 0.29947481462620856 ```` @@ -46,8 +46,8 @@ xhat = transform(mach, x); ```` [ Info: Training machine(Standardizer(features = Symbol[], …), …). -mean(xhat) = 2.042810365310288e-16 -std(xhat) = 1.0 +mean(xhat) = -9.769962616701378e-17 +std(xhat) = 0.9999999999999999 ```` @@ -501,7 +501,7 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: DeterministicPipeline-190 +Tag: DeterministicPipeline-761 Extract: ┌──────────┬───────────┬─────────────┐ │ measure │ operation │ measurement │ @@ -631,7 +631,7 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: DeterministicPipeline-398 +Tag: DeterministicPipeline-289 Extract: ┌──────────┬───────────┬─────────────┬─────────┐ │ measure │ operation │ measurement │ 1.96*SE │ @@ -672,7 +672,7 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: DeterministicPipeline-611 +Tag: DeterministicPipeline-526 Extract: ┌──────────┬───────────┬─────────────┬──────────┐ │ measure │ operation │ measurement │ 1.96*SE │ @@ -700,7 +700,7 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: DeterministicPipeline-592 +Tag: DeterministicPipeline-221 Extract: ┌──────────┬───────────┬─────────────┬─────────┐ │ measure │ operation │ measurement │ 1.96*SE │ diff --git a/docs/src/notebooks/MLJTutorial/04_tuning/gamma_sampler.png b/docs/src/notebooks/MLJTutorial/04_tuning/gamma_sampler.png index 8ddb87e85997807859d01a10d6bb417551fd3050..8314019baa5b2af2e71a880fc641768e4a176dc9 100644 GIT binary patch literal 9334 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 D-fCA{ literal 9276 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 diff --git a/docs/src/notebooks/MLJTutorial/04_tuning/notebook.md b/docs/src/notebooks/MLJTutorial/04_tuning/notebook.md index 9882163..ac2c41f 100644 --- a/docs/src/notebooks/MLJTutorial/04_tuning/notebook.md +++ b/docs/src/notebooks/MLJTutorial/04_tuning/notebook.md @@ -367,7 +367,7 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: ProbabilisticPipeline-307 +Tag: ProbabilisticPipeline-620 Extract: ┌──────────────────────┬───────────┬─────────────┬─────────┐ │ measure │ operation │ measurement │ 1.96*SE │ @@ -394,7 +394,7 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: ProbabilisticTunedModel-779 +Tag: ProbabilisticTunedModel-280 Extract: ┌──────────────────────┬───────────┬─────────────┬─────────┐ │ measure │ operation │ measurement │ 1.96*SE │ diff --git a/docs/src/notebooks/MLJTutorial/04_tuning/tuning.png b/docs/src/notebooks/MLJTutorial/04_tuning/tuning.png index 9be33e51ff1d310d602cc0d7d3c7e894c9c99005..8e4a6756d28e8369600b4e3cfbc61c59b6010143 100644 GIT binary patch delta 22652 zcmYJbbzD_j7d3nc0Z|YUP#P6M8tD*`Mny_eQb4-9Hz^m9Zs`U=knR$ZZln>B2I=m1 z^1Sc&`_3QUD<00?d#$AM;nQ*Bm^*9Z z`^;m+a<{t1iLYHVCz80G_4vU9>Dy6+VI(i5`wsQbZ7EW%2};lwkE3M_on}%y5|WZU zj1np;4nA|6;b4A0KRpbO4g2ed^XSnd&jwPQN6aMoc^l;N!>6kGxkTQX&*>uF8W9&4 z7tuEX$hmxb=f^W<5y53eeEb`|-RUWOj+rGTgzIXlBH~I)!#{s63P%sRTwc^CB~k9E ziHV7ch}>smE3&{ANMdDV>`b`*kd7`UDJl3VD+`N*lhfhhVWZ0~o$&X7{(!c**33+i zmd3^^HG4z-;PiC8&BM*r)lLTKYYY6BTu)3Q`jC*ml-bGCq}`igD;Sr7H8%~DF_xMd zlHN(lrBUAC(ye#i{=51szq-0wSy|b^!Qti0m#eF*BO@a>?y{N-+MUpU$$`9G4TRTt?1qs+6;@S*5vgv^_^o-Z&bT zt(a$POZid8iT&Oie3WhnPE6PKT0ltRzl)PRgkbnJ1^&{g4kF~VL4hB@$;+$y<_#w| z_t*SZg$1kW8e$5HI@^Vp zOicOL@6gfc8)yITh4Ol$|C1o_hw#Nw#!ys7UY?1S6|yl^UBNP~X`GMTzJ2>XVIYD* zvyk}Ak({ zx2RDlP1e!jVf)$d{_6s{xw%`O0TsT@y0A(6dwT*N#Dt=QgM;yGDbv+9#Wl{!F94=gfom3(9kXc@0{ zVoT^b*xSQI)p?wfkQ(OY=L=f@Y3f6AMbB?w`EKv;;|bgBoyEVgTk2h~YPjv?Ny18< z_hPWKtFu1@T@)=Ik@4L6)4aR%qPm*8eV!3F>xHPOjEKnZv9YlZ6Z=i!7A3}CO-+BK ziuBm;UAyKV6B7eLz{Z9wc9Y(^b?e287q@SRx3^1Yp05n$C^0%rl$oHsnwpxTqKL?X zdF+?_tE%`im81*|4Aj)(K7EoA6Z6fSyzxi0J73 z)6IlrVdTlX^j~pLJ_N-$=jC-oNb4yvX4HI+I4u5qyj!)LdsDDhTN(FTadEZv?DwL^ z3sZCRsqJ5JadBm3Wq9N~_C~6uMtujnyJp75@=8kcT24>hkJyXE?CtHv#4rL{OxzY6 zM+>zyDlNYj6~!X4v71hfK533rLat@IO#?nYaxWRb+%S~Ap;n!)qhm#0cS+gEJr}L? zYaj%jFl=XMr@y~EFmOA8$4#r=Q%UBZjzpiq`$xmS-hch-VAyLb;HkGU@k`FtuE1e! zWV*(o>-%@T?zktty}j_Ow1jzug@s?ftZvV>t*orvp_6%zNH*2@O4DAP{rv1`hwH3y zKKiONj9{Y5VRHM%Xacb_xsSiM2E8I-lN79>BCBIql0c)6LdsWZ(j3+& z%K!XPUSeZTUbbZT=F7;)NG0rfHdd_v>(?&>j^oKntB8mQ0RaK{2lODc)lK*t`{JF3 zC2~xxAr5zK19L7J{`2nIB25Yf+xD>g#@OilUwc(d5Q< z_w-zsVE8lB)kXMGn@{bQ1XJekxg~X350CRCL8p%&Kbo4EO;&7<6^rG1E-yq@4{Wj@ zhc~7nlsLnci+w4j@8&X#=Uhuf-Pr0q&rd36JWsb~eZ#{CI-{A4`Yw#ZnaG0a=;%mD zNmu6P9v(HNdj1$6S69{kJD0RCQ?%|ygN16!oFVi$canD&m`K~Fm{F9~*8Uy$L?5pE zh?Z83Ip)9rq_wmtsX|8w2XXQ67Dg3ZLw{l-H`szM8a(dK+*R}U>x9a=w#F3ekWqMZ z2I>t|9h>T@+Ycp)h=?FX&~tF?!0qVi>G|BkT5bHMX6|l29HHDC%Cj738dqZ4H5@%( z^z`Ge;bC#XvgA39&ha{z(t?72urqxr!YR?w4!esziHV8FyGw4)&h`a^-X!?Q-7{C> zBCCZGy+;TMw~ybQ*skfS?aKO7cQ^jS0wV~YpR?8+92_z-GAPvS>}`~- zX%LX+f^+gjLZUU7TouaT?(Qx`0@TP;H+AU-51JXcy6e6vJjYEe--0{uEiFBv2u{~J z-MxEvckOZgfDHCfFG9%lZE=ZJbA9vDyuS~sExPYJXPFYog=Kzz{z$slqC0pf-SLw5 z*RNk!S69D7FMFm?&53hz{n4W=$lDOncwTI*4OxjbH3FGG63WWBtg?(=zkbclUH<9Q zO;5@NDPx(9KEWULOML(6zo^T(MQx#nSlx6E59c-NT~)s3jr`VSzsE;WXc3f=q3`bQ z4tsW0Hp$5Pac}y_w^c@Eq@^h+D4?PGfBoudZ#OnIMMo*AsHmu_-q2-#_j6@LnHOif znu6|BXMF*0YRiaXiG3hAlpEiFhVOjo_`+?Jb=X5Lg|4P5o!t!ePFJ_TSg#;B_%-aI zjm@^-^*e}sAg+%e+KgiF@<7Ji-@hmnWC&YZTYP+cCe=a;e%nlVrV?|d6h&Uge)7im zMj!Lc38b7j-~G66(`=<#@OYioIpo#tJWUhy*zMlu1S@>c~L z8ynQm+@1GVm1`Yu+z6VVpa1-sOex(5-c`ARfspfBGCzKdLJ{EjEiW&>PT*<%`IGG4 zJqVhjAu{>1M~sX$8|efoDJd=G=H`Zd7E}ohz^eQB5m!Qj^!DvxStBh? zO#nV^8Z}>7?%av=^Ya6QbdQwu`ZIPMQOX&`kQ#WM9FlJo6cp&`>mQddUHVDWnj)sA zgn{A`5)x`ZO|4B$O(P;i?arm3sO+zeUM?%cCwZJ6T<4&|A*9-RMM`FD%|{V1)M`(N z<0C(iUz(Vno(^ZmY5eurms`&<5}?9pQFhveuh^f=AeTuA31$Wc^Gi#kj$W}H2EEBb zZji%T0y21V@O}CR^P`6P`w;?a>OQx(s;Z;?{m*F$m6enp69EQm)+>fgCaUa#BHIFN zr=dYggsc3PENPaTCt>~XUr22}PtVT}XXH|z^)Okr7?uJG;@1CpGtM?uBv%!~jE9Fu z;?ilMlUPAv0M>zvmp3*hhKGx*&h4;wU|?Wq=#4YnurC@G;!DcY{dYfKv<$tAib*o08IFbvW-9 z^|P(D#{|Qag@qfpsOqHFmf^HKlnR+DGl?uI*~wMNAiQ(O*T+YtP}60(|9+XM56%7N z%BaYsq-h%@%L#xuRQ8a{RuTD>&rkFhgV&0Tx#$?BiV6z2xVYwpTIaUky?Y1sQmfW+ z{dc{a!u9JuewZ_KFPIn^;jg2UleHH5rlySXG9T=)Y0!p7N1bfRY*r16-rfJQQ_$5 zxHzgnlbdj`F34w_*>ZL*V}2e}t8TobgMpSd6XI|>^efc*|Ni^0K)p2kv^ITcMK1ZN ziKV5ZgM+fX{PLK0kKq->OHcpa+${rdxRhv*__t(8dB z9Rh+T!_rEt87g98|1#a;v5rXk6n;CbQ0mMsEwRUt`*wB{s0iKn|7K;OKieD5dvkfR zRzxqC3>i6R`V}NZ$dGLzlxwnNsfu~9?6l$15XkUs@Hlm=!#G&Jvx|#A4LDesnN^Ck zJ^ua(G#Sc9Lv?m`QczMN>;L{4b4{G=uf2Km<{c@%wDi`lO8=iff1qN)JxNMPJff#p zRZ@Z@(yYLZ!xDf`$#696u8Smkh32QHM?i&oGDG9z;{)%nc{8=U*?38E`}PYNnL5|~ z)jF5mgMZ^gg)LdHVprGJbn2XMQ&D+B{ReDPJZ_F^nr%S>+CGs2I7|YdrmwHhr*4UQ z%*g0^c4VWiO%>20A{e7RYqyW~*licX#XfGT#7$%DM z#AReY6&0~5R(ACDZC;$8t_!%I9S!vM;;+E7$SW%DY)lKHn&7MgkPX>eu@}pwW?*G? zq(J5jSGY!m_fnIBa;k$dc8aFtw(Z*U)6!;t1l}pqu4iOm2#<~Beey)T%=mWQ44!B> z#FL(0N#$YY-dN!F&Yh__U z$#3Z%J!jkd@19pPI%-F;=#yhYTtf8tN_o8{K;rh9%vd3P>2`jP~-fnbYhp z9_t<5>*-|78d&zY+r76k1OYr@`QUkulCpAsettO8273lbbbSOZJSL{Mv-1k6Sz3mC z`UE*sYJ^cmLBXWpOb3%fIxOf-`HPngrr~Z&4026^3@@gG(y~5;2asonif2h2Z?9qZnIQDYuio6^1w2Tc!nQs6sf{jEn+? z-El~YRoARF`@Qax_g!#8q;f7fvu!TUTnw~ne4Foan?mu8hP={<{sD`Vn3z~tSQvGN zLctF$0+Ma*?2a9X@B@ZylAg21o*wTSy??*JYSp8lqSD*lU1vQj3c=~_UKbpUH+XTn z+4!*KIwpE^PY(+{y_AB&6Ct7LrX~cnqHAJuytB|{Hd=Ta#}Ck!w&3ulnuf+DhuuV$ zSZ~jrN|XcV)>rAB?S|qJIw~qEFpt&msY08dpGey=m`Nr#9=7Nk8dks^CpV%= z8z(-sZEvxdy3n7MxGwSb?F3ULR_|y2JL{>gg{lnn!on%M=P5bU$lh0t%9GR6S1(@d zn_r3r;7d?J#zazt+$xN0M8jyJV`60EIV4`bH0@2~zjp1~{rmTUmkJIES?s!|VNCFu z%VaR~MPz@7kFaaBZP>nT&A;rtym8+oyXvVAAF#9wAB0PnmzO6UFte}(2L;V(Edqv; z3ZdBE-d^F$MiZe7?=UbkTl?~bQ9B48%*xUE?~m&W3djH)LYl)WaY;#5?K6((_NfkjZU~3Jwl- zF>(Z=9&l4eeLSHdAsb`=HS0QV0&a6c>Q}ClA&HWqR36Y5$_7Q7n3w=# zt5xqB?bOJLiN^@PeedSa;o&G9H{aBY8=-Bd$H(W(%CBGd064$#KTPgk8^a0fQDOI! z2FC}h6e`E=Qr}Fy+u>xT-gTZQC=?Cqg}8{4m2ukx@gv8WQn(v_yG5ClXVasjmD67; zWf57~^WqOom?HAGpduW1CmuF@i^^E?%27}Yid{eRcqRRZv22bI7w!c}PbOfV0KULx zOw>oEq*xgk{3yZ@A;7#|+A(Bk*fGY*D}}*~k3yNgs{D7z-v0{_AIC&mTBsF+QAfn1 zlxH5WLI0JPJJh=RL)||Uz{NyF!U+Ca^C6cW{2T`g(1$o$QrYQD9lB$n!bUB(r?%S$ zhS(QS&$1I$i?pxM??Pwv*~ERg-^S-zic-}zi0OA8L1xS{x#y&3kyZq6VkaAT2MCn6g{AaxO@{d&N1lb-h3Pn_pK5nz_Cf{CSyF-caQurP5=(9Y2ybJ}2 zi!4}2&@UA&wY+@4$r}SGVl-4D#t{O3US-PWc;66iNT8;0Qm%Ofr(1b*zj~t zQBb%*qGbvrA|sVY`-eI2adZqNbS>;`KWAZKX*@qjfFlwUGt%sfog)*^0a5mBgPPC_ zD8OKi%7B0rx|d8(9{<9BnAn%}RL|JBeeHQ(5r*Q+nUp^`y3IO&y3PNv---K##)21- zXB5B~ScH!+PVaiZr83HHu{$14IXX%gyj)go}zA?39t_1xI|EzIOA4OVhior+Agr z+&pZj!4ZRpTp9UR^1IyRkC)wNnhco7PCkE|{uyy0^5*p~r`=9W(?^IXg=}mOL)N8J`coHneRwO3H8A*Jqfmdo;ar!Zr2Lm6v|_Db)DJ|AH_bc8 z^ON#a-SA@T9@Fz>Xkw{!IqSZQS*fV{n zijVVB788K+4!wsw5fu|_>FX;3c0fPi-#>FFCnx9xK}vw8ZYZjNa}IJV?#) zp3frMrbT97HKqGnwWh1aGL0^=>Krfu-S!Id!(BFQ%@TtS=yjm40vZaS=n;@Akc@se zc#x0m`Sq7vh6>#=-`4-y+K-<}4-8{{9a49dR|^W585r_(ko9@N-mb1L=rVpON97}& za5Mh?{y^_SENnY7Mt|h`;O7TOrkPrufDwAb-o$6s4wjAGyeKcE)@hTGiHS|CMoC2E z9pq)``mfN9pnTpi$O<4Sd<+VjoSeKxDL_;WG!zY-|6PQGL#sQ^%bAa&H|A^OofkVC zJ0ERden~HR`R-i+8tMi~H(PIy-k`}ZouE*v3AqR1{UK$Ie<#Z+pfK?y;GyJ|l_fUH zu~53jYRHQh9Z-`!DX;m|umQgOrJ^ZzyT>G6{DIBCvEp_QlY@f;s7})}JiNS4W8dDj z>%WKKd6WgjN8Xn&I|Ba&1@!?U1VTMumR*gLa zNmnIxEXHJk4#{ul6B5i;G#0b|mud9Lh-U4|;p*oJ4>!j&$_Z3+rCdf};0sGjR+R41 z)+{t{01x)|_5jSG$IDo{C9q;%m$9FZCdGd|gGfCH2Vx_<4TPOblgWvRw+svnzu%CO z#)kxXuxM16gVqEDA*?1aX-Zcd-ty||#r~)c78VxZ8$jjIt|60EHu`Pnz|K7LJgZvg z?+0ogD*9!L&%e9C1bIJSwtZXxB#O#B<+mc7|GH2pud16{Q$H*$p4!ikm1G6A{y14% zv6Z?~urOUKtC_(;4!s{Z%F4eW zxPhF57YfD9%na4J!eUb3H9uf<5VL@|7T6&QZL93D#s~zg87}>gV*&7twZlJP;i=55 zWGBi&yqs+bIDGe?PwTAp5l244L{A^ktVTUX9Ad*4%E>vvpDbVWO}-b#d&*+h>D``R5dgt%g|Ml$HLhGybB?NLIDM3 zWV8gkS2h_~R%Q>-FBD&dh5#P%n9>=6i=(nztdN@smUZM**5`Ht+VtS)|5LH-n`MMcjayr^`^NX<8|Dd+Z%0^ zIeT`4Y5idj!ZhARxNFHIi@f-9UVRG)i$lgKre+|33Op|;@pNo*hrWqs)K>bcr}b@f=_qLyYO(L>aOw528No}M0ASy?Sdpj^HM1-%Ll zMHe|&n#oQa98{!>gqV3vv)7gWQNED}8k;{&?^7B+D!%2*|Ney^AjW)?;&g&r7-DChenIH$iefGwiDqc-D_c1C=~Ges)d@j zo4jdqg;yt|N)0+9;A}cp%7}$E72x7bH9F19ejY_%NQsrDKYH%ybn|hr%`VzAt7d(*`G`bfuxJA*_K?5${kzVc4g(i ze*qYp>eI>WZSO-PD zKsRt87w%G0QVkT>d``j}D6Q4L>3Y}Jx&e)xLUj!#udeVe^=rAXZkD9VTQ9!FPk|%U zWILXFKfk}aJx4+5PA>>rl;$6VoVQYoTD<&lBRev=-VoDX+I7y_9+h(7CdqD=$$~1z94tB4b)N?9sy8g7 zenj^uBQvYf`1lKy5v1(ls?iD00+<^HR_qN{LY|e6OpPgK?`FM|_%Y246cz& zNJ9-Fn1oai;Uy6d#x6aRv}OFp9C9q#d3hUc=CG{rn8XdQUUUUAQ`GCzi1kU){qX}c z6F1yOme5+omlS&MCvB#mF4JSRmnX6|Di;{McxQNGhn$^r{!eDPcKePW4?lnP2Scpb zAPF-^HEZiFC}z-M1J*Hz=0}$uh(0#$I%8vFK8IB$dp#f5FVI{sCD(sVm_d~#0OhMi=<@dykI z1QP%N2T{c^2k(m2BWxR;Mo)iw0bjqY>W=)sPE^a&*sFj3goTGIXlq0Mxr^?tYhWP$ zz~LGC&FlPhk=M5#tZN|K>2=X@X&cLvp?{%?rjtu%_98W#rVVKcR#2?EOBw7)6XxZ7 z+*^H4QtrMBy8t{I$_oHwMn=ZhuPhN(&{u4)4AGaR`?&rDMo}RSYnjD@yx3(M-;u}I zf0%lIJ;w&1mQimaP(>R<8E5ndih68>vuDH2-@7JH5lgz#!mPDqkNZGUv9cEGpKeUo zLcfnmeQTH;l!`Yw&Ow*lwqp&(=n@H!xSF!~>6nslHvt(J`+@+wdg<)e0%448!}Pbk|6B_1|xD zq+;6VasGGXf`K94s;xf_fq~a2Z1(9zg*?1E41i*~FLnoodhy~}0fEd9y%l@c%|nd+ z8$gZ;e2j?I;g+HN;Lv}k|3^7^UxsqzFi?PgU(pg?9?gYT6hSaTN&3E-ck!Pz?Z)qm z(*u?S+#6TFJj-DzL^I5Qjq++k<^=2G3){Y!+~jtceQS7cRgef*LWH8RHHb^7ZrkOt zwuUT$dQL;bGcK;ELoR;)_``catsnpg`1?0sXFk766&lcZ&sAoOsRsCVU~qtybK^t z(D8I;Q4QWp4ZT@88yE*o0J~Nwz>}zzYop8!=g7p;2x7K8Ha{LnA@@0h;CLwbi-y zU!8B?va+&Tmq&<*LXRXVx#*$1CjTBeqkX6sk^XP)GXOCS8K8cwTh}}tIEqCxfp@fC(=z6nlE5H18$P0r==Bx$OPvC8mS7(T%|8? zG@vjrJ>OfZQD#8Vc{bjhTkX=Dv~DP-0XT&usBf zyOh97vN^JA?TJ&1v%(@~qi)RQT?$~FLqoZiR5f~JmNKf3+8GbY4l-~Re&Ldg_cKYg zWqPbhNA7$t(472H1g2|42ut)!Sh=Z^_d$(~jk&qYp*7G&fET50WaI#>7JRJ-fH(n~ z0zK5K%Z`Bh>2|nLzrFdL6pjY0AvDO&PoJ@~%ZrGlm6a(;NzpSicek}+t4FlW%v^#b zC+M{CZ(GoZ<{9B?l->FSHxwgE$|Pt~{6BoS*y&;u`mOvhlK3diSY3YWzuOOw?%k(7 ziz&jjFXOKq40%X@;L+dllGrMXvAXYd$p@q}&va3#+}c3A_)CP^qZiEh7;xVFg@hBU zs+=JOPn4Va`ucjfyGsU>!EVZSVz5M_e4&)fUf_ih^g`l1Xyb?|@x9qslBKYZ|D!XYdyZ0qn4Xz6=A z=3{+M$_ff;*$4IMNGxb}if)Z5TU*w@J)y%=183U;9h?mi1Ypmm zHugSQnAR(P7SecaQ&&-LU7Pse#*IfBJS-*^+Vfecmd)4SZ*)T#f8v&# zJwvTYvcK0y6Oio!z-Hj*2hPMt+}zPJbVDol(AdFkYiMZ9zm$s&dttf$cH-IBf`Tbv z0YC==u@w*+kL45}@bd;-MHYRI8rxtgpo{F#*uECf^5otpwBuh$w_&L|^N5$bnUL?9 zh->v7Acp}-4-fl2wJvq}TKXLL@=pi31 z<|29f*x1o{*XX;=Odo2_)whV_B!cIQ7gtbdBz%AhmV6~E3&>H7_q4XA1`^qWt448p zYAUP^BEMbk6)+08{ytnB_ddb(AuAe)XgvQqO+&*)NHW0L13Ci(X-FAV#`}2^>gxP#Y<)vRku9^J|NMhTX!oZ8UJJk|m})sW zuh{YCzXD;%me&$mf2zK&?zhYS+4BJW$c}kP-e+g-@HQZ}fFENfA%`>*6Z10`Ls>;- zV%(#skm$}GPL~}61C>1xn<674;lS2T`PS8)fwnctT~k}TOBE@dDQiX55B@X!5BbWX zqS)CK##_MDT)k9PH!~7;x1FCxb|9Fj;nC5Y?Cc%ZVQ2ur`?}Y9`@VF0vo|-+Dic5m zFeYTnKQ`)1e$RdnELq|cuU@?Z2r&?h=Od5SXG@b?gn8{6cs($xh3r7Ha&>jRYMdjc zrZmmW%*rx+X^3u?UD;2P!o#m{8bp$X#X2~k?^8SD5Iz+{#9Ck_z%+M7Z~9cgHm;3) zwX?Q<&dY-%+KPI?ugQAYxzMG-Yi>|hh94~-Hv9Jmik^^taa37`LipWg8U_?*<2D>T zNjPHbjK+LmU3leJiexVZc?v;Pva&0Q`n!t2X>@=A@ePfs(5 zsSqx{=%^?IL&KA!Bbwbzz}L>R->B0wvi~E~&o;b^#juWJ- z)ulufe~q&3A6!78;v8s11RVdVsi?$&c8U4}XAzn>=n9H*bMHZvf`~myvh0^CqUY7E zMn0=;Z}-*y(gc%Lic`!*lBU<=vAca+qSk6u{wGvoZN{rOW8oOCEuY?sH` z(RLKW8*9Eq@XCS*O+n%I#6VhTk71wI-kNcriAKsO)seJj)f^I4+{%7bYpqL8gJA}? z2Q3!T)kjwBmm-?br|P`S6_t+#GE>;&1QT^-D^ph|wF(BbDXE4cKv|#7=hYVNYE(2} zU_L=TzccncSa?;)!_o2NRhgLYNhgZGOMxi-UrFdad@H*A9q3XUZejbNP)(DQf)5@% zU}v{({fH2QMFTo*G!%P$Hv|nOC1sTF9rT=s7nbpRf)Q2(=CMtG+1~s6*Q>=46Ix=- z=a6K(O-G@Mf$Nfc=uMOCvb#up_pVO8E1ZpkpTXqt!6+|yXz1;XjEu@M#B?0q^UI$d zPT#n9Q$!tnPUg>9WpTaHB5i8|+tJ(+bx&fS8n6nlPXYhhn`A+rBbzjl)OrUSd5r{Z%-c=+v)3L+k+1X&cUDC*BdibzqU_e1p(H1Bg$as;_(MjB9BvvjfBCNEJt$pIZ%oo0^ic9*_p^&$g z_k}G~YP#x^qozDH8SLNw%`Y6qLH<3ZWF06BgZIa!CnUo~5@*E40>S77Lj##pMM=pWbQ6$0 z2TNcO0}@*(DJLCFef0H(>R_*qN``<#a$dSD!wb{EE0cl;=s&$iVo7CUF7_33R%{G* zapvCVnugI8!4DM9wwB7U=z@b^Si)fTa<|^_ajSV*Qg!wburo>Qk}~Sf3XMb zujjsj-u2C&_RCCPT$N)j4<4NmZpVLP;FARM&tKKat7X>D-+y6o5qu#rYyn=W7w=(h z%wA0Ay~H2uwY<(9*?)5+(f(-79ZBVMEXZd+nDhAf1f`H zh)7<$eji-dl6pgO0>dR{k1}iG&c|NU5;AaeJHP-2ByXT?0oOxs2QY) zGvGG(Dd1rQyjo>$z#58P&J=1^qoZK!B_@A@HSqsc?XXe`W~>{Yu40FL<7uI$r9U1W z?JA@1>i{XNBdRe-J3{NfHlMAF|7X5HC6h0GRe1RiU&CuY}&CVF>72(DSVE zLBqE0T5)J++#|q50TbB_;rR@?08Z2bhE5C&{90!F@mF<#%DYllxVXw{^P?aG>4C?k z&dsB&ygd9ikAuU$klR6lPGbX%DSiFAj?B(Ne>{X;eB&-4+6Uo}S@GExE_~S>)Y=U= z{(o?Nm2pU7#hT9koj%Ap4)Uwwvx-CaApjlG2&^2z`vf@Vj`XTuX>f=!Xcy+?8`WMdUo0z=1=!RhC#?r!Zr4Z&xs1V(0G5pN z@;{@KS=*=HljNHPbK+i5TVyP}Un${A9ruroR|7CjsRGID~%3nH&@ga6pPd zs|=YO{2gy{WY=43y=gqjXc(4M92mutP2^S$;)7N2=fuZb?(@W;p`rQQx=H4jEQGj0 zIw}6WDJ3fU02nZ+$#+GbfzHjaD42b?9Up&CSUvpax8!Sad=mp}HLC>Snd1Y~Bk4A5IlqO^>|B4=XBr!a z%;+ud2PryrjF0m(Ax!yN`ao$;=0Nc^8@*3MgSu$)@f!l<2QWCg{MW0yY(loYA6xWZ z%{{tDLFYgHr7)e$=G=IunNoRk3>Rd zAccu*XiWb8{fw3tQ{{&jRX|>aUe7U9vl0&bel(W%O*;5 zK3H^Vvi$I7of3oV_yM3#0v4}=8K1sWtKTIZCf(l@RUY_jskFKu;-wrMMh7t>jEp{k zB&#_mh5cZ{--bzob2!5l!QlDM99n@E7Ufk^!U5s_Ou&`*iaO=)zUbh^c@48(z4qIci<>2H{LockGk@8${Tdr< zFXHZjn*n@X4hJ4+93@rNJAvYm;Xs7`s#c7CM%{FlbQGNl>X-SrRfbH-m_4(#+Alt>-p(-<%r_P%b{% zmqIu7o$o3Yi~ga4jh#+O#)Y~*jh)H@gvju)()>0ADmcMESUx2f*5@Monw|ZjYayLd z8ll(J(h^=UxQ74eQ@h~WGzE2oiNwpnxsW^5G`WXh)hHXSBiU<-k^@cBrz+6MU&NRx$yMx7dIIl0RL0?S)OckdR#FvpW8 z#c641D9E4e5d6?yZkzopw_VKuu(4h+!3p{L)#8-+NnAA8;dyy? z&x;0nZiUF_B*MsTBAi^{JDi_hK(7ypI?3^kqT=_tZHr4E@dr-?1#7>3la~({J&*hR zc_NZt&iR!Opq^d2uX~DM%z?Qlu&_cS7X0bcvOU0(69guHfw=&^O@Z2A?WmbF7sziI zsnK=LnQk`VfQUc77+qe(#(tP+bOJuj0`2+};6wqn4gWefI&Xqb3yi*36AOYrQ$?h6 zix!^CH^w9o zV`FQ3l@%aGPw;3rdI~Wyfj4JGN<*X{g?06*I^d>+r1L1U12zE;roDg=m>3>CdJk6B z!_Aq1F1|GX9z$wAYZ?|7*bR&0on~$JS{PJ^+XZh47}0Jwv87!&#k^5hKc2K|JU%@I z$pW#Tn1#908jxANGJH})u85q$K^PLegh_B{TENaxmYr<~c1~b0;mk@v0({KICJe?# zU>9@Dmhl+(_xEAwJw5$_u&@p)U=3lQr=js`)%&VmDygASJA@B}He4S)1efqF7=9jy z=;h_+o*gfx7;sdVmm|@wdJ78+KwX0l_x*jpygir>0lG3UGGbw4!?7b?x0W~5)g_>y zC;;_8u4TV8Y8TifIJ@-p^pG_GM&k!u@heeLeo;P~xiE1G2(67-;Z3@60b$(b3V-(CC^xfI(y!X))l4 zXA1{a=RxHK_+nwio0gt__kE@Ot*F>o7`a8E08}-)ANx4+`3A|);7$y{G)RZR4%`3` zIWW<&y1w3{R}82S#<41Zx`i>GvUT^%i*o=kU|bE6%s`Y?Re@a~LVW|o0kgaU{QOxt zInY=_dZApdyCY4LtF#JUj|TT+LNcv z1;gtw5rI$rtb4&0XvBEnBq91>Q(@SRMZE-by%K#J4?h43EevV4>fOdcFw0s%;*grEUg(#Fk%n!&X7iYVDun&ZR z;NIdeXeU4r1l+;)zi$p70y_a-H(<8FZu?prG6HzG>8LJSF3+IR0zRj^x0j9p2Tm6P z7RzVPp4ENi3+oq!rje0xXKM>c)TMF+jOuVbbDqhW8Q7H>n9K%=Pwc}@n7RR$Nc_p4 z2AEBZ0d-YN>k8>ttV6bh@i3t4VOSO>3kVIQ&zTp>c40T*!5%OvbKd&|EPh3nu+*n} zSCSEsj82HtApi$G_BcO3Okll+avIs3q#uMsy4CF@H3yR4GXks*AP_@O$IN`wKxrxCR(+ui^i}r-Hcv?)Rt1atsNa&lm5Qd`gWC`6jp(H#1*d94Nb zRt%jAb5fKpYznlWWX3+$}`vtUko#h zgy?8xa7aZwdIb!ZU`YDW>1mNxZ3UP_;n4~U@l7;~^;!W~P5-`n52iBr!M2s@F_10+D~R%fSsGzz^&ory`0qB1B8l2wz#YuZ&4Coh z#LC*>u%`0n4f4i*27h=IwgZ|dK(;@1*-nZ!o$TK93AcJ?bWU@j|W&1*@1}y z(-)+`wx2&CTY#V704nixA6Pqs$$1@J+F{BQC|Q1@`~$6x6pyB$04IpDNus}lr7*IAyt9h1o(%()#YW7ukm0%Ac}#7 z0Cx`L?h}Qt1!&p-`yPtQtSk`SpsP@pmE8c273BpK4rDuc&G(kV|NoAtLPx#9#}vW% z0fhs6O3reW6cj+jprMFxAMx%f9fO08<1V{SCe_G{@r;69+->Z^L+)xrGIANZ0JDAP+-d z;JEbj6pkGPn26X(IDD&1cef0# zKk^{11*+tGLqkUwpu)OhLDL7K25fZ?B|j~1&jL_|OGQRRxYl9g_?(Dd=09Wif_Fpe zO{cu}8NL-k=0P|(7N)vRTi_ZXn7|iLG{P*&e{5LJo#5~Sxdo~;En&y>G-cj@zRqVy z#UKiTZ4hWE7}P>;;^BeUptZGi(lQyoKZcrmW^ByZ-2CbLP9g(~P-HC@3spgptDAfbd|1!G@2*&FvJl zmhFaYNZPP!*|JF|Fc}Bla3P_3SoVkO2&5C3Dr8t4g~`I#($ddY72paXq?{iP6=CWn zwu|zK9?W}o!{UM<6}}I*{1J#^SX78Gn4u55p7#_^a(8=sSZwU!{{DI|H49A90z%=V z*Z{c#c_YY3$6L+}O>23}1JEibFVSF?Zw ziE8SKWeZPx3f{BK8td3gYUp^um;sMaS6>gaj?flC)_`P6%g6|R2Tp(h&77?yJ|~z? ze_-}35)w3651=Z*-a`8bB&16bKBa*D&U^=?Q1JD@cp;eFIy;e%V2CZUu6gauoq$A{PHp=kt_@h zq<8POE!dKik%cK9gDe2(8eTwTo_BaJ+t*Z9@?!Zu0skE*XNxX7C}|K@657)Uc;Ec| z#O39~;^M~o)5M_btJbu1cILwmfcS=811$~r`t|>r22kUfg@u;GxeCy+LCjA~kOj4# z93K}$JyYi8t%QaCL?!fAQqmBl1L)}IY^!0;uX%18-U>4M*HG-7 zoMIOUK6J<^)Ye5^5-|UC;nL1esg7?zkKxy~@G&qD@CYEX@v*T#)_m}V0uX+`=>Wt6 zLh@54w1tSSlxi)5hMPR$Qk7{KrPWdIm$w;kd8AU0N3Oy0dqOHI`^ zG=!;TP&m?I_Ua+>kQ3y2fU@f9;~DeBt84 zulUy9nyj6{2oe=Eu++ky^S0G8bavqW2AFUqvgX6}z*bU6>vvWHn2}@W>ic%?-CP77 zv>nD56=A1f-Xewi_6vRh+&T@2J9NhI!~bi2Z_kJMDcC#kO@Yx*leMy;0rG*iq~wP~ z%8#vjPU{oDk}50Q4lPklfMLROfN8*n&c2S+rN(8~5JDTCWj+!{%%PEmsnG1#2_M{7 z?h+9JDzA9W5AY3$3+TK>lb^Zn;RLiKJ#|3{T~-$tKQ!ycu<3;SpAxP;9?HCrJ}x1I zN+ELD^&(1EF8Sn^TMWrgwiQ;i7S&h`t&}{7E^lonqs^P^jD#4MWysR&9Q$v42CJNTOtsuzw4D|$OK0LItB;7TtjF;lGqCo zWyZ|VP}WLfHBLn7fv(_1i5N_0Fz`ojbmGTEsx;Ws3=SD@2Z!TWEjYJb-I12Wn}v~x zsoKix)$d#&Kjy@FWp%7JTkg16s+&z$rfEAF=0L8)mI#403BzuL2>yQ?cP2vU%eOxHSK?LWh6=It`_e_w`7jTr{? zcOo%0b=_aPJ0c2F>EWFDxSxUdhKruliyBJ z3rem_#7Bn7^?~p@O`8W>!|)n4U~yhCCfK4oeI7Z~E@7tB6|gYki5IRd;=ThC#0f`wwFa98y7lPN{?jiz?*O>@uibo3c%!Ul-6v-uZ0@s+ZU)z z2CSDL{&@04CyT#DHud^-1uMIHoj*#|kJ@Tua04V{pqS&SFZ3_*#v)|SV#!(>8Ohxn znAfU{!jK7VXgJ5uV+4z{NyH zCZ?lT0RqLXfV1mec4TbW9w!|U`)$K)K~ob*sqn;SZ=97F?cwWm-OL!4-5W7II}3qO zohAph!NlZ@uW;bSi{FDyxgWwSgH5R=PkVaGe*10P`3?E?3T18m$Y0=Tf=u-%xE4}d zj@{Nwes}>qB?IOsc?E^mElov`p>Pl46%rZ>Ya=?~wrOcq@V<}zO1KW!J8ozw6_~_; zS%U**=jOWH`i5M58H-aL?Jl~T06lPk&H0obKM; zBuO9(Y>dq53{M}!I`|N#4XGf}m|7_*F|x8&AsJz6kHI)A>+%5?7o_N6g@dqfV{SeV zHRs&9bBMF~`S^r2erwhtq<`~C?FOX~4Bub{Fa&p4dAYG}2{OtR6_x{{8XeU1LCVFnOtZQYh>vVZqTd`<2LvTjJqXT~Tsw`43nX6={@0 z#9r7>0pjjgN)_Nt0}LSt6(#p;SfB9%ThwE=pxvi9H#flBTltzpnmPS5mgvrdP{d=$?bga_ zv*+ewptz+vh!xna&7qyp`TtkGR>G1_z2x{QcwVFl`zgE;gPRmUZWKm%UxG+#Pgfm@ z+zZrjh^8|vc!R8*k;#n~coNl}bXe|qwZTiqMv<#TzaHDd#m z>TFm!+;r31+nttrSE1K}-r@3%-m8&`I!Q%BTUqv>X#&=@2>)WMpzW%ytxd()AEEu^ z64D(dI8X@c>O|vfoWodo_+kM@VT{Xd_)N3d2M1SiaTuNc=infq)}Y8N(bZ*Nn`imz zjN{I&hdew$ADRQw%KtqdeIAG;HHD9axt;jst$5ejAK29Eno~Yf4emI;e_h}6>3m-5KZ%SX>4Wpb~q%tKqLacyA`JL!1UKtI{P z<>N2dem1aHfU4jl+S?~mOBz9rVW@I)N@1~d5C$JFNCV{lX=(_7cW7t`4J`Qcz^ZMn zt@x1O=rG)|3kvcUVpv}HYidR(CQydRA0CFFyBzx}F7(a0YLl$3vZ;vCM`JXMAvgrW z!oorx$>S|A$6 zfeHw8e~OxWzFW}H)ci3d#HD;ak&kTHSzieP^NPB~7cY)bt>SHm(O<%;ntZ`E($Ptx zm8L<S-;IsA z=^{7D1mD0wAYr!GGV;Nx?ch+nw`%Yzmw1!D$Yyk?9D^u!#R&`mJMf|@G@QTBG=esW z=w{9oHpj?_7!%4X1ZC*&3_6-3puMHMNool!+paiXq3GuB-T(~}l8aCyE(PFz%_}s&&(HgI-Z4I5OAr#~qS67h&Mimi>@J&M zSfCnYK-jDqmeZsS3=YZ_;1i9`hZkGm3ub^nDG>OL4gzlFLW{H(LyOc`mgUnd_A50B zX5^NH4SF)kkufn&a;Lty(S`mM4r8>TJK0Y#%;jgBdCVk#7@ZRmZ!G-UQc9n%oK_!4h zEoi@kjcpe5c*3rzpg`jG-DmWfQ8zP}I*q)9mG_Evf=Z?X%NXW174C3r$0+7{XWlZM zzDQCK7p5>%S!PDK3D4r5%RAlO{)8^V8Fpk-9x}2>wK$fPfZzKn3J3PQ*5k0bBwJkg+v3CT&7|{+7_*UXRhu}Dovyic)2-y KI+Z&FCjSrM7tdh; delta 22643 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.993, 2=>0.00372, 3=>0.00319) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.000405, 2=>0.000195, 3=>0.999) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.000309, 2=>0.000249, 3=>0.999) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.00752, 2=>0.992, 3=>0.000947) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.00012, 2=>1.96e-5, 3=>1.0) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>8.09e-5, 2=>8.48e-5, 3=>1.0) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.00351, 2=>0.000732, 3=>0.996) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.995, 2=>0.00474, 3=>0.00011) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.00327, 2=>0.989, 3=>0.00818) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>6.88e-5, 2=>0.00843, 3=>0.991) ```` **Step 1** - Edit your code as follows: @@ -119,15 +119,15 @@ yhat = predict(mach2, Xstand) ```` ```` -Node @440 → LogisticClassifier(…) +Node @623 → LogisticClassifier(…) args: - 1: Node @909 → Standardizer(…) + 1: Node @703 → Standardizer(…) formula: predict( machine(LogisticClassifier(lambda = 0.001, …), …), transform( machine(Standardizer(features = Symbol[], …), …), - Source @128, + Source @747, ), ) ```` @@ -150,11 +150,11 @@ Xstand() |> pretty │ Float64 │ Float64 │ Float64 │ │ Continuous │ Continuous │ Continuous │ ├────────────┼────────────┼────────────┤ -│ 1.54143 │ -0.508564 │ 0.563239 │ -│ -0.597675 │ 0.271238 │ -0.895631 │ -│ -0.704197 │ 0.909215 │ -0.136268 │ -│ 0.489404 │ -1.47949 │ 1.40741 │ -│ -0.728959 │ 0.807603 │ -0.938747 │ +│ -0.694096 │ -0.0720163 │ 0.991034 │ +│ -0.614108 │ -0.715398 │ 0.185347 │ +│ 1.66195 │ -1.21514 │ -1.32235 │ +│ 0.220901 │ 0.975443 │ -0.709393 │ +│ -0.574649 │ 1.02711 │ 0.855364 │ └────────────┴────────────┴────────────┘ ```` @@ -178,11 +178,11 @@ yhat() ```` 5-element CategoricalDistributions.UnivariateFiniteVector{ScientificTypesBase.Multiclass{3}, Int64, UInt32, Float64}: - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.993, 2=>0.00372, 3=>0.00319) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.000405, 2=>0.000195, 3=>0.999) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.000309, 2=>0.000249, 3=>0.999) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.00752, 2=>0.992, 3=>0.000947) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.00012, 2=>1.96e-5, 3=>1.0) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>8.09e-5, 2=>8.48e-5, 3=>1.0) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.00351, 2=>0.000732, 3=>0.996) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.995, 2=>0.00474, 3=>0.00011) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.00327, 2=>0.989, 3=>0.00818) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>6.88e-5, 2=>0.00843, 3=>0.991) ```` The node `yhat` is the "descendant" (in an associated DAG we have @@ -194,7 +194,7 @@ origins(yhat) ```` 1-element Vector{MLJBase.Source}: - Source @128 ⏎ `ScientificTypesBase.Table{AbstractVector{ScientificTypesBase.Continuous}}` + Source @747 ⏎ `ScientificTypesBase.Table{AbstractVector{ScientificTypesBase.Continuous}}` ```` The data at the source node is replaced by `Xnew` to obtain a @@ -207,8 +207,8 @@ yhat(Xnew) ```` 2-element CategoricalDistributions.UnivariateFiniteVector{ScientificTypesBase.Multiclass{3}, Int64, UInt32, Float64}: - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>1.13e-8, 2=>1.0, 3=>6.09e-8) - UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>2.89e-16, 2=>1.0, 3=>4.36e-13) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>0.0461, 2=>0.954, 3=>1.47e-10) + UnivariateFinite{ScientificTypesBase.Multiclass{3}}(1=>1.0, 2=>8.32e-5, 3=>1.38e-9) ```` **Step 2** - Export the learning network as a new stand-alone model type @@ -238,15 +238,15 @@ yhat = predict(mach2, Xstand) ```` ```` -Node @530 → :classifier +Node @708 → :classifier args: - 1: Node @804 → :standardizer + 1: Node @363 → :standardizer formula: predict( machine(:classifier, …), transform( machine(:standardizer, …), - Source @128, + Source @747, ), ) ```` @@ -380,7 +380,7 @@ y = source(y) ```` ```` -Source @555 ⏎ `AbstractVector{ScientificTypesBase.Continuous}` +Source @704 ⏎ `AbstractVector{ScientificTypesBase.Continuous}` ```` **First layer and target transformation:** @@ -396,13 +396,13 @@ z = MLJ.transform(mach2, y) ```` ```` -Node @022 → UnivariateBoxCoxTransformer(…) +Node @116 → UnivariateBoxCoxTransformer(…) args: - 1: Source @555 + 1: Source @704 formula: transform( machine(UnivariateBoxCoxTransformer(n = 171, …), …), - Source @555, + Source @704, ) ```` @@ -419,10 +419,10 @@ zhat = 0.5*predict(mach3, W) + 0.5*predict(mach4, W) ```` ```` -Node @135 +Node @464 args: - 1: Node @083 - 2: Node @797 + 1: Node @919 + 2: Node @316 formula: +( var"#*##0#*##1"( @@ -430,7 +430,7 @@ Node @135 machine(RidgeRegressor(lambda = 0.1, …), …), transform( machine(Standardizer(features = Symbol[], …), …), - Source @100, + Source @991, ), ), ), @@ -439,7 +439,7 @@ Node @135 machine(RandomForestRegressor(max_depth = -1, …), …), transform( machine(Standardizer(features = Symbol[], …), …), - Source @100, + Source @991, ), ), ), @@ -453,9 +453,9 @@ yhat = inverse_transform(mach2, zhat) ```` ```` -Node @539 → UnivariateBoxCoxTransformer(…) +Node @061 → UnivariateBoxCoxTransformer(…) args: - 1: Node @135 + 1: Node @464 formula: inverse_transform( machine(UnivariateBoxCoxTransformer(n = 171, …), …), @@ -465,7 +465,7 @@ Node @539 → UnivariateBoxCoxTransformer(…) machine(RidgeRegressor(lambda = 0.1, …), …), transform( machine(Standardizer(features = Symbol[], …), …), - Source @100, + Source @991, ), ), ), @@ -474,7 +474,7 @@ Node @539 → UnivariateBoxCoxTransformer(…) machine(RandomForestRegressor(max_depth = -1, …), …), transform( machine(Standardizer(features = Symbol[], …), …), - Source @100, + Source @991, ), ), ), @@ -491,9 +491,9 @@ yhat(rows=1:3) ```` 3-element Vector{Float64}: - 4.1049434111127105 - 4.674958202525163 - 4.112097582032496 + 1.5198312953553146 + 0.8824006167264453 + 1.57930874294795 ```` Now for the new model type: @@ -547,20 +547,20 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: CompositeModel-983 +Tag: CompositeModel-665 Extract: ┌───┬────────────────────────┬───────────┬─────────────┬─────────┐ │ │ measure │ operation │ measurement │ 1.96*SE │ ├───┼────────────────────────┼───────────┼─────────────┼─────────┤ -│ A │ RootMeanSquaredError() │ predict │ 3.87 │ 0.46 │ -│ B │ LPLoss( │ predict │ 2.454 │ 0.04 │ +│ A │ RootMeanSquaredError() │ predict │ 3.95 │ 0.68 │ +│ B │ LPLoss( │ predict │ 2.49 │ 0.26 │ │ │ p = 1) │ │ │ │ └───┴────────────────────────┴───────────┴─────────────┴─────────┘ ┌───┬──────────────────────────────────────┐ │ │ per_fold │ ├───┼──────────────────────────────────────┤ -│ A │ [4.45, 4.28, 3.41, 3.3, 4.21, 3.37] │ -│ B │ [2.45, 2.46, 2.46, 2.38, 2.53, 2.45] │ +│ A │ [3.09, 5.37, 3.61, 3.81, 3.63, 3.82] │ +│ B │ [2.17, 2.98, 2.62, 2.24, 2.35, 2.57] │ └───┴──────────────────────────────────────┘ Apply `describe` to this result for a named tuple summary. ```` diff --git a/docs/src/notebooks/MLJTutorial/99_solution_to_exercises/exercise_7c.png b/docs/src/notebooks/MLJTutorial/99_solution_to_exercises/exercise_7c.png index 08ac21bab1bdaaf5d6a21a6aa79a63e3adce6876..c1bf4803fd518bfdb7e369c12c97fcdaf5ec22ce 100644 GIT binary patch literal 23435 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 mQlzDB{bm0xPir)BJz@nwo=^W5Szt+bMBC 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 Wf2D}VCUbm^aN?+?NjZgf<$nN#i#kyN diff --git a/docs/src/notebooks/MLJTutorial/99_solution_to_exercises/notebook.md b/docs/src/notebooks/MLJTutorial/99_solution_to_exercises/notebook.md index 5cca734..4831a1b 100644 --- a/docs/src/notebooks/MLJTutorial/99_solution_to_exercises/notebook.md +++ b/docs/src/notebooks/MLJTutorial/99_solution_to_exercises/notebook.md @@ -50,8 +50,8 @@ A = rand(2, 3) ```` 2×3 Matrix{Float64}: - 0.301055 0.691879 0.504642 - 0.572222 0.788816 0.738401 + 0.52628 0.0908301 0.313487 + 0.798614 0.326598 0.49897 ```` ````@julia @@ -77,8 +77,8 @@ Asparse = sparse(A) ```` 2×3 SparseArrays.SparseMatrixCSC{Float64, Int64} with 6 stored entries: - 0.301055 0.691879 0.504642 - 0.572222 0.788816 0.738401 + 0.52628 0.0908301 0.313487 + 0.798614 0.326598 0.49897 ```` ````@julia @@ -95,8 +95,8 @@ C = coerce(A, Multiclass) ```` 2×3 CategoricalArrays.CategoricalArray{Float64,2,UInt32}: - 0.301055 0.691879 0.504642 - 0.572222 0.788816 0.738401 + 0.52628 0.0908301 0.313487 + 0.798614 0.326598 0.49897 ```` ````@julia @@ -326,16 +326,16 @@ y4 = [n_devices(row.salary) for row in eachrow(X4)] ```` 10-element Vector{Int64}: + 1 + 6 2 3 - 2 3 3 - 0 - 2 - 1 - 1 + 3 + 4 2 + 5 ```` 4(a) @@ -411,10 +411,10 @@ pretty(X) │ Float64 │ Float64 │ │ Continuous │ Continuous │ ├────────────┼────────────┤ -│ 0.11433 │ 0.538742 │ -│ 0.0704153 │ 0.19053 │ -│ 0.130344 │ 0.0186654 │ -│ 0.760926 │ 0.454443 │ +│ 0.350305 │ 0.767919 │ +│ 0.274291 │ 0.289089 │ +│ 0.184154 │ 0.321137 │ +│ 0.0530712 │ 0.558397 │ └────────────┴────────────┘ ```` @@ -590,19 +590,19 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: RandomForestClassifier-355 +Tag: RandomForestClassifier-111 Extract: ┌──────────────────────┬───────────┬─────────────┬─────────┐ │ measure │ operation │ measurement │ 1.96*SE │ ├──────────────────────┼───────────┼─────────────┼─────────┤ -│ LogLoss( │ predict │ 1.27 │ 0.33 │ +│ LogLoss( │ predict │ 1.09 │ 0.4 │ │ tol = 2.22045e-16) │ │ │ │ └──────────────────────┴───────────┴─────────────┴─────────┘ -┌──────────────────────────────────────┐ -│ per_fold │ -├──────────────────────────────────────┤ -│ [1.27, 1.4, 1.79, 1.27, 1.26, 0.616] │ -└──────────────────────────────────────┘ +┌─────────────────────────────────────────┐ +│ per_fold │ +├─────────────────────────────────────────┤ +│ [1.32, 1.35, 1.78, 0.727, 0.729, 0.639] │ +└─────────────────────────────────────────┘ Apply `describe` to this result for a named tuple summary. ```` @@ -661,7 +661,7 @@ err_forest = ```` ```` -1.290842672700936 +0.9752533003598175 ```` #### Exercise 7 @@ -727,19 +727,19 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: ProbabilisticPipeline-524 +Tag: ProbabilisticPipeline-258 Extract: ┌──────────────────────┬───────────┬─────────────┬─────────┐ │ measure │ operation │ measurement │ 1.96*SE │ ├──────────────────────┼───────────┼─────────────┼─────────┤ -│ LogLoss( │ predict │ 0.85 │ 0.11 │ +│ LogLoss( │ predict │ 0.89 │ 0.11 │ │ tol = 2.22045e-16) │ │ │ │ └──────────────────────┴───────────┴─────────────┴─────────┘ -┌──────────────────────────────────────────┐ -│ per_fold │ -├──────────────────────────────────────────┤ -│ [0.927, 1.02, 0.773, 0.85, 0.875, 0.665] │ -└──────────────────────────────────────────┘ +┌───────────────────────────────────────────┐ +│ per_fold │ +├───────────────────────────────────────────┤ +│ [0.827, 1.11, 0.828, 0.948, 0.842, 0.787] │ +└───────────────────────────────────────────┘ Apply `describe` to this result for a named tuple summary. ```` @@ -831,7 +831,7 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: DeterministicPipeline-491 +Tag: DeterministicPipeline-391 Extract: ┌──────────┬───────────┬─────────────┬─────────┐ │ measure │ operation │ measurement │ 1.96*SE │ @@ -858,7 +858,7 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: DeterministicTunedModel-859 +Tag: DeterministicTunedModel-238 Extract: ┌──────────┬───────────┬─────────────┬─────────┐ │ measure │ operation │ measurement │ 1.96*SE │ diff --git a/docs/src/notebooks/UsingMLJ/01_basics/notebook.md b/docs/src/notebooks/UsingMLJ/01_basics/notebook.md index 662e437..d9efcfe 100644 --- a/docs/src/notebooks/UsingMLJ/01_basics/notebook.md +++ b/docs/src/notebooks/UsingMLJ/01_basics/notebook.md @@ -14,14 +14,13 @@ given [here](@ref instructions). ### Video Timings - 00:00 Introduction -- 01:05 Goals -- 01:48 Prerequisites and Getting Help -- 02:21 Supervised Learning Recap -- 05:31 Models and Machines -- 09:28 **Live Coding:** Regression -- 28:55 Scientific Types -- 32:29 **Live Coding:** Scitypes and Classification -- 55:45 End +- 01:10 Goals +- 01:57 Prerequisites and Getting Help +- 02:33 Supervised Learning Recap +- 05:48 Models and Machines +- 09:49 **Live Coding:** Regression +- 29:20 Scientific Types +- 32:52 **Live Coding:** Scitypes and Classification We start by inspecting the packages, and their exact versions, in the currently active package environment: @@ -199,8 +198,8 @@ fitted_params(mach) ```` (forest = Ensemble of Decision Trees Trees: 100 -Avg Leaves: 146.21 -Avg Depth: 14.61,) +Avg Leaves: 146.19 +Avg Depth: 14.53,) ```` ````@julia @@ -219,9 +218,9 @@ predict(mach, X)[1:3] ```` 3-element Vector{Float64}: - 27.011 - 22.410999999999994 - 34.27 + 26.528000000000002 + 22.439 + 34.312 ```` Predict in the `test` rows: @@ -237,7 +236,7 @@ mae(ypred, y[test]) ```` ```` -4.574237623762377 +4.458702970297029 ```` `mae` is actually just an alias: @@ -284,14 +283,14 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: RandomForestRegressor-336 +Tag: RandomForestRegressor-330 Extract: ┌────────────┬───────────┬─────────────┐ │ measure │ operation │ measurement │ ├────────────┼───────────┼─────────────┤ -│ LPLoss( │ predict │ 4.57 │ +│ LPLoss( │ predict │ 4.46 │ │ p = 1) │ │ │ -│ RSquared() │ predict │ 0.33 │ +│ RSquared() │ predict │ 0.356 │ └────────────┴───────────┴─────────────┘ Apply `describe` to this result for a named tuple summary. ```` @@ -313,21 +312,21 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: RandomForestRegressor-817 +Tag: RandomForestRegressor-275 Extract: ┌───┬────────────┬───────────┬─────────────┬─────────┐ │ │ measure │ operation │ measurement │ 1.96*SE │ ├───┼────────────┼───────────┼─────────────┼─────────┤ -│ A │ LPLoss( │ predict │ 3.05 │ 0.89 │ +│ A │ LPLoss( │ predict │ 3.03 │ 0.87 │ │ │ p = 1) │ │ │ │ -│ B │ RSquared() │ predict │ 0.65 │ 0.16 │ +│ B │ RSquared() │ predict │ 0.66 │ 0.15 │ └───┴────────────┴───────────┴─────────────┴─────────┘ -┌───┬─────────────────────────────────────────┐ -│ │ per_fold │ -├───┼─────────────────────────────────────────┤ -│ A │ [2.27, 2.36, 3.25, 2.48, 4.97, 2.96] │ -│ B │ [0.723, 0.81, 0.742, 0.806, 0.441, 0.4] │ -└───┴─────────────────────────────────────────┘ +┌───┬────────────────────────────────────────────┐ +│ │ per_fold │ +├───┼────────────────────────────────────────────┤ +│ A │ [2.23, 2.43, 3.37, 2.47, 4.89, 2.83] │ +│ B │ [0.726, 0.811, 0.728, 0.827, 0.438, 0.447] │ +└───┴────────────────────────────────────────────┘ Apply `describe` to this result for a named tuple summary. ```` @@ -350,21 +349,21 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: RandomForestRegressor-621 +Tag: RandomForestRegressor-131 Extract: ┌───┬────────────┬───────────┬─────────────┬─────────┐ │ │ measure │ operation │ measurement │ 1.96*SE │ ├───┼────────────┼───────────┼─────────────┼─────────┤ -│ A │ LPLoss( │ predict │ 2.48 │ 0.1 │ +│ A │ LPLoss( │ predict │ 2.429 │ 0.095 │ │ │ p = 1) │ │ │ │ -│ B │ RSquared() │ predict │ 0.817 │ 0.038 │ +│ B │ RSquared() │ predict │ 0.84 │ 0.012 │ └───┴────────────┴───────────┴─────────────┴─────────┘ -┌───┬──────────────────────────────────────────────────────────────────────┐ -│ │ per_fold │ -├───┼──────────────────────────────────────────────────────────────────────┤ -│ A │ [2.37, 2.74, 2.27, 2.42, 2.75, 2.54, 2.36, 2.48, 2.41, 2.5] │ -│ B │ [0.87, 0.702, 0.857, 0.848, 0.824, 0.72, 0.843, 0.834, 0.839, 0.834] │ -└───┴──────────────────────────────────────────────────────────────────────┘ +┌───┬───────────────────────────────────────────────────────────────────────┐ +│ │ per_fold │ +├───┼───────────────────────────────────────────────────────────────────────┤ +│ A │ [2.29, 2.52, 2.51, 2.33, 2.41, 2.52, 2.52, 2.25, 2.26, 2.68] │ +│ B │ [0.825, 0.853, 0.841, 0.851, 0.83, 0.846, 0.853, 0.858, 0.851, 0.795] │ +└───┴───────────────────────────────────────────────────────────────────────┘ Apply `describe` to this result for a named tuple summary. ```` @@ -374,8 +373,8 @@ e.uncertainty_radius_95 ```` 2-element Vector{Float64}: - 0.10349121844149421 - 0.03773282475420102 + 0.09488695112138384 + 0.012422766062865595 ```` # Interlude on scientific types @@ -620,8 +619,8 @@ first(yprob, 5) 5-element CategoricalDistributions.UnivariateFiniteVector{ScientificTypesBase.Multiclass{2}, InlineStrings.String7, UInt32, Float64}: UnivariateFinite{ScientificTypesBase.Multiclass{2}}(<=50K=>1.0, >50K=>0.0) UnivariateFinite{ScientificTypesBase.Multiclass{2}}(<=50K=>1.0, >50K=>0.0) - UnivariateFinite{ScientificTypesBase.Multiclass{2}}(<=50K=>0.89, >50K=>0.11) - UnivariateFinite{ScientificTypesBase.Multiclass{2}}(<=50K=>0.28, >50K=>0.72) + UnivariateFinite{ScientificTypesBase.Multiclass{2}}(<=50K=>0.9, >50K=>0.1) + UnivariateFinite{ScientificTypesBase.Multiclass{2}}(<=50K=>0.25, >50K=>0.75) UnivariateFinite{ScientificTypesBase.Multiclass{2}}(<=50K=>1.0, >50K=>0.0) ```` @@ -632,8 +631,8 @@ yprob[3] ```` UnivariateFinite{ScientificTypesBase.Multiclass{2}} ┌ ┐ - <=50K ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.89 - >50K ┤■■■■ 0.11 + <=50K ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.9 + >50K ┤■■■■ 0.1 └ ┘ ```` @@ -644,7 +643,7 @@ accuracy(ypoint, y[test]) ```` ```` -0.7821057480677689 +0.7817986384808312 ```` ````@julia @@ -652,7 +651,7 @@ log_loss(yprob, y[test]) ```` ```` -1.53133125245395 +1.532945976938586 ```` Evaluate with one command: @@ -672,13 +671,13 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: RandomForestClassifier-321 +Tag: RandomForestClassifier-494 Extract: ┌──────────────────────┬──────────────┬─────────────┐ │ measure │ operation │ measurement │ ├──────────────────────┼──────────────┼─────────────┤ │ Accuracy() │ predict_mode │ 0.782 │ -│ LogLoss( │ predict │ 1.55 │ +│ LogLoss( │ predict │ 1.53 │ │ tol = 2.22045e-16) │ │ │ └──────────────────────┴──────────────┴─────────────┘ Apply `describe` to this result for a named tuple summary. diff --git a/docs/src/notebooks/UsingMLJ/02_model_composition/notebook.md b/docs/src/notebooks/UsingMLJ/02_model_composition/notebook.md index 7dde1c6..2162e5c 100644 --- a/docs/src/notebooks/UsingMLJ/02_model_composition/notebook.md +++ b/docs/src/notebooks/UsingMLJ/02_model_composition/notebook.md @@ -14,16 +14,15 @@ given [here](@ref instructions). ### Video Timings - 00:00 Introduction -- 00:08 Goals -- 01:19 Prerequisites and Getting Help -- 02:00 Composite Models Defined -- 04:13 Model Pipelines -- 05:59 Data Leakage -- 08:37 Target Transformations -- 12:43 Live Coding: Pipelines -- 18:42 Live Coding: Target Transformations -- 20:35 Other Model Wrappers -- 25:02 End +- 00:13 Goals +- 01:28 Prerequisites and Getting Help +- 02:12 Composite Models Defined +- 04:28 Model Pipelines +- 06:07 Data Leakage +- 09:00 Target Transformations +- 13:10 **Live Coding:** Pipelines +- 19:11 **Live Coding:** Target Transformations +- 21:01 Other Model Wrappers ````@julia using MLJ @@ -160,7 +159,7 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: DeterministicPipeline-500 +Tag: DeterministicPipeline-776 Extract: ┌──────────┬───────────┬─────────────┬─────────┐ │ measure │ operation │ measurement │ 1.96*SE │ @@ -225,7 +224,7 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: TransformedTargetModelDeterministic-470 +Tag: TransformedTargetModelDeterministic-712 Extract: ┌──────────┬───────────┬─────────────┬─────────┐ │ measure │ operation │ measurement │ 1.96*SE │ diff --git a/docs/src/notebooks/UsingMLJ/03_model_tuning/learning_curve.svg b/docs/src/notebooks/UsingMLJ/03_model_tuning/learning_curve.svg index 1f9c598..7df8fcb 100644 --- a/docs/src/notebooks/UsingMLJ/03_model_tuning/learning_curve.svg +++ b/docs/src/notebooks/UsingMLJ/03_model_tuning/learning_curve.svg @@ -1,46 +1,46 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/src/notebooks/UsingMLJ/03_model_tuning/notebook.md b/docs/src/notebooks/UsingMLJ/03_model_tuning/notebook.md index a6661c2..ea90790 100644 --- a/docs/src/notebooks/UsingMLJ/03_model_tuning/notebook.md +++ b/docs/src/notebooks/UsingMLJ/03_model_tuning/notebook.md @@ -14,15 +14,14 @@ given [here](@ref instructions). ### Video Timings - 00:00 Introduction -- 00:06 Goals -- 01:12 Prerequisites and Getting Help -- 01:27 Live Coding: Learning Curves -- 13:27 Tuning as Model Wrapper -- 18:45 Live Coding: Grid Search -- 26:17 Live Coding: Random Search -- 30:48 Nested Resampling -- 33:11 Final Observations -- 36:59 End +- 00:11 Goals +- 01:21 Prerequisites and Getting Help +- 01:42 **Live Coding:** Learning Curves +- 13:57 Tuning as Model Wrapper +- 18:53 **Live Coding:** Grid Search +- 26:32 **Live Coding:** Random Search +- 31:07 Nested Resampling +- 33:31 Final Observations ## Part I. Learning Curves @@ -94,7 +93,7 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: ProbabilisticPipeline-489 +Tag: ProbabilisticPipeline-772 Extract: ┌──────────┬──────────────┬─────────────┬─────────┐ │ measure │ operation │ measurement │ 1.96*SE │ @@ -161,7 +160,7 @@ savefig("learning_curve.svg"); ```` [ Info: Training machine(DeterministicTunedModel(model = DeterministicPipeline(continuous_encoder = ContinuousEncoder(drop_last = false, …), …), …), …). [ Info: Attempting to evaluate 30 models. - Evaluating over 30 metamodels: 0%[> ] ETA: N/A Evaluating over 30 metamodels: 3%[> ] ETA: 0:00:00 Evaluating over 30 metamodels: 7%[=> ] ETA: 0:00:00 Evaluating over 30 metamodels: 10%[==> ] ETA: 0:00:01 Evaluating over 30 metamodels: 13%[===> ] ETA: 0:00:02 Evaluating over 30 metamodels: 17%[====> ] ETA: 0:00:02 Evaluating over 30 metamodels: 20%[=====> ] ETA: 0:00:02 Evaluating over 30 metamodels: 23%[=====> ] ETA: 0:00:04 Evaluating over 30 metamodels: 27%[======> ] ETA: 0:00:04 Evaluating over 30 metamodels: 30%[=======> ] ETA: 0:00:04 Evaluating over 30 metamodels: 33%[========> ] ETA: 0:00:04 Evaluating over 30 metamodels: 37%[=========> ] ETA: 0:00:04 Evaluating over 30 metamodels: 40%[==========> ] ETA: 0:00:04 Evaluating over 30 metamodels: 43%[==========> ] ETA: 0:00:04 Evaluating over 30 metamodels: 47%[===========> ] ETA: 0:00:04 Evaluating over 30 metamodels: 50%[============> ] ETA: 0:00:04 Evaluating over 30 metamodels: 53%[=============> ] ETA: 0:00:05 Evaluating over 30 metamodels: 57%[==============> ] ETA: 0:00:05 Evaluating over 30 metamodels: 60%[===============> ] ETA: 0:00:05 Evaluating over 30 metamodels: 63%[===============> ] ETA: 0:00:05 Evaluating over 30 metamodels: 67%[================> ] ETA: 0:00:05 Evaluating over 30 metamodels: 70%[=================> ] ETA: 0:00:05 Evaluating over 30 metamodels: 73%[==================> ] ETA: 0:00:05 Evaluating over 30 metamodels: 77%[===================> ] ETA: 0:00:04 Evaluating over 30 metamodels: 80%[====================> ] ETA: 0:00:04 Evaluating over 30 metamodels: 83%[====================> ] ETA: 0:00:04 Evaluating over 30 metamodels: 87%[=====================> ] ETA: 0:00:03 Evaluating over 30 metamodels: 90%[======================> ] ETA: 0:00:03 Evaluating over 30 metamodels: 93%[=======================> ] ETA: 0:00:02 Evaluating over 30 metamodels: 97%[========================>] ETA: 0:00:01 Evaluating over 30 metamodels: 100%[=========================] Time: 0:00:35 + Evaluating over 30 metamodels: 0%[> ] ETA: N/A Evaluating over 30 metamodels: 3%[> ] ETA: 0:00:00 Evaluating over 30 metamodels: 7%[=> ] ETA: 0:00:01 Evaluating over 30 metamodels: 10%[==> ] ETA: 0:00:02 Evaluating over 30 metamodels: 13%[===> ] ETA: 0:00:02 Evaluating over 30 metamodels: 17%[====> ] ETA: 0:00:02 Evaluating over 30 metamodels: 20%[=====> ] ETA: 0:00:05 Evaluating over 30 metamodels: 23%[=====> ] ETA: 0:00:04 Evaluating over 30 metamodels: 27%[======> ] ETA: 0:00:04 Evaluating over 30 metamodels: 30%[=======> ] ETA: 0:00:04 Evaluating over 30 metamodels: 33%[========> ] ETA: 0:00:04 Evaluating over 30 metamodels: 37%[=========> ] ETA: 0:00:04 Evaluating over 30 metamodels: 40%[==========> ] ETA: 0:00:04 Evaluating over 30 metamodels: 43%[==========> ] ETA: 0:00:04 Evaluating over 30 metamodels: 47%[===========> ] ETA: 0:00:04 Evaluating over 30 metamodels: 50%[============> ] ETA: 0:00:04 Evaluating over 30 metamodels: 53%[=============> ] ETA: 0:00:04 Evaluating over 30 metamodels: 57%[==============> ] ETA: 0:00:05 Evaluating over 30 metamodels: 60%[===============> ] ETA: 0:00:05 Evaluating over 30 metamodels: 63%[===============> ] ETA: 0:00:05 Evaluating over 30 metamodels: 67%[================> ] ETA: 0:00:05 Evaluating over 30 metamodels: 70%[=================> ] ETA: 0:00:05 Evaluating over 30 metamodels: 73%[==================> ] ETA: 0:00:04 Evaluating over 30 metamodels: 77%[===================> ] ETA: 0:00:04 Evaluating over 30 metamodels: 80%[====================> ] ETA: 0:00:04 Evaluating over 30 metamodels: 83%[====================> ] ETA: 0:00:04 Evaluating over 30 metamodels: 87%[=====================> ] ETA: 0:00:03 Evaluating over 30 metamodels: 90%[======================> ] ETA: 0:00:03 Evaluating over 30 metamodels: 93%[=======================> ] ETA: 0:00:02 Evaluating over 30 metamodels: 97%[========================>] ETA: 0:00:01 Evaluating over 30 metamodels: 100%[=========================] Time: 0:00:32 ```` @@ -238,7 +237,7 @@ savefig("tuned_model_grid.svg"); ```` [ Info: Training machine(DeterministicTunedModel(model = DeterministicPipeline(continuous_encoder = ContinuousEncoder(drop_last = false, …), …), …), …). [ Info: Attempting to evaluate 36 models. - Evaluating over 36 metamodels: 6%[=> ] ETA: 0:00:55 Evaluating over 36 metamodels: 8%[==> ] ETA: 0:00:51 Evaluating over 36 metamodels: 11%[==> ] ETA: 0:00:43 Evaluating over 36 metamodels: 14%[===> ] ETA: 0:00:37 Evaluating over 36 metamodels: 17%[====> ] ETA: 0:00:34 Evaluating over 36 metamodels: 19%[====> ] ETA: 0:00:36 Evaluating over 36 metamodels: 22%[=====> ] ETA: 0:00:35 Evaluating over 36 metamodels: 25%[======> ] ETA: 0:00:34 Evaluating over 36 metamodels: 28%[======> ] ETA: 0:00:35 Evaluating over 36 metamodels: 31%[=======> ] ETA: 0:00:34 Evaluating over 36 metamodels: 33%[========> ] ETA: 0:00:32 Evaluating over 36 metamodels: 36%[=========> ] ETA: 0:00:31 Evaluating over 36 metamodels: 39%[=========> ] ETA: 0:00:29 Evaluating over 36 metamodels: 42%[==========> ] ETA: 0:00:27 Evaluating over 36 metamodels: 44%[===========> ] ETA: 0:00:25 Evaluating over 36 metamodels: 47%[===========> ] ETA: 0:00:24 Evaluating over 36 metamodels: 50%[============> ] ETA: 0:00:22 Evaluating over 36 metamodels: 53%[=============> ] ETA: 0:00:22 Evaluating over 36 metamodels: 56%[=============> ] ETA: 0:00:20 Evaluating over 36 metamodels: 58%[==============> ] ETA: 0:00:19 Evaluating over 36 metamodels: 61%[===============> ] ETA: 0:00:17 Evaluating over 36 metamodels: 64%[===============> ] ETA: 0:00:17 Evaluating over 36 metamodels: 67%[================> ] ETA: 0:00:15 Evaluating over 36 metamodels: 69%[=================> ] ETA: 0:00:14 Evaluating over 36 metamodels: 72%[==================> ] ETA: 0:00:12 Evaluating over 36 metamodels: 75%[==================> ] ETA: 0:00:11 Evaluating over 36 metamodels: 78%[===================> ] ETA: 0:00:10 Evaluating over 36 metamodels: 81%[====================> ] ETA: 0:00:09 Evaluating over 36 metamodels: 83%[====================> ] ETA: 0:00:07 Evaluating over 36 metamodels: 86%[=====================> ] ETA: 0:00:06 Evaluating over 36 metamodels: 89%[======================> ] ETA: 0:00:05 Evaluating over 36 metamodels: 92%[======================> ] ETA: 0:00:04 Evaluating over 36 metamodels: 94%[=======================> ] ETA: 0:00:02 Evaluating over 36 metamodels: 97%[========================>] ETA: 0:00:01 Evaluating over 36 metamodels: 100%[=========================] Time: 0:00:42 + Evaluating over 36 metamodels: 6%[=> ] ETA: 0:00:47 Evaluating over 36 metamodels: 8%[==> ] ETA: 0:00:47 Evaluating over 36 metamodels: 11%[==> ] ETA: 0:00:47 Evaluating over 36 metamodels: 14%[===> ] ETA: 0:00:41 Evaluating over 36 metamodels: 17%[====> ] ETA: 0:00:36 Evaluating over 36 metamodels: 19%[====> ] ETA: 0:00:37 Evaluating over 36 metamodels: 22%[=====> ] ETA: 0:00:40 Evaluating over 36 metamodels: 25%[======> ] ETA: 0:00:37 Evaluating over 36 metamodels: 28%[======> ] ETA: 0:00:35 Evaluating over 36 metamodels: 31%[=======> ] ETA: 0:00:33 Evaluating over 36 metamodels: 33%[========> ] ETA: 0:00:30 Evaluating over 36 metamodels: 36%[=========> ] ETA: 0:00:29 Evaluating over 36 metamodels: 39%[=========> ] ETA: 0:00:28 Evaluating over 36 metamodels: 42%[==========> ] ETA: 0:00:26 Evaluating over 36 metamodels: 44%[===========> ] ETA: 0:00:25 Evaluating over 36 metamodels: 47%[===========> ] ETA: 0:00:23 Evaluating over 36 metamodels: 50%[============> ] ETA: 0:00:23 Evaluating over 36 metamodels: 53%[=============> ] ETA: 0:00:22 Evaluating over 36 metamodels: 56%[=============> ] ETA: 0:00:20 Evaluating over 36 metamodels: 58%[==============> ] ETA: 0:00:19 Evaluating over 36 metamodels: 61%[===============> ] ETA: 0:00:18 Evaluating over 36 metamodels: 64%[===============> ] ETA: 0:00:17 Evaluating over 36 metamodels: 67%[================> ] ETA: 0:00:15 Evaluating over 36 metamodels: 69%[=================> ] ETA: 0:00:14 Evaluating over 36 metamodels: 72%[==================> ] ETA: 0:00:13 Evaluating over 36 metamodels: 75%[==================> ] ETA: 0:00:12 Evaluating over 36 metamodels: 78%[===================> ] ETA: 0:00:11 Evaluating over 36 metamodels: 81%[====================> ] ETA: 0:00:09 Evaluating over 36 metamodels: 83%[====================> ] ETA: 0:00:08 Evaluating over 36 metamodels: 86%[=====================> ] ETA: 0:00:07 Evaluating over 36 metamodels: 89%[======================> ] ETA: 0:00:05 Evaluating over 36 metamodels: 92%[======================> ] ETA: 0:00:04 Evaluating over 36 metamodels: 94%[=======================> ] ETA: 0:00:03 Evaluating over 36 metamodels: 97%[========================>] ETA: 0:00:01 Evaluating over 36 metamodels: 100%[=========================] Time: 0:00:49 ```` @@ -320,7 +319,7 @@ savefig("tuned_model_random.svg"); ```` [ Info: Training machine(DeterministicTunedModel(model = DeterministicPipeline(continuous_encoder = ContinuousEncoder(drop_last = false, …), …), …), …). [ Info: Attempting to evaluate 40 models. - Evaluating over 40 metamodels: 0%[> ] ETA: N/A Evaluating over 40 metamodels: 2%[> ] ETA: 0:00:52 Evaluating over 40 metamodels: 5%[=> ] ETA: 0:00:50 Evaluating over 40 metamodels: 8%[=> ] ETA: 0:00:43 Evaluating over 40 metamodels: 10%[==> ] ETA: 0:00:42 Evaluating over 40 metamodels: 12%[===> ] ETA: 0:00:42 Evaluating over 40 metamodels: 15%[===> ] ETA: 0:00:43 Evaluating over 40 metamodels: 18%[====> ] ETA: 0:00:41 Evaluating over 40 metamodels: 20%[=====> ] ETA: 0:00:40 Evaluating over 40 metamodels: 22%[=====> ] ETA: 0:00:37 Evaluating over 40 metamodels: 25%[======> ] ETA: 0:00:39 Evaluating over 40 metamodels: 28%[======> ] ETA: 0:00:36 Evaluating over 40 metamodels: 30%[=======> ] ETA: 0:00:35 Evaluating over 40 metamodels: 32%[========> ] ETA: 0:00:33 Evaluating over 40 metamodels: 35%[========> ] ETA: 0:00:32 Evaluating over 40 metamodels: 38%[=========> ] ETA: 0:00:32 Evaluating over 40 metamodels: 40%[==========> ] ETA: 0:00:30 Evaluating over 40 metamodels: 42%[==========> ] ETA: 0:00:30 Evaluating over 40 metamodels: 45%[===========> ] ETA: 0:00:28 Evaluating over 40 metamodels: 48%[===========> ] ETA: 0:00:26 Evaluating over 40 metamodels: 50%[============> ] ETA: 0:00:26 Evaluating over 40 metamodels: 52%[=============> ] ETA: 0:00:24 Evaluating over 40 metamodels: 55%[=============> ] ETA: 0:00:23 Evaluating over 40 metamodels: 58%[==============> ] ETA: 0:00:22 Evaluating over 40 metamodels: 60%[===============> ] ETA: 0:00:20 Evaluating over 40 metamodels: 62%[===============> ] ETA: 0:00:20 Evaluating over 40 metamodels: 65%[================> ] ETA: 0:00:18 Evaluating over 40 metamodels: 68%[================> ] ETA: 0:00:17 Evaluating over 40 metamodels: 70%[=================> ] ETA: 0:00:15 Evaluating over 40 metamodels: 72%[==================> ] ETA: 0:00:14 Evaluating over 40 metamodels: 75%[==================> ] ETA: 0:00:13 Evaluating over 40 metamodels: 78%[===================> ] ETA: 0:00:11 Evaluating over 40 metamodels: 80%[====================> ] ETA: 0:00:10 Evaluating over 40 metamodels: 82%[====================> ] ETA: 0:00:09 Evaluating over 40 metamodels: 85%[=====================> ] ETA: 0:00:08 Evaluating over 40 metamodels: 88%[=====================> ] ETA: 0:00:06 Evaluating over 40 metamodels: 90%[======================> ] ETA: 0:00:05 Evaluating over 40 metamodels: 92%[=======================> ] ETA: 0:00:04 Evaluating over 40 metamodels: 95%[=======================> ] ETA: 0:00:02 Evaluating over 40 metamodels: 98%[========================>] ETA: 0:00:01 Evaluating over 40 metamodels: 100%[=========================] Time: 0:00:50 + Evaluating over 40 metamodels: 5%[=> ] ETA: 0:00:57 Evaluating over 40 metamodels: 8%[=> ] ETA: 0:00:49 Evaluating over 40 metamodels: 10%[==> ] ETA: 0:00:49 Evaluating over 40 metamodels: 12%[===> ] ETA: 0:00:48 Evaluating over 40 metamodels: 15%[===> ] ETA: 0:00:48 Evaluating over 40 metamodels: 18%[====> ] ETA: 0:00:47 Evaluating over 40 metamodels: 20%[=====> ] ETA: 0:00:45 Evaluating over 40 metamodels: 22%[=====> ] ETA: 0:00:43 Evaluating over 40 metamodels: 25%[======> ] ETA: 0:00:44 Evaluating over 40 metamodels: 28%[======> ] ETA: 0:00:41 Evaluating over 40 metamodels: 30%[=======> ] ETA: 0:00:40 Evaluating over 40 metamodels: 32%[========> ] ETA: 0:00:38 Evaluating over 40 metamodels: 35%[========> ] ETA: 0:00:38 Evaluating over 40 metamodels: 38%[=========> ] ETA: 0:00:36 Evaluating over 40 metamodels: 40%[==========> ] ETA: 0:00:35 Evaluating over 40 metamodels: 42%[==========> ] ETA: 0:00:34 Evaluating over 40 metamodels: 45%[===========> ] ETA: 0:00:33 Evaluating over 40 metamodels: 48%[===========> ] ETA: 0:00:31 Evaluating over 40 metamodels: 50%[============> ] ETA: 0:00:30 Evaluating over 40 metamodels: 52%[=============> ] ETA: 0:00:28 Evaluating over 40 metamodels: 55%[=============> ] ETA: 0:00:26 Evaluating over 40 metamodels: 58%[==============> ] ETA: 0:00:25 Evaluating over 40 metamodels: 60%[===============> ] ETA: 0:00:24 Evaluating over 40 metamodels: 62%[===============> ] ETA: 0:00:22 Evaluating over 40 metamodels: 65%[================> ] ETA: 0:00:21 Evaluating over 40 metamodels: 68%[================> ] ETA: 0:00:19 Evaluating over 40 metamodels: 70%[=================> ] ETA: 0:00:18 Evaluating over 40 metamodels: 72%[==================> ] ETA: 0:00:16 Evaluating over 40 metamodels: 75%[==================> ] ETA: 0:00:14 Evaluating over 40 metamodels: 78%[===================> ] ETA: 0:00:13 Evaluating over 40 metamodels: 80%[====================> ] ETA: 0:00:12 Evaluating over 40 metamodels: 82%[====================> ] ETA: 0:00:10 Evaluating over 40 metamodels: 85%[=====================> ] ETA: 0:00:09 Evaluating over 40 metamodels: 88%[=====================> ] ETA: 0:00:07 Evaluating over 40 metamodels: 90%[======================> ] ETA: 0:00:06 Evaluating over 40 metamodels: 92%[=======================> ] ETA: 0:00:04 Evaluating over 40 metamodels: 95%[=======================> ] ETA: 0:00:03 Evaluating over 40 metamodels: 98%[========================>] ETA: 0:00:01 Evaluating over 40 metamodels: 100%[=========================] Time: 0:00:57 ```` @@ -354,7 +353,7 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: DeterministicTunedModel-587 +Tag: DeterministicTunedModel-147 Extract: ┌──────────┬───────────┬─────────────┬─────────┐ │ measure │ operation │ measurement │ 1.96*SE │ @@ -377,9 +376,9 @@ Comparing with the baseline computed earlier: ```` ```` -ebase = PerformanceEvaluation("ProbabilisticPipeline-489", 0.568 ± 0.033) -e0 = PerformanceEvaluation("DeterministicPipeline-381", 0.184 ± 0.028) -e1 = PerformanceEvaluation("DeterministicTunedModel-587", 0.175 ± 0.021) +ebase = PerformanceEvaluation("ProbabilisticPipeline-772", 0.568 ± 0.033) +e0 = PerformanceEvaluation("DeterministicPipeline-751", 0.184 ± 0.028) +e1 = PerformanceEvaluation("DeterministicTunedModel-147", 0.175 ± 0.021) ```` @@ -395,8 +394,8 @@ describe.([e0, e1]) |> pretty │ String │ Measurement{Float64} │ │ Textual │ Continuous │ ├─────────────────────────────┼──────────────────────┤ -│ DeterministicPipeline-381 │ 0.184±0.028 │ -│ DeterministicTunedModel-587 │ 0.175±0.021 │ +│ DeterministicPipeline-751 │ 0.184±0.028 │ +│ DeterministicTunedModel-147 │ 0.175±0.021 │ └─────────────────────────────┴──────────────────────┘ ```` diff --git a/docs/src/notebooks/UsingMLJ/03_model_tuning/tuned_model_grid.svg b/docs/src/notebooks/UsingMLJ/03_model_tuning/tuned_model_grid.svg index b284d62..61ea8e7 100644 --- a/docs/src/notebooks/UsingMLJ/03_model_tuning/tuned_model_grid.svg +++ b/docs/src/notebooks/UsingMLJ/03_model_tuning/tuned_model_grid.svg @@ -1,294 +1,294 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/src/notebooks/UsingMLJ/03_model_tuning/tuned_model_random.svg b/docs/src/notebooks/UsingMLJ/03_model_tuning/tuned_model_random.svg index fdc05dd..eb5cc66 100644 --- a/docs/src/notebooks/UsingMLJ/03_model_tuning/tuned_model_random.svg +++ b/docs/src/notebooks/UsingMLJ/03_model_tuning/tuned_model_random.svg @@ -1,269 +1,269 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/src/notebooks/lightning_tour/notebook.md b/docs/src/notebooks/lightning_tour/notebook.md index c912761..5b4c245 100644 --- a/docs/src/notebooks/lightning_tour/notebook.md +++ b/docs/src/notebooks/lightning_tour/notebook.md @@ -246,8 +246,8 @@ mach = machine(self_tuning_pipe, X, y) untrained Machine; does not cache data model: DeterministicTunedModel(model = DeterministicPipeline(continuous_encoder = ContinuousEncoder(drop_last = false, …), …), …) args: - 1: Source @634 ⏎ ScientificTypesBase.Table{AbstractVector{ScientificTypesBase.Continuous}} - 2: Source @471 ⏎ AbstractVector{ScientificTypesBase.Continuous} + 1: Source @585 ⏎ ScientificTypesBase.Table{AbstractVector{ScientificTypesBase.Continuous}} + 2: Source @899 ⏎ AbstractVector{ScientificTypesBase.Continuous} ```` @@ -261,9 +261,9 @@ first(yhat, 3) ```` 3-element Vector{Float32}: - -2.8776388 - -0.45805833 - -0.8760577 + -1.4080157 + -0.40302494 + -1.5811985 ```` Evaluating the "self-tuning" pipeline model's performance using all data and 5-fold @@ -285,21 +285,21 @@ PerformanceEvaluation object with these fields: per_fold, per_observation, fitted_params_per_fold, report_per_fold, train_test_rows, resampling, repeats -Tag: DeterministicTunedModel-157 +Tag: DeterministicTunedModel-336 Extract: ┌───┬────────────┬───────────┬─────────────┬─────────┐ │ │ measure │ operation │ measurement │ 1.96*SE │ ├───┼────────────┼───────────┼─────────────┼─────────┤ -│ A │ LPLoss( │ predict │ 0.17 │ 0.023 │ +│ A │ LPLoss( │ predict │ 0.138 │ 0.043 │ │ │ p = 1) │ │ │ │ -│ B │ RSquared() │ predict │ 0.9699 │ 0.009 │ +│ B │ RSquared() │ predict │ 0.89 │ 0.071 │ └───┴────────────┴───────────┴─────────────┴─────────┘ -┌───┬────────────────────────────────────┐ -│ │ per_fold │ -├───┼────────────────────────────────────┤ -│ A │ [0.155, 0.159, 0.2, 0.19, 0.146] │ -│ B │ [0.96, 0.981, 0.962, 0.969, 0.977] │ -└───┴────────────────────────────────────┘ +┌───┬─────────────────────────────────────┐ +│ │ per_fold │ +├───┼─────────────────────────────────────┤ +│ A │ [0.175, 0.179, 0.144, 0.0735, 0.12] │ +│ B │ [0.85, 0.788, 0.897, 0.971, 0.942] │ +└───┴─────────────────────────────────────┘ Apply `describe` to this result for a named tuple summary. ```` @@ -320,7 +320,7 @@ describe.(evaluations) |> pretty ```` [ Info: Performing evaluations using 1 thread. - Evaluating over 5 folds: 40%[==========> ] ETA: 0:00:11 Evaluating over 5 folds: 60%[===============> ] ETA: 0:00:07 Evaluating over 5 folds: 80%[====================> ] ETA: 0:00:04 Evaluating over 5 folds: 100%[=========================] Time: 0:00:18 + Evaluating over 5 folds: 40%[==========> ] ETA: 0:00:07 Evaluating over 5 folds: 60%[===============> ] ETA: 0:00:06 Evaluating over 5 folds: 80%[====================> ] ETA: 0:00:03 Evaluating over 5 folds: 100%[=========================] Time: 0:00:16 [ Info: Performing evaluations using 1 thread. Evaluating over 5 folds: 40%[==========> ] ETA: 0:00:01 Evaluating over 5 folds: 100%[=========================] Time: 0:00:00 ┌─────────┬──────────────────────┬──────────────────────┐ @@ -328,8 +328,8 @@ describe.(evaluations) |> pretty │ String │ Measurement{Float64} │ Measurement{Float64} │ │ Textual │ Continuous │ Continuous │ ├─────────┼──────────────────────┼──────────────────────┤ -│ booster │ 0.17±0.023 │ 0.9699±0.009 │ -│ dummy │ 1.13±0.15 │ -0.0044±0.0051 │ +│ booster │ 0.138±0.043 │ 0.89±0.071 │ +│ dummy │ 0.497±0.068 │ -0.093±0.14 │ └─────────┴──────────────────────┴──────────────────────┘ ```` diff --git a/learning_curve.svg b/learning_curve.svg index 177bf45..6ef948d 100644 --- a/learning_curve.svg +++ b/learning_curve.svg @@ -1,46 +1,46 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tuned_model_grid.svg b/tuned_model_grid.svg index 94c8ce2..b4fab86 100644 --- a/tuned_model_grid.svg +++ b/tuned_model_grid.svg @@ -1,294 +1,294 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tuned_model_random.svg b/tuned_model_random.svg index 5f65b2d..3233ede 100644 --- a/tuned_model_random.svg +++ b/tuned_model_random.svg @@ -1,269 +1,269 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +