Skip to content

Releases: JuliaAI/MLJBase.jl

v0.17.2

03 Feb 06:25
6d3b404
Compare
Choose a tag to compare

MLJBase v0.17.2

Diff since v0.17.1

Closed issues:

  • Cannot predict/transform using a learning machine with rows=... (#511)

Merged pull requests:

v0.17.1

29 Jan 11:11
11ef61d
Compare
Choose a tag to compare

MLJBase v0.17.1

Diff since v0.17.0

Closed issues:

  • Searching for a measure with measures(matching(y)) does not work (#503)

Merged pull requests:

  • Bump [compat] MLJModelInterface = "^0.4"; rm redundant exports (#509) (@ablaom)
  • For a 0.17.1 release (#510) (@ablaom)

v0.17.0

26 Jan 03:37
4ccfa15
Compare
Choose a tag to compare

MLJBase v0.17.0

Diff since v0.16.3

Some code re-organization:

  • Import all model and measure traits from new base package StatisticalTraits.jl, which are programatically re-exported. This resolves #495
  • Import some utilities from StatisticalTraits.jl, previously defined locally
  • (breaking for users) measures(matching(...)) facility removed; private info_dic method and matching method moved to MLJModels

Also added optimisations for models buying into a new data front-end #501 . This may increase the default memory footprint of MLJBase operations. To obtain old behaviour, specify cache=false when constructing machines, as in machine(model, X, y, cache=false).

Closed issues:

  • Add multi class precision/recall (#383)
  • Decouple model traits from measure traits? (#495)
  • Inappropriate error message thrown for calling transform on Static machines (#499)
  • Problem loading LightGBM models (#505)

Merged pull requests:

  • Better error for bad call of transform on machines for Static models (#500) (@ablaom)
  • Realize performance improvements for models implementing new data front-end (#501) (@ablaom)
  • Code re-organization (#507) (@ablaom)
  • For a 0.17.0 release (#508) (@ablaom)

v0.16.3

17 Dec 20:29
cde46ef
Compare
Choose a tag to compare

MLJBase v0.16.3

Diff since v0.16.2

Closed issues:

  • Docs not deploying (#482)
  • Remove initialisation of remote channels. (#496)

Merged pull requests:

v0.16.2

30 Nov 03:51
15a1241
Compare
Choose a tag to compare

MLJBase v0.16.2

Diff since v0.16.1

Merged pull requests:

v0.16.1

27 Nov 21:22
366b409
Compare
Choose a tag to compare

MLJBase v0.16.1

Diff since v0.16.0

Merged pull requests:

v0.16.0

27 Nov 04:43
2597c5b
Compare
Choose a tag to compare

MLJBase v0.16.0

Diff since v0.15.7

Compatiblity upgrades

Extend compatibility to include CategoricalArrays 0.9 and require MLJScientificTypes 0.4.1, with the following behaviour changes:

  • (breaking) coerce(v, OrderedFactor) and coerce(v, OrderedFactor) will first convert non-missing elements of an array v into strings unless the eltype of v is a subtype of Union{AbstractString, Char, Number, Missing}; for example, if v = [:x, :y] and vnew = coerce(v, Multiclass), then vnew[1] == "x" is true but vnew[1] == :x is false. Otherwise the behaviour is unaltered.

Clean-up of measures

Resolve #450:

  • (enhancement) Thorough review of measure doc-strings, including addition of automatic doc-string generation to simplify new contributions (@create_docs macro)

  • Add a new trait for measures called human_name (mainly for use in documentation); for example its value for L1EpsilonInsLoss is l1 ϵ-insensitive loss. There is a fallback that guesses a human name from the type name.

  • (breaking) Redefine name trait on all measures to return string version of type name, eg, for L1EpsilonInsLoss type (or its instances) the value is "L1EpsilonLoss". This is for consistency with name on models. Type names have changed to make them maximally descriptive (eg, RMS is now RootMeanSquaredError) but the old names are kept as aliases.

  • (enhancement) Add a new trait for measures called instances (distinct from Base.instances and not exported) which lists string versions of built in instances, mostly aliases for the default instance. For example, the value on Recall is ["true_positive_rate", "truepositive_rate", "tpr", "sensitivity", "recall", "hit_rate"]. These instances appear second on calls to measures() so user to can easily lookup a short method to call in common use cases (see PR #459)

  • (enhancement) Ensure every measure has a default keyword constructor, so, for example FScore() now works.

  • (breaking) FScore are BrierScore have been simplified to avoid unnecessary type parameters; this may break some constructors, like FScore{1.0}(). You should never need to use {} to construct a measure instance.

  • (enhancement) All types from LossFunctions.jl are exported and they now have default key-word constructors, just like the built-in measures, and their instances can be called the same way too. (In LossFunctions.jl the instances are not callable.)

  • Add BierLoss. It is just negative of BrierScore.

  • (breaking) Dissallow keyword arguments in calls to confmat, which is now an instance of a measure type (confmat = ConfusionMatrix()), rather than a function hacked to look like a measure. So, instead of confmat(yhat, y, perm=[2, 3, 1]) use ConfusionMatrix(perm=[2, 3, 1])(yhat, y). What used to be called ConfusionMatrix is now ConfusionMatrixObject. The ordinary user will never need to construct one directly.

  • (mildlly breaking) The field name eps in LogLoss=CrossEntropy (for clamping) is renamed to tol for consistency with other measures and elsewhere in julia. However CrossEntropy(eps=...) still works.

Closed issues:

  • name, aliases cleanup for measures (#450)
  • specifying rev=false in confmat giving unexpected behaviour in multiclass case (#458)

Merged pull requests:

  • Cleanup the measures (aka loss functions and scores) (#459) (@ablaom)
  • Extend [compat] CategoricalArrays 0.9 and adjust to breaking changes (#460) (@ablaom)
  • For a 0.16.0 release (#461) (@ablaom)

v0.15.7

23 Nov 22:37
67f88bf
Compare
Choose a tag to compare

MLJBase v0.15.7

Diff since v0.15.6

Add the multiclass classification measures (applying to any Finite target):

  • MulticlassFalseNegative, MulticlassFalsePositive, MulticlassTrueNegative, MulticlassTruePositive. When instances are called, as in MulticlassFalseNegative()(yhat, y), then they return a dictionary keyed on class, or a vector , according to the keyword argument return_type=... provided the constructor; options: LittleDict (default), Vector (#456 @ven-k)

  • MulticlassFalseDiscoveryRate, MulticlassFalseNegativeRate, MulticlassNegativePredictiveValue, MulticlassPrecision, MulticlassTrueNegativeRate, MulticlassTruePositiveRate. Averaging method specified by keyword average=..., with options micro_avg, macro_avg and no_avg. A float is returned unless average=no_avg, in which case the keyword argument return_type determines the return type, as above. Instances can be provided a dictionary of class weights, class_w, as in MulticlassPrecision()(yhat, y, class_w) (#456 @ven-k)

  • MulticlassFScore, with averaging and return type options specified as above. Instances can be similarly called with class weights (#456 @ven-k)

The averaging options closely mimic those implemented in scikit-learn, except that the binary versions have a separate implementation in MLJ (TruePositiveRate, FScore, etc). Note that the multiclass versions are "symmetrized" versions of the binary ones - so they apply to any Finite target, while the original binary measures apply only to OrderedFactor{2}. In particular, FScore() (for example) on OrderedFactor{2} is different from MulticlassFScore() on OrderedFactor{2}.

Closed issues:

  • Add multiclass F1/Fb score (#382)

Merged pull requests:

v0.15.6

16 Nov 04:24
f789d81
Compare
Choose a tag to compare

MLJBase v0.15.6

Diff since v0.15.5

Merged pull requests:

  • CompatHelper: bump compat for "PrettyTables" to "0.10" (#445) (@github-actions[bot])
  • minor tweak (#447) (@OkonSamuel)
  • CompatHelper: bump compat for "HTTP" to "0.9" (#449) (@github-actions[bot])
  • For a 0.15.6 release (#451) (@ablaom)

v0.15.5

05 Nov 01:08
412e24e
Compare
Choose a tag to compare

MLJBase v0.15.5

Diff since v0.15.4

Closed issues:

  • Stack traces are being clipped when there's an error in fit! (#442)

Merged pull requests: