From 9bc3daeba00e1c736db8d02d86317b1766264082 Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Thu, 21 Sep 2023 15:49:49 +1200 Subject: [PATCH 01/18] adapt /src to migration of measures MLJBase->StatisticalMeasures --- Project.toml | 2 ++ src/MLJ.jl | 11 +---------- test/exported_names.jl | 6 ++++++ 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/Project.toml b/Project.toml index 5a6b42914..60b6d8baf 100644 --- a/Project.toml +++ b/Project.toml @@ -21,6 +21,7 @@ ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Reexport = "189a3867-3050-52da-a836-e630ba90ab69" ScientificTypes = "321657f4-b219-11e9-178b-2701a2544e81" +StatisticalMeasures = "a19d573c-0a75-4610-95b3-7071388c7541" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" @@ -40,6 +41,7 @@ ProgressMeter = "1.1" Reexport = "1.2" ScientificTypes = "3" StatsBase = "0.32,0.33, 0.34" +StatisticalMeasures = "0.1" Tables = "0.2,1.0" julia = "1.6" diff --git a/src/MLJ.jl b/src/MLJ.jl index 161c975eb..6c6bc002a 100644 --- a/src/MLJ.jl +++ b/src/MLJ.jl @@ -18,6 +18,7 @@ using MLJTuning using MLJModels using OpenML @reexport using MLJFlow +@reexport using StatisticalMeasures using MLJIteration import MLJIteration.IterationControl @@ -108,16 +109,6 @@ for T in MLJBase.EXTENDED_ABSTRACT_MODEL_TYPES @eval(export $T) end -# MLJBase/measures: -# measure names: -for m in MLJBase.MEASURE_TYPES_ALIASES_AND_INSTANCES - :(export $m) |> eval -end -export measures, - aggregate, default_measure, skipinvalid, - roc_curve, roc, - no_avg, macro_avg, micro_avg - # re-export from MLJEnsembles: export EnsembleModel diff --git a/test/exported_names.jl b/test/exported_names.jl index fe95fc3e7..e49709972 100644 --- a/test/exported_names.jl +++ b/test/exported_names.jl @@ -27,4 +27,10 @@ Save() MLFlowLogger +# StatisticalMeasures + +rms +l2 +log_score + true From 98e54a0f3c07b0d062f5d4561829551b7546f5a4 Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Thu, 21 Sep 2023 16:49:51 +1200 Subject: [PATCH 02/18] update the docs to reflect measure migration --- docs/src/evaluating_model_performance.md | 67 ++++---- docs/src/performance_measures.md | 192 +++++------------------ 2 files changed, 73 insertions(+), 186 deletions(-) diff --git a/docs/src/evaluating_model_performance.md b/docs/src/evaluating_model_performance.md index 63476d14f..af6e86864 100644 --- a/docs/src/evaluating_model_performance.md +++ b/docs/src/evaluating_model_performance.md @@ -37,7 +37,7 @@ data: ```@repl evaluation_of_supervised_models mach = machine(model, X, y) -evaluate!(mach, resampling=cv, measure=l2, verbosity=0) +evaluate!(mach, resampling=cv, measure=l2), verbosity=0) ``` (The latter call is a mutating call as the learned parameters stored in the @@ -45,31 +45,41 @@ machine potentially change. ) ## Multiple measures +Multiple measures are specified as a vector: + ```@repl evaluation_of_supervised_models -evaluate!(mach, - resampling=cv, - measure=[l1, rms, rmslp1], verbosity=0) +evaluate!( + mach, + resampling=cv, + measures=[l1, rms, rmslp1], + verbosity=0, +a) ``` -## Custom measures and weighted measures - -```@repl evaluation_of_supervised_models -my_loss(yhat, y) = maximum((yhat - y).^2); +[Custom measures](@ref) can also be provided. -my_per_observation_loss(yhat, y) = abs.(yhat - y); -MLJ.reports_each_observation(::typeof(my_per_observation_loss)) = true; +## Specifying weights -my_weighted_score(yhat, y) = 1/mean(abs.(yhat - y)); -my_weighted_score(yhat, y, w) = 1/mean(abs.((yhat - y).^w)); -MLJ.supports_weights(::typeof(my_weighted_score)) = true; -MLJ.orientation(::typeof(my_weighted_score)) = :score; +Per-observation weights can be passed to measures. If a measure does not support weights, +the weights are ignored: +```@repl evaluation_of_supervised_models holdout = Holdout(fraction_train=0.8) weights = [1, 1, 2, 1, 1, 2, 3, 1, 1, 2, 3, 1]; -evaluate!(mach, - resampling=CV(nfolds=3), - measure=[my_loss, my_per_observation_loss, my_weighted_score, l1], - weights=weights, verbosity=0) +evaluate!( + mach, + resampling=CV(nfolds=3), + measure=[l2, rsquared], + weights=weights, +) +``` + +In classification problems, a class weight dictionary can be supplied instead. + +```@docs +MLJBase.evaluate! +MLJBase.evaluate +MLJBase.PerformanceEvaluation ``` ## User-specified train/test sets @@ -78,18 +88,20 @@ Users can either provide an explicit list of train/test pairs of row indices for ```@repl evaluation_of_supervised_models fold1 = 1:6; fold2 = 7:12; -evaluate!(mach, - resampling = [(fold1, fold2), (fold2, fold1)], - measure=[l1, l2], verbosity=0) +evaluate!( + mach, + resampling = [(fold1, fold2), (fold2, fold1)], + measures=[l1, l2], + verbosity=0, +) ``` -Or define their own re-usable `ResamplingStrategy` objects, - see -[Custom resampling strategies](@ref) below. +Or the user can define their own re-usable `ResamplingStrategy` objects, - see [Custom +resampling strategies](@ref) below. ## Built-in resampling strategies - ```@docs MLJBase.Holdout ``` @@ -159,10 +171,3 @@ function train_test_pairs(holdout::Holdout, rows) end ``` -## API - -```@docs -MLJBase.evaluate! -MLJBase.evaluate -MLJBase.PerformanceEvaluation -``` diff --git a/docs/src/performance_measures.md b/docs/src/performance_measures.md index 2d47c25e8..ab4b6f516 100644 --- a/docs/src/performance_measures.md +++ b/docs/src/performance_measures.md @@ -1,174 +1,56 @@ # Performance Measures -In MLJ loss functions, scoring rules, sensitivities, and so on, are -collectively referred to as *measures*. These include re-exported loss -functions from the -[LossFunctions.jl](https://github.com/JuliaML/LossFunctions.jl) -library, overloaded to behave the same way as the built-in measures. +**Quick link:** [List of aliases of all +measures](https://juliaai.github.io/StatisticalMeasures.jl/dev/auto_generated_list_of_measures/#aliases) -To see the list of all measures, run `measures()`. Further measures for -probabilistic predictors, such as proper scoring rules, and for -constructing multi-target product measures, are planned. If you'd like -to see a measure added to MLJ, post a comment -[here](https://github.com/JuliaAI/MLJBase.jl/issues/299).g +In MLJ loss functions, scoring rules, confusion matrices, sensitivities, etc, are +collectively referred to as *measures*. These measures are provided by the package +[StatisticalMeasures.jl](https://juliaai.github.io/StatisticalMeasures.jl/dev/). As this +package is a dependency of MLJ, and all its methods are re-exported, the measures are +immediately available to the MLJ user. Commonly measures are passed to MLJ meta-algorithms +(see [Uses of measures](@ref) below) but to learn how to call measures directly, see +[this](https://juliaai.github.io/StatisticalMeasures.jl/dev/examples_of_usage/) +StatisticalMeasures.jl tutorial. -*Note for developers:* The measures interface and the built-in -measures described here are defined in MLJBase, but will ultimately live -in a separate package. +A list of all measures ready to use after running `using MLJ` or `using +StatisticalMeasures`, is +[here](https://juliaai.github.io/StatisticalMeasures.jl/dev/auto_generated_list_of_measures/). Alternatively, +call [`measures()`](@ref) (experimental) to generate a dictionary keyed on available +measure constructors, with measure metadata as values. -## Using built-in measures +## Custom measures -These measures all have the common calling syntax +Any measure-like object with appropriate [calling +behavior](https://juliaai.github.io/StatisticalMeasuresBase.jl/dev/implementing_new_measures/#definitions) +can be used with MLJ. To quickly build custom measures, we recommend using the package +[StatisticalMeasuresBase.jl](https://juliaai.github.io/StatisticalMeasuresBase.jl/dev/), +which provides [this](https://juliaai.github.io/StatisticalMeasuresBase.jl/dev/tutorial/) +tutorial. Note, in particular, that an "atomic" measure can be transformed into a +multi-target measure using this package. -```julia -measure(ŷ, y) -``` - -or - -```julia -measure(ŷ, y, w) -``` - -where `y` iterates over observations of some target variable, and `ŷ` -iterates over predictions (`Distribution` or `Sampler` objects in the -probabilistic case). Here `w` is an optional vector of sample weights, -or a dictionary of class weights, when these are supported by the -measure. - -```@repl losses_and_scores -using MLJ -y = [1, 2, 3, 4]; -ŷ = [2, 3, 3, 3]; -w = [1, 2, 2, 1]; -rms(ŷ, y) # reports an aggregate loss -l2(ŷ, y, w) # reports per observation losses -y = coerce(["male", "female", "female"], Multiclass) -d = UnivariateFinite(["male", "female"], [0.55, 0.45], pool=y); -ŷ = [d, d, d]; -log_loss(ŷ, y) -``` - -The measures `rms`, `l2` and `log_loss` illustrated here are actually - instances of measure *types*. For, example, `l2 = LPLoss(p=2)` and -`log_loss = LogLoss() = LogLoss(tol=eps())`. Common aliases are -provided: - -```@repl losses_and_scores -cross_entropy -``` - -## Traits and custom measures +## Uses of measures -Notice that `l1` reports per-sample evaluations, while `rms` -only reports an aggregated result. This and other behavior can be -gleaned from measure *traits* which are summarized by the `info` -method: - -```@repl losses_and_scores -info(l1) -``` +In MLJ, measures are specified: -Query the doc-string for a measure using the name of its type: +- when evaluating model performance using +[`evaluate!`](@ref)/[`evaluate`](@ref) - see [Evaluating Model Performance](@ref) -```@repl losses_and_scores -rms -@doc RootMeanSquaredError # same as `?RootMeanSqauredError -``` +- when wrapping models using [`TunedModel`](@ref) - see [Tuning Models](@ref) +- when wrapping iterative models using [`IteratedModel`](@ref) - see [Controlling Iterative Models](@ref) +- when generating learning curves using [`learning_curve`](@ref) - see [Learning Curves](@ref) -Use `measures()` to list all measures, and `measures(conditions...)` to -search for measures with given traits (as you would [query -models](model_search.md)). The trait `instances` list the actual -callable instances of a given measure type (typically aliases for the -default instance). +and elsewhere. -```@docs -measures(conditions...) -``` +## Using LossFunctions.jl -A user-defined measure in MLJ can be passed to the `evaluate!` -method, and elsewhere in MLJ, provided it is a function or callable -object conforming to the above syntactic conventions. By default, a -custom measure is understood to: - -- be a loss function (rather than a score) - -- report an aggregated value (rather than per-sample evaluations) - -- be feature-independent - -To override this behavior one simply overloads the appropriate trait, -as shown in the following examples: - -```@repl losses_and_scores -y = [1, 2, 3, 4]; -ŷ = [2, 3, 3, 3]; -w = [1, 2, 2, 1]; -my_loss(ŷ, y) = maximum((ŷ - y).^2); -my_loss(ŷ, y) -my_per_sample_loss(ŷ, y) = abs.(ŷ - y); -MLJ.reports_each_observation(::typeof(my_per_sample_loss)) = true; -my_per_sample_loss(ŷ, y) -my_weighted_score(ŷ, y) = 1/mean(abs.(ŷ - y)); -my_weighted_score(ŷ, y, w) = 1/mean(abs.((ŷ - y).^w)); -MLJ.supports_weights(::typeof(my_weighted_score)) = true; -MLJ.orientation(::typeof(my_weighted_score)) = :score; -my_weighted_score(ŷ, y) -X = (x=rand(4), penalty=[1, 2, 3, 4]); -my_feature_dependent_loss(ŷ, X, y) = sum(abs.(ŷ - y) .* X.penalty)/sum(X.penalty); -MLJ.is_feature_dependent(::typeof(my_feature_dependent_loss)) = true -my_feature_dependent_loss(ŷ, X, y) -``` +In previous versions of MLJ, measures from LossFunctions.jl were also available. Now +measures from that package must be explicitly imported and wrapped, as described +[here](https://juliaai.github.io/StatisticalMeasures.jl/dev/examples_of_usage/#Using-losses-from-LossFunctions.jl). -The possible signatures for custom measures are: `measure(ŷ, y)`, -`measure(ŷ, y, w)`, `measure(ŷ, X, y)` and `measure(ŷ, X, y, w)`, each -measure implementing one non-weighted version, and possibly a second -weighted version. +## Receiver operator characteristics -## Using measures from LossFunctions.jl - -The [LossFunctions.jl](https://github.com/JuliaML/LossFunctions.jl) -package includes "distance loss" functions for `Continuous` targets, -and "marginal loss" functions for `Finite{2}` (binary) targets. While the -LossFunctions.jl interface differs from the present one (for, example -binary observations must be +1 or -1), MLJ has overloaded instances -of the LossFunctions.jl types to behave the same as the built-in -types. - -Note that the "distance losses" in the package apply to deterministic -predictions, while the "marginal losses" apply to probabilistic -predictions. - - -## List of measures - -All measures listed below have a doc-string associated with the measure's -*type*. So, for example, do `?LPLoss` not `?l2`. - -```@setup losses_and_scores -using DataFrames -``` - -```@example losses_and_scores -ms = measures() -types = map(ms) do m - m.name -end -instance = map(ms) do m m.instances end -table = (type=types, instances=instance) -DataFrame(table) -``` - - -## Other performance-related tools - -In MLJ one computes a confusion matrix by calling an instance of the -`ConfusionMatrix` measure type on the data: - -```@docs -ConfusionMatrix -``` +A related performance evaluation tool provided by StatisticalMeasures.jl, and hence by MLJ, is the `roc_curve` method: ```@docs roc_curve From 4f42472e38be720eefbcab4bfcf00d4ccbd9b313 Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Thu, 21 Sep 2023 17:42:57 +1200 Subject: [PATCH 03/18] update dependency diagram --- material/MLJ_stack.png | Bin 124652 -> 115140 bytes material/MLJ_stack.svg | 2 +- material/MLJ_stack.xml | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/material/MLJ_stack.png b/material/MLJ_stack.png index 3ccd0eaa38dc93fde8aea92704e2af65a83f1f60..b849d48bbecf82dcc0b4e0ef3774e830b2ccbcb7 100644 GIT binary patch literal 115140 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

*(W|qLOs1Mn+3%kULH2r79f#tFQ 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 -
MLJModelInterface
MLJModelInterface
ScientificTypesBase
ScientificTypesBa...
ScientificTypes
ScientificTypes
MLJBase
MLJBase
MLJTuning
MLJTuning
MLJIteration
MLJIteration
MLJLinearModels
MLJLinearModels
ThirdPartyModelPkg
ThirdPartyModelPkg
MLJ
MLJ
(StatisticalMetrics)
(StatisticalMetrics)
MLJEnsembles
MLJEnsembles
DataScienceTutorials
DataScienceTutorials
MLJFlux
MLJFlux
model-generic functionality
model-generic functionality
A            B  means "A depends on B"
A            B  means "A depends on...
 For general MLJ Users
 For general MLJ Users
For model  API implementation/testing

For model  API implementation/testin...
 Of interest outside MLJ
 Of interest outside MLJ
For MLJ developers
For MLJ developers
StatisticalTraits
StatisticalTraits
MLJModels
MLJModels
MLJClusteringInterface
MLJClusteringInterf...
MLJDecisionTreeInterface
MLJDecisionTreeInte...
MLJGLMInterface
MLJGLMInterface
MLJLIBSVMInterface
MLJLIBSVMInterface
MLJMultivariateStatsInterface
MLJMultivariateStat...
MLJNaiveBayesInterface 
MLJNaiveBayesInterf...
MLJScikitLearnInterface
MLJScikitLearnInter...
MLJXGBoostInterface
MLJXGBoostInterface
Interfaces for third party
packages administered by MLJ:
Interfaces for third party...
CategoricalDistributions
CategoricalDistributi...
MLJTSVDInterface
MLJTSVDInterface
MLJText
MLJText
MLJTestIntegration
MLJTestIntegration
OpenML
OpenML
Viewer does not support full SVG 1.1
\ No newline at end of file +
MLJModelInterface
MLJModelInterface
ScientificTypesBase
ScientificTypesBa...
ScientificTypes
ScientificTypes
MLJBase
MLJBase
MLJTuning
MLJTuning
MLJIteration
MLJIteration
ThirdPartyModelPkg
ThirdPartyModelPkg
MLJ
MLJ
StatisticalMeasures
StatisticalMeasures
MLJEnsembles
MLJEnsembles
DataScienceTutorials
DataScienceTutorials
model-generic functionality
model-generic functionality
A            B  means "A depends on B"
A            B  means "A depends on...
StatisticalTraits
StatisticalTraits
MLJModels
MLJModels
MLJClusteringInterface
MLJClusteringInterf...
MLJDecisionTreeInterface
MLJDecisionTreeInte...
MLJGLMInterface
MLJGLMInterface
MLJLIBSVMInterface
MLJLIBSVMInterface
MLJMultivariateStatsInterface
MLJMultivariateStat...
MLJNaiveBayesInterface 
MLJNaiveBayesInterf...
MLJScikitLearnInterface
MLJScikitLearnInter...
MLJXGBoostInterface
MLJXGBoostInterface
Model-providing pkgs/interfaces
administered by MLJ
include:
Model-providing pkgs/interface...
MLJTSVDInterface
MLJTSVDInterface
MLJText
MLJText
MLJTestIntegration
MLJTestIntegration
OpenML
OpenML
MLJFlux

MLJFlux...
MLJLinearModels

MLJLinearModels...
MLJFlow
MLJFlow
MLJBalancing
MLJBalancing
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/material/MLJ_stack.xml b/material/MLJ_stack.xml index 6713f3853..463448878 100644 --- a/material/MLJ_stack.xml +++ b/material/MLJ_stack.xml @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file From 8b780ad01bba1554c2b8f37c6be61f1f1e7f7f43 Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Thu, 21 Sep 2023 17:47:27 +1200 Subject: [PATCH 04/18] update ORGANIZATION.md --- ORGANIZATION.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ORGANIZATION.md b/ORGANIZATION.md index 2a7c690a1..fd6ec873e 100644 --- a/ORGANIZATION.md +++ b/ORGANIZATION.md @@ -40,6 +40,9 @@ its conventional use, are marked with a ⟂ symbol: readme](https://github.com/JuliaAI/MLJBase.jl) for a detailed description of MLJBase's contents. +* [StatisticalMeasures.jl](https://github.com/JuliaAI/StatisticalMeasures.jl) provifes + performance measures (metrics) such as losses and scores. + * [MLJModels.jl](https://github.com/JuliaAI/MLJModels.jl) hosts the *MLJ model registry*, which contains metadata on all the models the MLJ user can search and load from MLJ. Moreover, it From b5f01c0aae1583d687e91e081eb7a439e4869f3c Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Fri, 22 Sep 2023 11:25:34 +1200 Subject: [PATCH 05/18] add measures migration guide to docs --- docs/src/performance_measures.md | 123 +++++++++++++++++++++++++++++-- 1 file changed, 115 insertions(+), 8 deletions(-) diff --git a/docs/src/performance_measures.md b/docs/src/performance_measures.md index ab4b6f516..ba8a6a8e0 100644 --- a/docs/src/performance_measures.md +++ b/docs/src/performance_measures.md @@ -1,16 +1,21 @@ # Performance Measures -**Quick link:** [List of aliases of all -measures](https://juliaai.github.io/StatisticalMeasures.jl/dev/auto_generated_list_of_measures/#aliases) +## Quick links + +- [List of aliases of all + measures](https://juliaai.github.io/StatisticalMeasures.jl/dev/auto_generated_list_of_measures/#aliases) + +- [Changes to measures in MLJBase 1.0](@ref) + +## Introduction In MLJ loss functions, scoring rules, confusion matrices, sensitivities, etc, are collectively referred to as *measures*. These measures are provided by the package -[StatisticalMeasures.jl](https://juliaai.github.io/StatisticalMeasures.jl/dev/). As this -package is a dependency of MLJ, and all its methods are re-exported, the measures are -immediately available to the MLJ user. Commonly measures are passed to MLJ meta-algorithms -(see [Uses of measures](@ref) below) but to learn how to call measures directly, see -[this](https://juliaai.github.io/StatisticalMeasures.jl/dev/examples_of_usage/) -StatisticalMeasures.jl tutorial. +[StatisticalMeasures.jl](https://juliaai.github.io/StatisticalMeasures.jl/dev/) but are +immediately available to the MLJ user. Commonly, measures are passed to MLJ +meta-algorithms (see [Uses of measures](@ref) below) but to learn how to call measures +directly, see the StatisticalMeasures.jl +[tutorial](https://juliaai.github.io/StatisticalMeasures.jl/dev/examples_of_usage/). A list of all measures ready to use after running `using MLJ` or `using StatisticalMeasures`, is @@ -55,3 +60,105 @@ A related performance evaluation tool provided by StatisticalMeasures.jl, and he ```@docs roc_curve ``` + +## Changes to measures in MLJBase 1.0 + +Prior to MLJBase.jl 1.0 (respectivey, MLJ.jl version 0.19.6) measures were defined in +MLJBase.jl (a dependency of MLJ.jl) but now they are provided by MLJ.jl dependency +[StatisticalMeasures](https://juliaai.github.io/StatisticalMeasures.jl/dev/). The effects +on users is detailed below: + + +### Breaking behavior relevant to many users + +- If `using MLJBase` without MLJ, then, in Julia 1.9 or higher, `StatisticalMeasures` must + be explicitly imported to use measures that were previously part of MLJBase. If `using + MLJ`, then all previous measures are still available. + +- All measures return a *single* aggregated measurement. In other words, measures + previously reporting a measurement *per-observation* (previously subtyping + `Unaggregated`) no longer do so. To get per-observation measurements, use the new method + `measurements(measure, ŷ, y[, weights, class_weights])`. + +- The default measure for regression models (used in `evaluate/evaluate!` when `measures` + is unspecified) is changed from `rms` to `l2=LPLoss(2)` (mean sum of squares). + +- Measures that previously skipped `NaN` values will now (at least by default) propagate + those values. Missing value behavior is unchanged, except some measures that + previously did not support `missing` now do. + +- Aliases for measure *types* have been removed. For example `RMSE` (alias for + `RootMeanSquaredError`) is gone. Aliases for instances, such as `rms` and + `cross_entropy` persist. The exception is `precision`, for which `ppv` can + be used in its place. (This is to avoid conflict with `Base.precision`, which was + previously pirated.) + +- `info(measure)` has been decommissioned; query docstrings or access the new [measure + traits](https://juliaai.github.io/StatisticalMeasuresBase.jl/dev/methods/#Traits) + individually instead. These traits are now provided by StatisticalMeasures.jl and not + are not exported. For example, to access the orientation of the measure `rms`, do + `import StatisticalMeasures as SM; SM.orientation(rms)`. + +- Behavior of the `measures()` method, to list all measures and associated traits, has + changed. It now returns a dictionary instead of a vector of named tuples; + `measures(predicate)` is decommissioned, but `measures(needle)` is preserved. (This + method, owned by StatisticalMeasures.jl, has some other search options, but is + experimental.) + +- Measures that were wraps of losses from LossFunctions.jl are no longer exposed by + MLJBase or MLJ. To use such a loss, you must explicitly `import LossFunctions` and wrap + the loss appropriately. See [Using losses from + LossFunctions.jl](https://juliaai.github.io/StatisticalMeasures.jl/dev/examples_of_usage/#Using-losses-from-LossFunctions.jl) + for examples. + +- Some user-defined measures working in previous versions of MLJBase.jl may not work + without modification, as they must conform to the new [StatisticalMeasuresBase.jl + API](https://juliaai.github.io/StatisticalMeasuresBase.jl/dev/implementing_new_measures/#definitions). See + [this tutorial](https://juliaai.github.io/StatisticalMeasuresBase.jl/dev/tutorial/) on + how define new measures. + +- Measures with a "feature argument" `X`, as in `some_measure(ŷ, y, X)`, are no longer + supported. See [What is a + measure?](https://juliaai.github.io/StatisticalMeasuresBase.jl/dev/implementing_new_measures/#definitions) + for allowed signatures in measures. + +## Breaking behavior likely relevant only to developers of some client packages + +- The abstract measure types `Aggregated`, `Unaggregated`, `Measure` have been + decommissioned. (A measure is now defined purely by its [calling + behavior](https://juliaai.github.io/StatisticalMeasuresBase.jl/dev/implementing_new_measures/#definitions).) + +- What were previously exported as measure types are now only constructors. + +- `target_scitype(measure)` is decommissioned. Related is + `StatisticalMeasures.observation_scitype(measure)` which declares an upper bound on the + allowed scitype *of a single observation*. + +- `prediction_type(measure)` is decommissioned. Instead use + `StatisticalMeasures.kind_of_proxy(measure)`. + +- The trait `reports_each_observation` is decommissioned. Related is + `StatisticalMeasures.can_report_unaggregated`; if `false` the new `measurements` method + simply returns `n` copies of the aggregated measurement, where `n` is the number of + observations provided, instead of individual observation-dependent measurements. + +- `aggregation(measure)` has been decommissioned. Instead use + `StatisticalMeasures.external_mode_of_aggregation(measure)`. + +- `instances(measure)` has been decommissioned; query docstrings for measure aliases, or + follow this example: `aliases = measures()[RootMeanSquaredError].aliases`. + +- `is_feature_dependent(measure)` has been decommissioned. Measures consuming feature data + are not longer supported; see above. + +- `distribution_type(measure)` has been decommissioned. + +- `docstring(measure)` has been decommissioned. + +- Behavior of `aggregate` [has changed](https://juliaai.github.io/StatisticalMeasuresBase.jl/dev/methods/#StatisticalMeasuresBase.aggregate). + +- The following traits, previously exported by MLJBase and MLJ, cannot be applied to + measures: `supports_weights`, `supports_class_weights`, `orientation`, + `human_name`. Instead use the traits with these names provided by + StatisticalMeausures.jl (they will need to be qualified, as in `import + StatisticalMeasures; StatisticalMeasures.orientation(measure)`). From f394bc2c60baa505d5a4db6ea34f656f3fc5803c Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Fri, 22 Sep 2023 11:41:34 +1200 Subject: [PATCH 06/18] update migration guide --- docs/src/performance_measures.md | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/docs/src/performance_measures.md b/docs/src/performance_measures.md index ba8a6a8e0..529e8c943 100644 --- a/docs/src/performance_measures.md +++ b/docs/src/performance_measures.md @@ -5,7 +5,7 @@ - [List of aliases of all measures](https://juliaai.github.io/StatisticalMeasures.jl/dev/auto_generated_list_of_measures/#aliases) -- [Changes to measures in MLJBase 1.0](@ref) +- [Migration guide for changes to measures in MLJBase 1.0](@ref) ## Introduction @@ -61,12 +61,12 @@ A related performance evaluation tool provided by StatisticalMeasures.jl, and he roc_curve ``` -## Changes to measures in MLJBase 1.0 +## Migration guide for changes to measures in MLJBase 1.0 Prior to MLJBase.jl 1.0 (respectivey, MLJ.jl version 0.19.6) measures were defined in MLJBase.jl (a dependency of MLJ.jl) but now they are provided by MLJ.jl dependency -[StatisticalMeasures](https://juliaai.github.io/StatisticalMeasures.jl/dev/). The effects -on users is detailed below: +[StatisticalMeasures](https://juliaai.github.io/StatisticalMeasures.jl/dev/). Effects +on users are detailed below: ### Breaking behavior relevant to many users @@ -121,8 +121,28 @@ on users is detailed below: supported. See [What is a measure?](https://juliaai.github.io/StatisticalMeasuresBase.jl/dev/implementing_new_measures/#definitions) for allowed signatures in measures. + +### Packages implementing the MLJ model interface + +The migration of measures is not expected to require any changes to the source code in +packges providing implementations of the MLJ model interface (MLJModelInterface.jl) such +as MLJDecisionTreeInterface.jl and MLJFlux.jl, and this is confirmed by extensive +integration tests. However, some current tests will fail, if they use MLJBase +measures. The following should generally suffice to adapt such tests: + +- Add StatisticalMeasures as test dependency, and add `using StatisticalMeasures` to your + `runtests.jl` (and/or included submodules). + +- If measures are qualified, as in `MLJBase.rms`, then the qualification must be removed + or changed to `StatisticalMeasures.rms`, etc. + +- Be aware that the default measure used in methods such as `evaluate!`, when `measure` is + not specified, is changed from `rms` to `l2` for regression models. + +- Be aware of that all measures now report a measurement for every observation, and never + an aggregate. See second point above. -## Breaking behavior likely relevant only to developers of some client packages +### Rarely relevant breaking behavior - The abstract measure types `Aggregated`, `Unaggregated`, `Measure` have been decommissioned. (A measure is now defined purely by its [calling From 8a2471723b6b0b20b744c13e52c8e5a024a201e3 Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Fri, 22 Sep 2023 14:08:47 +1200 Subject: [PATCH 07/18] improve a title in docs --- docs/src/learning_networks.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/learning_networks.md b/docs/src/learning_networks.md index a8f30398b..46e688941 100644 --- a/docs/src/learning_networks.md +++ b/docs/src/learning_networks.md @@ -240,7 +240,7 @@ data). We demonstrate the process by way of examples of increasing complexity: - [Example A - Mini-pipeline](@ref) - [More on replacing models with symbols](@ref) - [Example B - Multiple operations: transform and inverse transform](@ref) -- [Example C - Exposing internal network state in reports](@ref) +- [Example C - Blending predictions and exposing internal network state in reports](@ref) - [Example D - Multiple nodes pointing to the same machine](@ref) - [Example E - Coupling component model hyper-parameters](@ref) - [More on defining new nodes](@ref) @@ -428,7 +428,7 @@ W = transform(mach, X) @assert inverse_transform(mach, W) ≈ X ``` -### Example C - Exposing internal network state in reports +### Example C - Blending predictions and exposing internal network state in reports The code below defines a new composite model type `CompositeC` that predicts by taking the weighted average of two regressors, and additionally exposes, in the model's report, a From 2178c10bd162bd0585ff6caac15c46cae27c97db Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Fri, 22 Sep 2023 14:56:53 +1200 Subject: [PATCH 08/18] add comment in manual to address comment in #1036 --- docs/src/generating_synthetic_data.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/src/generating_synthetic_data.md b/docs/src/generating_synthetic_data.md index f999d91f9..0349f0861 100644 --- a/docs/src/generating_synthetic_data.md +++ b/docs/src/generating_synthetic_data.md @@ -1,5 +1,9 @@ # Generating Synthetic Data +Here *synthetic data* means artificially generated data, with no reference to a "real +world" data set. Not to be confused "fake data" obtained by resampling from a distribution +fit to some actual real data. + MLJ has a set of functions - `make_blobs`, `make_circles`, `make_moons` and `make_regression` (closely resembling functions in [scikit-learn](https://scikit-learn.org/stable/datasets/index.html#generated-datasets) From cf21943c4973ef9797bfb4297577400144fc4fa3 Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Fri, 22 Sep 2023 15:48:09 +1200 Subject: [PATCH 09/18] more doc fixes --- docs/make.jl | 2 - docs/src/common_mlj_workflows.md | 6 +- docs/src/evaluating_model_performance.md | 2 +- docs/src/getting_started.md | 18 +- docs/src/julia_blogpost.md | 227 ----------------------- docs/src/known_issues.md | 32 ---- docs/src/weights.md | 20 +- 7 files changed, 14 insertions(+), 293 deletions(-) delete mode 100644 docs/src/julia_blogpost.md delete mode 100644 docs/src/known_issues.md diff --git a/docs/make.jl b/docs/make.jl index f646377a5..b71fb7094 100755 --- a/docs/make.jl +++ b/docs/make.jl @@ -87,9 +87,7 @@ pages = [ "Third Party Packages" => "third_party_packages.md", "Glossary" => "glossary.md", "MLJ Cheatsheet" => "mlj_cheatsheet.md", - "Known Issues" => "known_issues.md", "FAQ" => "frequently_asked_questions.md", - "Julia BlogPost" => "julia_blogpost.md", "Index of Methods" => "api.md", ] diff --git a/docs/src/common_mlj_workflows.md b/docs/src/common_mlj_workflows.md index ce66037a6..2ecc3ceda 100644 --- a/docs/src/common_mlj_workflows.md +++ b/docs/src/common_mlj_workflows.md @@ -220,7 +220,7 @@ Fit on the train data set and evaluate on the test data set: ```@example workflows fit!(mach, rows=train) yhat = predict(mach, X[test,:]) -mean(LogLoss(tol=1e-4)(yhat, y[test])) +LogLoss(tol=1e-4)(yhat, y[test]) ``` Note `LogLoss()` has aliases `log_loss` and `cross_entropy`. @@ -451,7 +451,7 @@ transformation/inverse transformation: ```@example workflows X, y = @load_reduced_ames KNN = @load KNNRegressor -knn_with_target = TransformedTargetModel(model=KNN(K=3), target=Standardizer()) +knn_with_target = TransformedTargetModel(model=KNN(K=3), transformer=Standardizer()) pipe = (X -> coerce(X, :age=>Continuous)) |> OneHotEncoder() |> knn_with_target ``` @@ -476,7 +476,7 @@ target transformation/inverse transformation: ```@example workflows Tree = @load DecisionTreeRegressor pkg=DecisionTree verbosity=0 tree_with_target = TransformedTargetModel(model=Tree(), - target=y -> log.(y), + transformer=y -> log.(y), inverse = z -> exp.(z)) pipe2 = (X -> coerce(X, :age=>Continuous)) |> OneHotEncoder() |> tree_with_target; nothing # hide diff --git a/docs/src/evaluating_model_performance.md b/docs/src/evaluating_model_performance.md index af6e86864..645962892 100644 --- a/docs/src/evaluating_model_performance.md +++ b/docs/src/evaluating_model_performance.md @@ -74,7 +74,7 @@ evaluate!( ) ``` -In classification problems, a class weight dictionary can be supplied instead. +In classification problems, use `class_weights=...` to specify a class weight dictionary. ```@docs MLJBase.evaluate! diff --git a/docs/src/getting_started.md b/docs/src/getting_started.md index bd104f182..e6a9ed3d6 100644 --- a/docs/src/getting_started.md +++ b/docs/src/getting_started.md @@ -191,7 +191,7 @@ train, test = partition(eachindex(y), 0.7); # 70:30 split fit!(mach, rows=train); yhat = predict(mach, X[test,:]); yhat[3:5] -log_loss(yhat, y[test]) |> mean +log_loss(yhat, y[test]) ``` Note that `log_loss` and `cross_entropy` are aliases for `LogLoss()` @@ -350,23 +350,11 @@ MLJ models expecting a table do not generally accept a matrix instead. However, a matrix can be wrapped as a table, using [`MLJ.table`](@ref): -```julia -matrix_table = MLJ.table(rand(2,3)) +```@repl doda +matrix_table = MLJ.table(rand(2,3)); schema(matrix_table) ``` -``` -┌─────────┬─────────┬────────────┐ -│ _.names │ _.types │ _.scitypes │ -├─────────┼─────────┼────────────┤ -│ x1 │ Float64 │ Continuous │ -│ x2 │ Float64 │ Continuous │ -│ x3 │ Float64 │ Continuous │ -└─────────┴─────────┴────────────┘ -_.nrows = 2 - -``` - The matrix is *not* copied, only wrapped. To manifest a table as a matrix, use [`MLJ.matrix`](@ref). diff --git a/docs/src/julia_blogpost.md b/docs/src/julia_blogpost.md deleted file mode 100644 index cad97e02a..000000000 --- a/docs/src/julia_blogpost.md +++ /dev/null @@ -1,227 +0,0 @@ -!!! warning "Old post" - - This post is quite old. For a newer overview of the design of MLJ, see [here](https://github.com/alan-turing-institute/MLJ.jl/blob/master/paper/paper.md) - - -# Beyond machine learning pipelines with MLJ - -Anthony Blaom, Diego Arenas, Franz Kiraly, Yiannis Simillides, Sebastian Vollmer - -**May 1st, 2019.** Blog post also posted on the [Julia Language Blog](https://julialang.org/blog/2019/05/beyond-ml-pipelines-with-mlj) - - - - -![](img/learningcurves.png) | ![](img/heatmap.png) -------------------------|-------------------------- -![](img/wrapped_ridge.png) | ![](img/MLPackages.png) - - -## Introducing MLJ - -[MLJ](https://github.com/alan-turing-institute/MLJ.jl) is an -open-source machine learning toolbox written in pure Julia. It -provides a uniform interface for interacting with supervised and -unsupervised learning models currently scattered in different Julia -packages. - -Building on a earlier proof-of-concept, development began in earnest -at [The Alan Turing Institute](https://www.turing.ac.uk) in -December 2018. In a short time interest grew and the project is now -the Institute's most starred software repository. - -After outlining MLJ's current functionality, this post introduces MLJ -**learning networks**, a super-charged pipelining feature for model -composition. - -**Quick links:** - -- [MLJ vs ScikitLearn.jl](https://alan-turing-institute.github.io/MLJ.jl/dev/frequently_asked_questions/) - -- Video from [London Julia User Group meetup in March 2019](https://www.youtube.com/watch?v=CfHkjNmj1eE) (skip to [demo at 21'39](https://youtu.be/CfHkjNmj1eE?t=21m39s))   - -- [Learning MLJ](@ref) - -- Implementing the MLJ interface for a [new model](https://alan-turing-institute.github.io/MLJ.jl/dev/adding_models_for_general_use/) - -- How to [contribute](https://github.com/alan-turing-institute/MLJ.jl/blob/master/CONTRIBUTE.md) - -- Julia [Slack](http://julialang.slack.com) channel: \#mlj. - -- Star'ing us to show support for [MLJ](https://github.com/alan-turing-institute/MLJ.jl) would be greatly appreciated! - - -## MLJ features - -MLJ already has substantial functionality: - -- **Learning networks.** Flexible model composition beyond traditional - pipelines (more on this below). - -- **Automatic tuning.** Automated tuning of hyperparameters, including - composite models. Tuning implemented as a model wrapper for - composition with other meta-algorithms. - -- **Homogeneous model ensembling.** - -- **Registry for model metadata.** Metadata available without loading - model code. Basis of a "task" interface and facilitates - model composition. - -- **Task interface.** Automatically match models to specified learning - tasks, to streamline benchmarking and model selection. - -- **Clean probabilistic API.** Improves support for Bayesian - statistics and probabilistic graphical models. - -- **Data container agnostic.** Present and manipulate data in your - favorite Tables.jl format. - -- **Universal adoption of categorical data types.** Enables model - implementations to properly account for classes seen in training but - not in evaluation. - -Enhancements planned for the near future include integration of -Flux.jl **deep learning** models, and **gradient descent tuning** of -continuous hyperparameters using automatic differentiation. - -While a relatively small number of machine learning models currently -implement the MLJ interface, work in progress aims to wrap models -supported by the popular python framework, scikit-learn, as a -temporary expedient. For a comparison of the MLJ's design with the -Julia wrap [ScitLearn.jl](https://github.com/cstjean/ScikitLearn.jl), -see this -[FAQ](https://github.com/alan-turing-institute/MLJ.jl/blob/master/docs/src/frequently_asked_questions.md). - - -## Learning networks - -MLJ's model composition interface is flexible enough to implement, for -example, the [model -stacks](https://www.kdnuggets.com/2017/02/stacking-models-imropved-predictions.html) -popular in data science competitions. To treat examples of this kind, -the interface design must account for the fact that information flow -in prediction and training modes is different. This can be seen from -the following schematic of a simple two-model stack, viewed as a -network: - -![](img/two_model_stack.png) - -## Building a simple network - -In MLJ, networks of models are built using a declarative syntax -already familiar from basic use of the package. For example, the -ordinary syntax for training a decision tree in MLJ, after one-hot -encoding the categorical features, looks like this: - -```julia -using MLJ -@load DecisionTreeRegressor - -# load some data: -task = load_reduced_ames(); -X, y = task(); - -# one-hot encode the inputs, X: -hot_model = OneHotEncoder() -hot = machine(hot_model, X) -fit!(hot) -Xt = transform(hot, X) - -# fit a decision tree to the transformed data: -tree_model = DecisionTreeRegressor() -tree = machine(tree_model, Xt, y) -fit!(tree, rows = 1:1300) -``` - -Note that a *model* in MLJ is just a struct containing -hyperparameters. Wrapping a model in data delivers a *machine* struct, -which will additionally record the results of training. - -Without a pipeline, each time we want to present new data for -prediction we must first apply one-hot encoding: - -```julia -Xnew = X[1301:1400,:]; -Xnewt = transform(hot, Xnew); -yhat = predict(tree, Xnewt); -yhat[1:3] - 3-element Array{Float64,1}: - 223956.9999999999 - 320142.85714285733 - 161227.49999999994 -``` - -To build a pipeline one simply wraps the supplied data in source nodes -and repeats similar declarations, omitting calls to -`fit!`. The difference now is that each "variable" (e.g., `Xt`, -`yhat`) is a node of our pipeline, instead of concrete data: - -```julia -Xs = source(X) -ys = source(y) - -hot = machine(hot_model, Xs) -Xt = transform(hot, Xs); - -tree = machine(tree_model, Xt, ys) -yhat = predict(tree, Xt) -``` - -If we like, we can think of a node as *dynamic data* - "data" because -it can be called (indexed) on rows, but "dynamic" because the result -depends on the outcome of training events, which in turn depend on -hyperparameter values. For example, after fitting the completed pipeline, -we can make new predictions like this: - -```julia -fit!(yhat, rows=1:1300) - [ Info: Training NodalMachine @ 1…51. - [ Info: Spawned 1300 sub-features to one-hot encode feature :Neighborhood. - [ Info: Spawned 1300 sub-features to one-hot encode feature :MSSubClass. - [ Info: Training NodalMachine @ 1…17. - Node @ 1…79 = predict(1…17, transform(1…51, 1…07)) - -yhat(rows=1301:1302) # to predict on rows of source node -yhat(Xnew) # to predict on new data -156-element Array{Float64,1}: - 223956.9999999999 - 320142.85714285733 - ... -``` - - -## Exporting and retraining - -Once a pipeline like this has been built and tested on sample data, it -can be exported as a stand-alone model, ready to be trained on any -dataset. For details, see the MLJ -[documentation](https://alan-turing-institute.github.io/MLJ.jl/dev/learning_networks/). In -the future, Julia macros will allow common architectures (e.g., linear -pipelines) to be built in a couple of lines. - -Finally, we mention that MLJ learning networks, and their exported -counterparts, are "smart" in the sense that changing a hyperparameter -does not trigger retraining of component models upstream of the -change: - -```julia -tree_model.max_depth = 4 -fit!(yhat, rows=1:1300) - [ Info: Not retraining NodalMachine @ 1…51. It is up-to-date. - [ Info: Updating NodalMachine @ 1…17. - Node @ 1…79 = predict(1…17, transform(1…51, 1…07)) -``` - - -## Just "Write the math!" - -Because of Julia's generic programming features, any kind of operation -you would normally apply to data (arithmetic, row selection, column -concatenation, etc) can be overloaded to work with nodes. In this way, -MLJ's network-building syntax is economical, intuitive and easy to -read. In this respect we have been inspired by [On Machine Learning -and Programming Languages](https://julialang.org/blog/2017/12/ml&pl). - -## Invitation to the community -We now invite the community to try out our newly registered packages, [MLJ](https://github.com/alan-turing-institute/MLJ.jl)alongside [MLJModels](https://github.com/JuliaAI/MLJModels.jl), and provide any feedback or suggestions you may have going forward. We are also particularly interested in hearing how you would use our package, and what features it may be lacking. diff --git a/docs/src/known_issues.md b/docs/src/known_issues.md deleted file mode 100644 index 807127dd9..000000000 --- a/docs/src/known_issues.md +++ /dev/null @@ -1,32 +0,0 @@ -# Known Issues - -Routine issues are posted -[here](https://github.com/alan-turing-institute/MLJ.jl/issues). Below -are some longer term issues and limitations. - -#### ScikitLearn/MKL issue - -For users of Mac OS using Julia 1.3 or higher, using ScikitLearn -models can lead to unexpected MKL errors due to an issue not related -to MLJ. See -[this Julia Discourse discussion](https://discourse.julialang.org/t/julia-1-3-1-4-on-macos-and-intel-mkl-error/36469/2) -and -[this issue](https://github.com/JuliaPackaging/BinaryBuilder.jl/issues/700) -for context. - -A temporary workaround for this issue is to force the installation of -an older version of the `OpenSpecFun_jll` library. To install an -appropriate version, activate your MLJ environment and run - -```julia - using Pkg; - Pkg.add(PackageSpec(url="https://github.com/tlienart/OpenSpecFun_jll.jl")) -``` - -#### Serialization for composite models with component models with custom serialization - -See -[here](https://github.com/alan-turing-institute/MLJ.jl/issues/678). Workaround: -Instead of `XGBoost` models (the chief known case) use models from the -pure Julia package `EvoTrees`. - diff --git a/docs/src/weights.md b/docs/src/weights.md index 202d7dd5f..3789faf21 100644 --- a/docs/src/weights.md +++ b/docs/src/weights.md @@ -43,7 +43,7 @@ The model `model` supports class weights if ## Specifying weights in performance evaluation -When calling an MLJ measure (metric) that supports weights, provide the +When calling a measure (metric) that supports weights, provide the weights as the last argument, as in ```julia @@ -53,18 +53,12 @@ w = Dict("versicolor" => 1, "setosa" => 2, "virginica"=> 3) macro_f1score(ŷ, y, w) ``` -You can use `supports_weights` and `supports_class_weights` on -measures to check weight support. For example, to list all measures -supporting per observation weights, do +Some measures also support specification of a class weight dictionary. For details see the +StatisticalMeasures.jl +[tutorial](https://juliaai.github.io/StatisticalMeasures.jl/dev/examples_of_usage/). -```julia -measures() do m - m.supports_weights -end -``` +To pass weights to all the measures listed in an [`evaluate!`](@ref)/[`evaluate`](@ref) +call, use the keyword specifiers `weights=...` or `class_weights=...`. For details, see +[Evaluating Model Performance](@ref). -See also [Evaluating Model Performance](@ref). -To pass weights to all the measures listed in an `evaluate!/evaluate` -call, use the keyword specifiers `weights=...` or -`class_weights=...`. For details, see [`evaluate!`](@ref). From eb507f91f57353ba5cbcb1ac1c1f1a7ae6392c1a Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Mon, 25 Sep 2023 17:48:43 +1300 Subject: [PATCH 10/18] update doc --- docs/src/performance_measures.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/src/performance_measures.md b/docs/src/performance_measures.md index 529e8c943..b9647bc61 100644 --- a/docs/src/performance_measures.md +++ b/docs/src/performance_measures.md @@ -73,7 +73,8 @@ on users are detailed below: - If `using MLJBase` without MLJ, then, in Julia 1.9 or higher, `StatisticalMeasures` must be explicitly imported to use measures that were previously part of MLJBase. If `using - MLJ`, then all previous measures are still available. + MLJ`, then all previous measures are still available, with the exception of those + corresponding to LossFunctions.jl (see below). - All measures return a *single* aggregated measurement. In other words, measures previously reporting a measurement *per-observation* (previously subtyping From 6328b5b5fa5e801ede5898ffc0eb82fa5125bb56 Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Mon, 25 Sep 2023 17:49:46 +1300 Subject: [PATCH 11/18] another update --- docs/src/performance_measures.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/performance_measures.md b/docs/src/performance_measures.md index b9647bc61..a50469368 100644 --- a/docs/src/performance_measures.md +++ b/docs/src/performance_measures.md @@ -79,7 +79,7 @@ on users are detailed below: - All measures return a *single* aggregated measurement. In other words, measures previously reporting a measurement *per-observation* (previously subtyping `Unaggregated`) no longer do so. To get per-observation measurements, use the new method - `measurements(measure, ŷ, y[, weights, class_weights])`. + `StatisticalMeasures.measurements(measure, ŷ, y[, weights, class_weights])`. - The default measure for regression models (used in `evaluate/evaluate!` when `measures` is unspecified) is changed from `rms` to `l2=LPLoss(2)` (mean sum of squares). From 83db2bafc4ad53055eafc265b6a6954fb13f26db Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Tue, 26 Sep 2023 13:59:03 +1300 Subject: [PATCH 12/18] add docstring for MLJ module --- docs/src/getting_started.md | 5 ++++- src/MLJ.jl | 31 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/docs/src/getting_started.md b/docs/src/getting_started.md index e6a9ed3d6..de31ba32b 100644 --- a/docs/src/getting_started.md +++ b/docs/src/getting_started.md @@ -5,7 +5,10 @@ For an outline of MLJ's **goals** and **features**, see This page introduces some MLJ basics, assuming some familiarity with machine learning. For a complete list of other MLJ learning resources, -see [Learning MLJ](@ref). +see [Learning MLJ](@ref). + +MLJ collects together the functionality provided by mutliple packages. To learn how to +install components separately, run `using MLJ; @doc MLJ`. This section introduces only the most basic MLJ operations and concepts. It assumes MLJ has been successfully installed. See diff --git a/src/MLJ.jl b/src/MLJ.jl index 6c6bc002a..f126b1b1b 100644 --- a/src/MLJ.jl +++ b/src/MLJ.jl @@ -1,3 +1,34 @@ +""" + MLJ + +[`MLJ`](https://alan-turing-institute.github.io/MLJ.jl/dev/) is a Machine Learning toolbox +for Julia. It collects together functionality from the following packages, which can be +loaded separately: + +- MLJBase.jl: The `machine` interface, tools to `partition` and `unpack` datasets, + `evaluate`/`evaluate!` for model performance, `|>` pipeline syntax, + `TransformedTargetModel` wrapper, general model composition syntax (learning networks), + synthetic data generators, `scitype` and `schema` methods (from ScientificTypes.jl) for + checking how MLJ interprets your data + +- StatisticalMeasures.jl: MLJ-compatible measures (metrics) for machine learning, + confusion matrices, ROC curves + +- MLJModels.jl: Common transformers for data preprocessing, searching the model registry, + loading models with `@load` + +- MLJTuning.jl: Hyperparameter optimization via `TunedModel` wrapper + +- MLJIteration.jl: `IteratedModel` Wrapper for controlling iterative models + +- MLJEnsembles.jl: Homogeneous model ensembling, via the `EnsembleModel` wrapper + +- MLJBalancing.jl: Incorporation of oversampling/undersampling methods in pipelines, via + the `BalancedModel` wrapper + +- OpenML.jl: Tool for grabbing datasets from OpenML.org + +""" module MLJ From 92a278c2cf567f90004061769f3491f81dea29ca Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Tue, 26 Sep 2023 15:20:39 +1300 Subject: [PATCH 13/18] bump compat for MLJEnsembles, MLJFlow, MLJTuning, MLJIteration --- Project.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Project.toml b/Project.toml index 60b6d8baf..ba912c1b2 100644 --- a/Project.toml +++ b/Project.toml @@ -31,11 +31,11 @@ CategoricalArrays = "0.8,0.9, 0.10" ComputationalResources = "0.3" Distributions = "0.21,0.22,0.23, 0.24, 0.25" MLJBase = "0.21.14" -MLJEnsembles = "0.3" -MLJFlow = "0.1" -MLJIteration = "0.5" +MLJEnsembles = "0.4" +MLJFlow = "0.2" +MLJIteration = "0.6" MLJModels = "0.16" -MLJTuning = "0.7" +MLJTuning = "0.8" OpenML = "0.2,0.3" ProgressMeter = "1.1" Reexport = "1.2" From 185ddebb20acee2c2d1f1a625a392d2c95bf7a8a Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Tue, 26 Sep 2023 15:25:36 +1300 Subject: [PATCH 14/18] bump [compat] MLJBase = "1" --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index ba912c1b2..d65f8aca1 100644 --- a/Project.toml +++ b/Project.toml @@ -30,7 +30,7 @@ Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" CategoricalArrays = "0.8,0.9, 0.10" ComputationalResources = "0.3" Distributions = "0.21,0.22,0.23, 0.24, 0.25" -MLJBase = "0.21.14" +MLJBase = "1" MLJEnsembles = "0.4" MLJFlow = "0.2" MLJIteration = "0.6" From d7a4dfa7df0d2790982fec036eb478cb903f3205 Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Wed, 27 Sep 2023 13:29:49 +1300 Subject: [PATCH 15/18] doc fixes, including to close #1040 --- docs/Project.toml | 12 +- docs/make.jl | 9 +- docs/model_docstring_tools.jl | 20 +++- docs/src/about_mlj.md | 2 - docs/src/common_mlj_workflows.md | 4 +- docs/src/evaluating_model_performance.md | 4 +- docs/src/getting_started.md | 2 +- docs/src/learning_curves.md | 4 +- docs/src/machines.md | 13 +-- docs/src/performance_measures.md | 8 +- docs/src/transformers.md | 135 +++++++++++++---------- docs/src/tuning_models.md | 20 ++-- 12 files changed, 131 insertions(+), 102 deletions(-) diff --git a/docs/Project.toml b/docs/Project.toml index ee3cd3f2e..7c38b6b61 100755 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -8,11 +8,11 @@ EarlyStopping = "792122b4-ca99-40de-a6bc-6742525f08b6" EvoTrees = "f6006082-12f8-11e9-0c9c-0d5d367ab1e5" InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240" IterationControl = "b3c1a2ee-3fec-4384-bf48-272ea71de57c" -LossFunctions = "30fc2ffe-d236-52d8-8643-a9d8f7c094a7" MLJBase = "a7f614a8-145f-11e9-1d2a-a57a1082229d" MLJClusteringInterface = "d354fa79-ed1c-40d4-88ef-b8c7bd1568af" MLJDecisionTreeInterface = "c6f25543-311c-4c74-83dc-3ea6d1015661" MLJEnsembles = "50ed68f4-41fd-4504-931a-ed422449fee0" +MLJFlow = "7b7b8358-b45c-48ea-a8ef-7ca328ad328f" MLJGLMInterface = "caf8df21-4939-456d-ac9c-5fefbfb04c0c" MLJIteration = "614be32b-d00c-4edb-bd02-1eb411ab5e55" MLJLinearModels = "6ee0df7b-362f-4a72-a706-9e79364fb692" @@ -25,16 +25,10 @@ NearestNeighborModels = "636a865e-7cf4-491e-846c-de09b730eb36" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" ScientificTypes = "321657f4-b219-11e9-178b-2701a2544e81" ScientificTypesBase = "30f210dd-8aff-4c5f-94ba-8e64358c1161" +StatisticalMeasures = "a19d573c-0a75-4610-95b3-7071388c7541" StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" [compat] -CategoricalDistributions = "0.1" -Documenter = "0.27" -MLJEnsembles = "0.3" -MLJIteration = "0.5" -MLJModels = "0.16" -MLJTuning = "0.7" -ScientificTypes = "3" -ScientificTypesBase = "3" +Documenter = "1" julia = "1.6" diff --git a/docs/make.jl b/docs/make.jl index b71fb7094..b89c7fc03 100755 --- a/docs/make.jl +++ b/docs/make.jl @@ -14,11 +14,12 @@ import MLJModels import MLJEnsembles import ScientificTypes import MLJModelInterface +import ScientificTypes import ScientificTypesBase import Distributions using CategoricalArrays -using LossFunctions import CategoricalDistributions +import StatisticalMeasures const MMI = MLJModelInterface @@ -107,12 +108,14 @@ makedocs( ScientificTypes, MLJModelInterface, ScientificTypesBase, + StatisticalMeasures, MLJIteration, EarlyStopping, IterationControl, - CategoricalDistributions], + CategoricalDistributions, + StatisticalMeasures], pages = pages, - strict = Documenter.except(:cross_references, :missing_docs), + warnonly = Documenter.except(:cross_references, :missing_docs), ) @info "`makedocs` has finished running. " diff --git a/docs/model_docstring_tools.jl b/docs/model_docstring_tools.jl index 0edf63f49..f4e399f78 100644 --- a/docs/model_docstring_tools.jl +++ b/docs/model_docstring_tools.jl @@ -2,6 +2,22 @@ const PATH_TO_MODEL_DOCS = joinpath(@__DIR__, "src", "models") +""" + remove_doc_refs(str::AbstractString) + +Removes `@ref` references from `str. For example, a substring of the form +"[`some.thing_like_this123!`](@ref)" is replaced with "`some.thing_like_this123!`". + +""" +function remove_doc_refs(page) + regex = r"\[(['\.\d`\!\_a-zA-Z]*)\]\(\@ref\)" + while contains(page, regex) + # replace the first matched regex with the captured string + page = replace(page, regex => s"\1") + end + page +end + demote_headings(str) = replace(str, "# "=>"## ") handle(model) = model.name*"_"*model.package_name @@ -25,7 +41,7 @@ function write_page(model; path=PATH_TO_MODEL_DOCS) open(pagepath, "w") do stream header = "# [$(model.name)](@id $id)\n\n" md_page = doc(model.name, pkg=model.package_name) - page = header*demote_headings(string(md_page)) + page = header*demote_headings(string(md_page)) |> remove_doc_refs write(stream, page) nothing end @@ -54,7 +70,7 @@ function models_missing_descriptors() handles = handle.(models()) filter(handles) do h !(h in HANDLES) - end + end end """ diff --git a/docs/src/about_mlj.md b/docs/src/about_mlj.md index 276cfefd5..f54896165 100755 --- a/docs/src/about_mlj.md +++ b/docs/src/about_mlj.md @@ -221,8 +221,6 @@ Bugs, suggestions, and feature requests can be posted Users are also welcome to join the `#mlj` Julia slack channel to ask questions and make suggestions. -See also, [Known Issues](@ref) - ## Installation diff --git a/docs/src/common_mlj_workflows.md b/docs/src/common_mlj_workflows.md index 2ecc3ceda..d3ce0bb3a 100644 --- a/docs/src/common_mlj_workflows.md +++ b/docs/src/common_mlj_workflows.md @@ -176,10 +176,10 @@ KNN = @load KNNRegressor knn = KNN() evaluate(knn, X, y, resampling=CV(nfolds=5), - measure=[RootMeanSquaredError(), MeanAbsoluteError()]) + measure=[RootMeanSquaredError(), LPLoss(1)]) ``` -Note `RootMeanSquaredError()` has alias `rms` and `MeanAbsoluteError()` has alias `mae`. +Note `RootMeanSquaredError()` has alias `rms` and `LPLoss(1)` has aliases `l1`, `mae`. Do `measures()` to list all losses and scores and their aliases. diff --git a/docs/src/evaluating_model_performance.md b/docs/src/evaluating_model_performance.md index 645962892..448283c57 100644 --- a/docs/src/evaluating_model_performance.md +++ b/docs/src/evaluating_model_performance.md @@ -37,7 +37,7 @@ data: ```@repl evaluation_of_supervised_models mach = machine(model, X, y) -evaluate!(mach, resampling=cv, measure=l2), verbosity=0) +evaluate!(mach, resampling=cv, measure=l2, verbosity=0) ``` (The latter call is a mutating call as the learned parameters stored in the @@ -53,7 +53,7 @@ evaluate!( resampling=cv, measures=[l1, rms, rmslp1], verbosity=0, -a) +) ``` [Custom measures](@ref) can also be provided. diff --git a/docs/src/getting_started.md b/docs/src/getting_started.md index de31ba32b..acda6f28b 100644 --- a/docs/src/getting_started.md +++ b/docs/src/getting_started.md @@ -344,7 +344,7 @@ scientific type `Table{K}`, where `K` depends on the scientific types of the col which can be individually inspected using `schema`: ```@repl doda -schema(X) +ScientificTypes.schema ``` #### Matrix data diff --git a/docs/src/learning_curves.md b/docs/src/learning_curves.md index d49a1f9d1..42847171a 100644 --- a/docs/src/learning_curves.md +++ b/docs/src/learning_curves.md @@ -24,7 +24,7 @@ r_lambda = range(ensemble, :(model.lambda), lower=1e-1, upper=100, scale=:log10) curve = MLJ.learning_curve(mach; range=r_lambda, resampling=CV(nfolds=3), - measure=MeanAbsoluteError()) + measure=l1) ``` ```julia using Plots @@ -52,7 +52,7 @@ atom.lambda= 7.3 r_n = range(ensemble, :n, lower=1, upper=50) curves = MLJ.learning_curve(mach; range=r_n, - measure=MeanAbsoluteError(), + measure=l1, verbosity=0, rng_name=:rng, rngs=4) diff --git a/docs/src/machines.md b/docs/src/machines.md index 8bfc9cd2c..68eb9cddc 100644 --- a/docs/src/machines.md +++ b/docs/src/machines.md @@ -93,8 +93,8 @@ report(mach) ``` ```@docs -fitted_params -report +fitted_params(::Machine) +report(::Machine) ``` ### Training losses and feature importances @@ -166,12 +166,9 @@ machine(model, X, y, cache=false) ### Constructing machines in learning networks -Instead of data `X`, `y`, etc, the `machine` constructor is provided -`Node` or `Source` objects ("dynamic data") when building a learning -network. See [Composing Models](composing_models.md) for more on this -advanced feature. One also uses `machine` to wrap a machine -around a whole learning network; see [Learning network -machines](@ref). +Instead of data `X`, `y`, etc, the `machine` constructor is provided `Node` or `Source` +objects ("dynamic data") when building a learning network. See [Learning Networks](@ref) +for more on this advanced feature. ## Saving machines diff --git a/docs/src/performance_measures.md b/docs/src/performance_measures.md index a50469368..f8d2697a7 100644 --- a/docs/src/performance_measures.md +++ b/docs/src/performance_measures.md @@ -20,8 +20,8 @@ directly, see the StatisticalMeasures.jl A list of all measures ready to use after running `using MLJ` or `using StatisticalMeasures`, is [here](https://juliaai.github.io/StatisticalMeasures.jl/dev/auto_generated_list_of_measures/). Alternatively, -call [`measures()`](@ref) (experimental) to generate a dictionary keyed on available -measure constructors, with measure metadata as values. +call [`measures()`](@ref StatisticalMeasures.measures) (experimental) to generate a +dictionary keyed on available measure constructors, with measure metadata as values. ## Custom measures @@ -58,7 +58,7 @@ measures from that package must be explicitly imported and wrapped, as described A related performance evaluation tool provided by StatisticalMeasures.jl, and hence by MLJ, is the `roc_curve` method: ```@docs -roc_curve +StatisticalMeausures.roc_curve ``` ## Migration guide for changes to measures in MLJBase 1.0 @@ -83,6 +83,8 @@ on users are detailed below: - The default measure for regression models (used in `evaluate/evaluate!` when `measures` is unspecified) is changed from `rms` to `l2=LPLoss(2)` (mean sum of squares). + +- `MeanAbsoluteError` has been removed and instead `mae` is an alias for `LPLoss(p=1)`. - Measures that previously skipped `NaN` values will now (at least by default) propagate those values. Missing value behavior is unchanged, except some measures that diff --git a/docs/src/transformers.md b/docs/src/transformers.md index 2bdae8e0c..911fba82a 100644 --- a/docs/src/transformers.md +++ b/docs/src/transformers.md @@ -42,7 +42,7 @@ MLJModels.UnivariateTimeTypeToContinuous A *static transformer* is a model for transforming data that does not generalize to new data (does not "learn") but which nevertheless has hyperparameters. For example, the `DBSAN` clustering model from Clustering.jl can assign labels to some collection of -observations, cannot directly assign a label to some new observation. +observations, cannot directly assign a label to some new observation. The general user may define their own static models. The main use-case is insertion into a [Linear Pipelines](@ref) some parameter-dependent transformation. (If a static transformer @@ -73,86 +73,103 @@ Such static transformers with (unlearned) parameters can have arbitrarily many inputs, but only one output. In the single input case, an `inverse_transform` can also be defined. Since they have no real learned parameters, you bind a static transformer to a machine without -specifying training arguments. +specifying training arguments; there is no need to `fit!` the machine: ```@example boots -mach = machine(Averager(0.5)) |> fit! +mach = machine(Averager(0.5)) transform(mach, [1, 2, 3], [3, 2, 1]) ``` -Let's see how we can include our `Averager` in a learning network (see -[Composing Models](@ref)) to mix the predictions of two regressors, -with one-hot encoding of the inputs: +Let's see how we can include our `Averager` in a [learning network](@ref "Learning +Networks")) to mix the predictions of two regressors, with one-hot encoding of the +inputs. Here's some dummy data and component models to test our learning network: ```@example boots -X = source() -y = source() - ridge = (@load RidgeRegressor pkg=MultivariateStats)() knn = (@load KNNRegressor)() + +import Random.seed! +seed!(112) +X = ( + x1=coerce(rand("ab", 100), Multiclass), + x2=rand(100), +) +y = X.x2 + 0.05*rand(100) +schema(X) +``` + +And the learning network: + +```@example boots +Xs = source(X) +ys = source(y) + averager = Averager(0.5) -hotM = machine(OneHotEncoder(), X) -W = transform(hotM, X) # one-hot encode the input +mach0 = machine(OneHotEncoder(), Xs) +W = transform(mach0, Xs) # one-hot encode the input + +mach1 = machine(ridge, W, ys) +y1 = predict(mach1, W) -ridgeM = machine(ridge, W, y) -y1 = predict(ridgeM, W) +mach2 = machine(knn, W, ys) +y2 = predict(mach2, W) -knnM = machine(knn, W, y) -y2 = predict(knnM, W) +mach4= machine(averager) +yhat = transform(mach4, y1, y2) -averagerM= machine(averager) -yhat = transform(averagerM, y1, y2) +# test: +fit!(yhat) +Xnew = selectrows(X, 1:3) +yhat(Xnew) ``` -Now we export to obtain a `Deterministic` composite model and then -instantiate composite model +We next "export" the learning network as a standalone composite model type. First we need +a struct for the composite model. Since we are restricting to `Deterministic` component +regressors, the composite will also make deterministic predictions, and so gets the +supertype `DeterministicNetworkComposite`: -```julia -learning_mach = machine(Deterministic(), X, y; predict=yhat) -Machine{DeterministicSurrogate} @772 trained 0 times. - args: - 1: Source @415 ⏎ `Unknown` - 2: Source @389 ⏎ `Unknown` - - -@from_network learning_mach struct DoubleRegressor - regressor1=ridge - regressor2=knn - averager=averager - end - -composite = DoubleRegressor() -julia> composite = DoubleRegressor() -DoubleRegressor( - regressor1 = RidgeRegressor( - lambda = 1.0), - regressor2 = KNNRegressor( - K = 5, - algorithm = :kdtree, - metric = Distances.Euclidean(0.0), - leafsize = 10, - reorder = true, - weights = :uniform), - averager = Averager( - mix = 0.5)) @301 +```@example boots +mutable struct DoubleRegressor <: DeterministicNetworkComposite + regressor1 + regressor2 + averager +end +``` +As described in [Learning Networks](@ref), we next paste the learning network into a +`prefit` declaration, removing the test data and replacing the component models with +symbolic placeholders: + +```@example boots +function MLJBase.prefit(composite::DoubleRegressor, verbosity, X, y) + Xs = source() + ys = source() + + mach0 = machine(OneHotEncoder(), Xs) + W = transform(mach0, Xs) # one-hot encode the input + + mach1 = machine(:regressor1, W, ys) + y1 = predict(mach1, W) + + mach2 = machine(:regressor2, W, ys) + y2 = predict(mach2, W) + + mach4= machine(:averager) + yhat = transform(mach4, y1, y2) +end ``` -which can be can be evaluated like any other model: +The new model type can be evaluated like any other supervised model: -```julia +```@example boots +X, y = @load_reduced_ames +composite = DoubleRegressor(ridge, knn, Averager(0.5)) +``` + +```@example boots composite.averager.mix = 0.25 # adjust mix from default of 0.5 -julia> evaluate(composite, (@load_reduced_ames)..., measure=rms) -Evaluating over 6 folds: 100%[=========================] Time: 0:00:00 -┌───────────┬───────────────┬────────────────────────────────────────────────────────┐ -│ _.measure │ _.measurement │ _.per_fold │ -├───────────┼───────────────┼────────────────────────────────────────────────────────┤ -│ rms │ 26800.0 │ [21400.0, 23700.0, 26800.0, 25900.0, 30800.0, 30700.0] │ -└───────────┴───────────────┴────────────────────────────────────────────────────────┘ -_.per_observation = [missing] -_.fitted_params_per_fold = [ … ] -_.report_per_fold = [ … ] +evaluate(composite, X, y, measures=[l1, rmslp1]) ``` A static transformer can also expose byproducts of the transform computation in the report diff --git a/docs/src/tuning_models.md b/docs/src/tuning_models.md index 46c04c72e..76f234f18 100644 --- a/docs/src/tuning_models.md +++ b/docs/src/tuning_models.md @@ -215,23 +215,25 @@ predict(mach, rows=148:150) ### Specifying a custom measure -Users may specify a custom loss or scoring function. Suppose, for -example, we define a new scoring function `custom_accuracy` by +Users may specify a custom loss or scoring function, so long as it complies with the +StatisticalMeasuresBase.jl +[API](https://juliaai.github.io/StatisticalMeasuresBase.jl/dev/implementing_new_measures/#definitions) +and implements the appropriate `orientation` trait (`Score()` or `Loss()`) from that +package. For example, we suppose define a "new" scoring function `custom_accuracy` by ```@example goof -custom_accuracy(y,yhat) = mean(y .== yhat); +custom_accuracy(yhat, y) = mean(y .== yhat); # yhat - prediction, y - ground truth ``` -In tuning, scores are maximised, while losses are minimised. By -default, a custom measure is assumed to be a loss rather than a score, -so we must also declare +In tuning, scores are maximised, while losses are minimised. So here we declare ```@example goof -MLJ.orientation(::typeof(custom_accuracy)) = :score +import StatisticalMeasuresBase as SMB +SMB.orientation(::typeof(custom_accuracy)) = SMB.Score() ``` -For full details on constructing custom measures, see [Traits and custom -measures](@ref). +For full details on constructing custom measures, see +[StatisticalMeasuresBase.jl](https://juliaai.github.io/StatisticalMeasuresBase.jl/dev/). ```@example goof From 5e6c57460f13b780a352a731193906a00e9674e7 Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Thu, 28 Sep 2023 11:42:34 +1300 Subject: [PATCH 16/18] more doc fixes and cleanup of model browser page generation --- docs/Project.toml | 1 + docs/make.jl | 3 +- docs/model_docstring_tools.jl | 2 +- docs/src/common_mlj_workflows.md | 2 +- docs/src/getting_started.md | 31 ++------ docs/src/performance_measures.md | 53 ++++++++----- docs/src/target_transformations.md | 10 +-- docs/src/transformers.md | 21 +++-- docs/src/tuning_models.md | 120 ++++++++++++++++------------- src/MLJ.jl | 2 +- 10 files changed, 129 insertions(+), 116 deletions(-) diff --git a/docs/Project.toml b/docs/Project.toml index 7c38b6b61..a1f37bd96 100755 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -26,6 +26,7 @@ Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" ScientificTypes = "321657f4-b219-11e9-178b-2701a2544e81" ScientificTypesBase = "30f210dd-8aff-4c5f-94ba-8e64358c1161" StatisticalMeasures = "a19d573c-0a75-4610-95b3-7071388c7541" +StatisticalMeasuresBase = "c062fc1d-0d66-479b-b6ac-8b44719de4cc" StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" diff --git a/docs/make.jl b/docs/make.jl index b89c7fc03..93a7dfd9a 100755 --- a/docs/make.jl +++ b/docs/make.jl @@ -20,6 +20,7 @@ import Distributions using CategoricalArrays import CategoricalDistributions import StatisticalMeasures +import StatisticalMeasuresBase const MMI = MLJModelInterface @@ -115,7 +116,7 @@ makedocs( CategoricalDistributions, StatisticalMeasures], pages = pages, - warnonly = Documenter.except(:cross_references, :missing_docs), + warnonly = [:cross_references, :missing_docs], ) @info "`makedocs` has finished running. " diff --git a/docs/model_docstring_tools.jl b/docs/model_docstring_tools.jl index f4e399f78..5885f7d4d 100644 --- a/docs/model_docstring_tools.jl +++ b/docs/model_docstring_tools.jl @@ -10,7 +10,7 @@ Removes `@ref` references from `str. For example, a substring of the form """ function remove_doc_refs(page) - regex = r"\[(['\.\d`\!\_a-zA-Z]*)\]\(\@ref\)" + regex = r"\[([\?'\.\d`\!\_a-zA-Z]*)\]\(\@ref\)" while contains(page, regex) # replace the first matched regex with the captured string page = replace(page, regex => s"\1") diff --git a/docs/src/common_mlj_workflows.md b/docs/src/common_mlj_workflows.md index d3ce0bb3a..2b7cfaec9 100644 --- a/docs/src/common_mlj_workflows.md +++ b/docs/src/common_mlj_workflows.md @@ -458,7 +458,7 @@ pipe = (X -> coerce(X, :age=>Continuous)) |> OneHotEncoder() |> knn_with_target Evaluating the pipeline (just as you would any other model): ```@example workflows -pipe.one_hot_encoder.drop_last = true +pipe.one_hot_encoder.drop_last = true # mutate a nested hyper-parameter evaluate(pipe, X, y, resampling=Holdout(), measure=RootMeanSquaredError(), verbosity=2) ``` diff --git a/docs/src/getting_started.md b/docs/src/getting_started.md index acda6f28b..5952cc6bb 100644 --- a/docs/src/getting_started.md +++ b/docs/src/getting_started.md @@ -268,17 +268,8 @@ evaluate!(mach, resampling=Holdout(fraction_train=0.7), ## Next steps -To learn a little more about what MLJ can do, browse [Common MLJ -Workflows](common_mlj_workflows.md) or [Data Science Tutorials in -Julia](https://alan-turing-institute.github.io/DataScienceTutorials.jl/) -or try the [JuliaCon2020 -Workshop](https://github.com/ablaom/MachineLearningInJulia2020) on MLJ -(recorded -[here](https://www.youtube.com/watch?time_continue=27&v=qSWbCn170HU&feature=emb_title)) -returning to the manual as needed. - -*Read at least the remainder of this page before considering serious -use of MLJ.* +For next steps, consult the [Learn MLJ](@ref) section. *At the least, we recommned you +read the remainder of this page before considering serious use of MLJ.* ## Data containers and scientific types @@ -438,19 +429,9 @@ are the key features of that convention: - The scientific types of `nothing` and `missing` are `Nothing` and `Missing`, native types we also regard as scientific. -Use `coerce(v, OrderedFactor)` or `coerce(v, Multiclass)` to coerce a -vector `v` of integers, strings or characters to a vector with an -appropriate `Finite` (categorical) scitype. See [Working with -Categorical Data](@ref). - -For more on scitype coercion of arrays and tables, see [`coerce`](@ref), -[`autotype`](@ref) and [`unpack`](@ref) below and the examples at -[ScientificTypes.jl](https://JuliaAI.github.io/ScientificTypes.jl/dev/). +Use `coerce(v, OrderedFactor)` or `coerce(v, Multiclass)` to coerce a vector `v` of +integers, strings or characters to a vector with an appropriate `Finite` (categorical) +scitype. See also [Working with Categorical Data](@ref), and the +[ScientificTypes.jl](https://JuliaAI.github.io/ScientificTypes.jl/dev/) documentation. - -```@docs -scitype -coerce -autotype -``` diff --git a/docs/src/performance_measures.md b/docs/src/performance_measures.md index f8d2697a7..699bf261f 100644 --- a/docs/src/performance_measures.md +++ b/docs/src/performance_measures.md @@ -7,17 +7,28 @@ - [Migration guide for changes to measures in MLJBase 1.0](@ref) -## Introduction +## Introduction In MLJ loss functions, scoring rules, confusion matrices, sensitivities, etc, are collectively referred to as *measures*. These measures are provided by the package [StatisticalMeasures.jl](https://juliaai.github.io/StatisticalMeasures.jl/dev/) but are -immediately available to the MLJ user. Commonly, measures are passed to MLJ -meta-algorithms (see [Uses of measures](@ref) below) but to learn how to call measures -directly, see the StatisticalMeasures.jl +immediately available to the MLJ user. Here's a simple example of direct application of +the `log_loss` measures to compute a training loss: + +```@example measures +using MLJ +X, y = @load_iris +DecisionTreeClassifier = @load DecisionTreeClassifier pkg=DecisionTree +tree = DecisionTreeClassifier(max_depth=2) +mach = machine(tree, X, y) |> fit! +yhat = predict(mach, X) +log_loss(yhat, y) +``` + +For more examples of direct measure usage, see the StatisticalMeasures.jl [tutorial](https://juliaai.github.io/StatisticalMeasures.jl/dev/examples_of_usage/). -A list of all measures ready to use after running `using MLJ` or `using +A list of all measures, ready to use after running `using MLJ` or `using StatisticalMeasures`, is [here](https://juliaai.github.io/StatisticalMeasures.jl/dev/auto_generated_list_of_measures/). Alternatively, call [`measures()`](@ref StatisticalMeasures.measures) (experimental) to generate a @@ -36,7 +47,7 @@ multi-target measure using this package. ## Uses of measures -In MLJ, measures are specified: +In MLJ, measures are specified: - when evaluating model performance using [`evaluate!`](@ref)/[`evaluate`](@ref) - see [Evaluating Model Performance](@ref) @@ -47,7 +58,7 @@ In MLJ, measures are specified: and elsewhere. -## Using LossFunctions.jl +## Using LossFunctions.jl In previous versions of MLJ, measures from LossFunctions.jl were also available. Now measures from that package must be explicitly imported and wrapped, as described @@ -58,7 +69,7 @@ measures from that package must be explicitly imported and wrapped, as described A related performance evaluation tool provided by StatisticalMeasures.jl, and hence by MLJ, is the `roc_curve` method: ```@docs -StatisticalMeausures.roc_curve +StatisticalMeasures.roc_curve ``` ## Migration guide for changes to measures in MLJBase 1.0 @@ -69,27 +80,27 @@ MLJBase.jl (a dependency of MLJ.jl) but now they are provided by MLJ.jl dependen on users are detailed below: -### Breaking behavior relevant to many users +### Breaking behavior likely relevant to many users - If `using MLJBase` without MLJ, then, in Julia 1.9 or higher, `StatisticalMeasures` must be explicitly imported to use measures that were previously part of MLJBase. If `using MLJ`, then all previous measures are still available, with the exception of those - corresponding to LossFunctions.jl (see below). + corresponding to LossFunctions.jl (see below). - All measures return a *single* aggregated measurement. In other words, measures previously reporting a measurement *per-observation* (previously subtyping `Unaggregated`) no longer do so. To get per-observation measurements, use the new method `StatisticalMeasures.measurements(measure, ŷ, y[, weights, class_weights])`. - + - The default measure for regression models (used in `evaluate/evaluate!` when `measures` is unspecified) is changed from `rms` to `l2=LPLoss(2)` (mean sum of squares). - -- `MeanAbsoluteError` has been removed and instead `mae` is an alias for `LPLoss(p=1)`. + +- `MeanAbsoluteError` has been removed and instead `mae` is an alias for `LPLoss(p=1)`. - Measures that previously skipped `NaN` values will now (at least by default) propagate those values. Missing value behavior is unchanged, except some measures that previously did not support `missing` now do. - + - Aliases for measure *types* have been removed. For example `RMSE` (alias for `RootMeanSquaredError`) is gone. Aliases for instances, such as `rms` and `cross_entropy` persist. The exception is `precision`, for which `ppv` can @@ -107,7 +118,7 @@ on users are detailed below: `measures(predicate)` is decommissioned, but `measures(needle)` is preserved. (This method, owned by StatisticalMeasures.jl, has some other search options, but is experimental.) - + - Measures that were wraps of losses from LossFunctions.jl are no longer exposed by MLJBase or MLJ. To use such a loss, you must explicitly `import LossFunctions` and wrap the loss appropriately. See [Using losses from @@ -124,8 +135,8 @@ on users are detailed below: supported. See [What is a measure?](https://juliaai.github.io/StatisticalMeasuresBase.jl/dev/implementing_new_measures/#definitions) for allowed signatures in measures. - -### Packages implementing the MLJ model interface + +### Packages implementing the MLJ model interface The migration of measures is not expected to require any changes to the source code in packges providing implementations of the MLJ model interface (MLJModelInterface.jl) such @@ -135,17 +146,17 @@ measures. The following should generally suffice to adapt such tests: - Add StatisticalMeasures as test dependency, and add `using StatisticalMeasures` to your `runtests.jl` (and/or included submodules). - + - If measures are qualified, as in `MLJBase.rms`, then the qualification must be removed or changed to `StatisticalMeasures.rms`, etc. - Be aware that the default measure used in methods such as `evaluate!`, when `measure` is not specified, is changed from `rms` to `l2` for regression models. - + - Be aware of that all measures now report a measurement for every observation, and never an aggregate. See second point above. -### Rarely relevant breaking behavior +### Breaking behavior possibly relevant to some developers - The abstract measure types `Aggregated`, `Unaggregated`, `Measure` have been decommissioned. (A measure is now defined purely by its [calling @@ -156,7 +167,7 @@ measures. The following should generally suffice to adapt such tests: - `target_scitype(measure)` is decommissioned. Related is `StatisticalMeasures.observation_scitype(measure)` which declares an upper bound on the allowed scitype *of a single observation*. - + - `prediction_type(measure)` is decommissioned. Instead use `StatisticalMeasures.kind_of_proxy(measure)`. diff --git a/docs/src/target_transformations.md b/docs/src/target_transformations.md index d39aa0423..63203f780 100644 --- a/docs/src/target_transformations.md +++ b/docs/src/target_transformations.md @@ -53,11 +53,11 @@ meaningfully compare the corresponding mean absolute errors, which are indeed di this case. ```@example 123 -evaluate(ridge, X, y, measure=mae) +evaluate(ridge, X, y, measure=l1) ``` ```@example 123 -evaluate(ridge2, X, y, measure=mae) +evaluate(ridge2, X, y, measure=l1) ``` Ordinary functions can also be used in target transformations but an @@ -66,11 +66,11 @@ inverse must be explicitly specified: ```@example 123 ridge3 = TransformedTargetModel(ridge, transformer=y->log.(y), inverse=z->exp.(z)) X, y = @load_boston -evaluate(ridge3, X, y, measure=mae) +evaluate(ridge3, X, y, measure=l1) ``` -Without the log transform (ie, using `ridge`) we get the poorer -`mae` of 3.9. +Without the log transform (ie, using `ridge`) we get the poorer mean absolute error, +`l1`, of 3.9. ```@docs TransformedTargetModel diff --git a/docs/src/transformers.md b/docs/src/transformers.md index 911fba82a..f03cdb92f 100644 --- a/docs/src/transformers.md +++ b/docs/src/transformers.md @@ -81,8 +81,9 @@ transform(mach, [1, 2, 3], [3, 2, 1]) ``` Let's see how we can include our `Averager` in a [learning network](@ref "Learning -Networks")) to mix the predictions of two regressors, with one-hot encoding of the -inputs. Here's some dummy data and component models to test our learning network: +Networks") to mix the predictions of two regressors, with one-hot encoding of the +inputs. Here's two regressors for mixing, and some dummy data for testing our learning +network: ```@example boots ridge = (@load RidgeRegressor pkg=MultivariateStats)() @@ -138,13 +139,14 @@ end ``` As described in [Learning Networks](@ref), we next paste the learning network into a -`prefit` declaration, removing the test data and replacing the component models with -symbolic placeholders: +`prefit` declaration, replace the component models with symbolic placeholders, and add a +learning network "interface": ```@example boots +import MLJBase function MLJBase.prefit(composite::DoubleRegressor, verbosity, X, y) - Xs = source() - ys = source() + Xs = source(X) + ys = source(y) mach0 = machine(OneHotEncoder(), Xs) W = transform(mach0, Xs) # one-hot encode the input @@ -157,19 +159,22 @@ function MLJBase.prefit(composite::DoubleRegressor, verbosity, X, y) mach4= machine(:averager) yhat = transform(mach4, y1, y2) + + # learning network interface: + (; predict=yhat) end ``` The new model type can be evaluated like any other supervised model: ```@example boots -X, y = @load_reduced_ames +X, y = @load_reduced_ames; composite = DoubleRegressor(ridge, knn, Averager(0.5)) ``` ```@example boots composite.averager.mix = 0.25 # adjust mix from default of 0.5 -evaluate(composite, X, y, measures=[l1, rmslp1]) +evaluate(composite, X, y, measure=l1) ``` A static transformer can also expose byproducts of the transform computation in the report diff --git a/docs/src/tuning_models.md b/docs/src/tuning_models.md index 76f234f18..e0c57c961 100644 --- a/docs/src/tuning_models.md +++ b/docs/src/tuning_models.md @@ -67,11 +67,13 @@ one-dimensional range object constructed using the `range` method: ```@example goof r = range(tree, :min_purity_increase, lower=0.001, upper=1.0, scale=:log); -self_tuning_tree = TunedModel(model=tree, - resampling=CV(nfolds=3), - tuning=Grid(resolution=10), - range=r, - measure=rms); +self_tuning_tree = TunedModel( + model=tree, + resampling=CV(nfolds=3), + tuning=Grid(resolution=10), + range=r, + measure=rms +); ``` Incidentally, a grid is generated internally "over the range" by calling the @@ -171,11 +173,13 @@ deterministic measure, such as `misclassification_rate` (which means **Case (i) - probabilistic measure**: ```@example goof -self_tuning_knn = TunedModel(model=knn, - resampling = CV(nfolds=4, rng=1234), - tuning = Grid(resolution=5), - range = K_range, - measure=BrierLoss()); +self_tuning_knn = TunedModel( + model=knn, + resampling = CV(nfolds=4, rng=1234), + tuning = Grid(resolution=5), + range = K_range, + measure=BrierLoss() +); mach = machine(self_tuning_knn, X, y); fit!(mach, verbosity=0); @@ -184,11 +188,13 @@ fit!(mach, verbosity=0); **Case (ii) - deterministic measure**: ```@example goof -self_tuning_knn = TunedModel(model=knn, - resampling = CV(nfolds=4, rng=1234), - tuning = Grid(resolution=5), - range = K_range, - measure=MisclassificationRate()) +self_tuning_knn = TunedModel( + model=knn, + resampling = CV(nfolds=4, rng=1234), + tuning = Grid(resolution=5), + range = K_range, + measure=MisclassificationRate() +) mach = machine(self_tuning_knn, X, y); fit!(mach, verbosity=0); @@ -237,12 +243,14 @@ For full details on constructing custom measures, see ```@example goof -self_tuning_knn = TunedModel(model=knn, - resampling = CV(nfolds=4), - tuning = Grid(resolution=5), - range = K_range, - measure = [custom_accuracy, MulticlassFScore()], - operation = predict_mode); +self_tuning_knn = TunedModel( + model=knn, + resampling = CV(nfolds=4), + tuning = Grid(resolution=5), + range = K_range, + measure = [custom_accuracy, MulticlassFScore()], + operation = predict_mode +); mach = machine(self_tuning_knn, X, y) fit!(mach, verbosity=0) @@ -270,11 +278,12 @@ points: ```@example goof r1 = range(forest, :(model.n_subfeatures), lower=1, upper=9); r2 = range(forest, :bagging_fraction, lower=0.4, upper=1.0); -self_tuning_forest = TunedModel(model=forest, - tuning=Grid(goal=30), - resampling=CV(nfolds=6), - range=[r1, r2], - measure=rms); +self_tuning_forest = TunedModel( + model=forest, + tuning=Grid(goal=30), + resampling=CV(nfolds=6), + range=[r1, r2], + measure=rms); X = MLJ.table(rand(100, 10)); y = 2X.x1 - X.x2 + 0.05*rand(100); @@ -302,12 +311,14 @@ be limited to 25. ```@example goof tuning = Grid(resolution=100, shuffle=true, rng=1234) -self_tuning_forest = TunedModel(model=forest, - tuning=tuning, - resampling=CV(nfolds=6), - range=[(r1, 3), r2], - measure=rms, - n=25); +self_tuning_forest = TunedModel( + model=forest, + tuning=tuning, + resampling=CV(nfolds=6), + range=[(r1, 3), r2], + measure=rms, + n=25 +); fit!(machine(self_tuning_forest, X, y), verbosity=0); ``` @@ -323,12 +334,14 @@ distribution by default, and all others using a (truncated) normal distribution. ```@example goof -self_tuning_forest = TunedModel(model=forest, - tuning=RandomSearch(), - resampling=CV(nfolds=6), - range=[r1, r2], - measure=rms, - n=25); +self_tuning_forest = TunedModel( + model=forest, + tuning=RandomSearch(), + resampling=CV(nfolds=6), + range=[r1, r2], + measure=rms, + n=25 +); X = MLJ.table(rand(100, 10)); y = 2X.x1 - X.x2 + 0.05*rand(100); mach = machine(self_tuning_forest, X, y); @@ -375,12 +388,14 @@ For this illustration we'll add a third, nominal, hyper-parameter: ```@example goof r3 = range(forest, :(model.post_prune), values=[true, false]); -self_tuning_forest = TunedModel(model=forest, - tuning=latin, - resampling=CV(nfolds=6), - range=[r1, r2, r3], - measure=rms, - n=25); +self_tuning_forest = TunedModel( + model=forest, + tuning=latin, + resampling=CV(nfolds=6), + range=[r1, r2, r3], + measure=rms, + n=25 +); mach = machine(self_tuning_forest, X, y); fit!(mach, verbosity=0) ``` @@ -411,10 +426,12 @@ The following model is equivalent to the best in `models` by using 3-fold cross-validation: ```@example goof -multi_model = TunedModel(models=models, - resampling=CV(nfolds=3), - measure=log_loss, - check_measure=false) +multi_model = TunedModel( + models=models, + resampling=CV(nfolds=3), + measure=log_loss, + check_measure=false +) nothing # hide ``` @@ -426,10 +443,7 @@ evaluated 2 x 3 times): ```@example goof X, y = make_blobs() -e = evaluate(multi_model, X, y, - resampling=CV(nfolds=2), - measure=log_loss, - verbosity=6) +e = evaluate(multi_model, X, y, resampling=CV(nfolds=2), measure=log_loss, verbosity=6) ``` Now, for example, we can get the best model for the first fold out of @@ -453,7 +467,7 @@ For example, for the first fold of the outer loop and the second model: e.report_per_fold[2].history[1] ``` -## API +## Reference ```@docs MLJBase.range diff --git a/src/MLJ.jl b/src/MLJ.jl index f126b1b1b..b2935eac1 100644 --- a/src/MLJ.jl +++ b/src/MLJ.jl @@ -12,7 +12,7 @@ loaded separately: checking how MLJ interprets your data - StatisticalMeasures.jl: MLJ-compatible measures (metrics) for machine learning, - confusion matrices, ROC curves + confusion matrices, ROC curves. - MLJModels.jl: Common transformers for data preprocessing, searching the model registry, loading models with `@load` From 67e905e98ad27c572df3fe73a5dfdd5a7eba782f Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Fri, 29 Sep 2023 11:09:10 +1300 Subject: [PATCH 17/18] doc tweak to Logging docs --- docs/src/logging_workflows.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/src/logging_workflows.md b/docs/src/logging_workflows.md index 7f4b468cd..8eda54f4f 100644 --- a/docs/src/logging_workflows.md +++ b/docs/src/logging_workflows.md @@ -5,8 +5,11 @@ [MLflow](https://mlflow.org) is a popular, language-agnostic, tool for externally logging the outcomes of machine learning experiments, including those carried out using MLJ. -This functionality is provided by the [MLJFlow.jl](https://github.com/JuliaAI/MLJFlow.jl) -package whose methods are automatically available to MLJ users. Refer to the package's -documentation for examples. +MLJ logging examples are given in the [MLJFlow.jl](https://github.com/JuliaAI/MLJFlow.jl) +documentation. MLJ includes and re-exports all the methods of MLJFlow.jl, so there is no +need to import MLJFlow.jl if `using MLJ`. +!!! warning + + MLJFlow.jl is a new package still under active development and should be regarded as experimental. At this time, breaking changes to MLJFlow.jl will not necessarily trigger new breaking releases of MLJ.jl. From a421a6f31862aa13f46bccace0c66fa7eca28153 Mon Sep 17 00:00:00 2001 From: "Anthony D. Blaom" Date: Fri, 29 Sep 2023 11:18:48 +1300 Subject: [PATCH 18/18] bump 0.20.0 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index d65f8aca1..e1b39ad64 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "MLJ" uuid = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" authors = ["Anthony D. Blaom "] -version = "0.19.5" +version = "0.20.0" [deps] CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597"