{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/alan-turing-institute/MLJ.jl/master?filepath=binder%2FMLJ_demo.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"Julia\"\n", "\n", "# A taste of the Julia programming language and the MLJ machine learning toolbox" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This first cell instantiates a Julia project environment, reproducing a collection of mutually compatible packages for use in this demonstration:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[32m\u001b[1mActivating\u001b[22m\u001b[39m environment at `~/Dropbox/Julia7/MLJ/MLJ/binder/Project.toml`\n" ] } ], "source": [ "using Pkg\n", "Pkg.activate(@__DIR__)\n", "Pkg.instantiate()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Lightning encounter with Julia programming language\n", "\n", "###### Julia related content prepared by [@ablaom](https://github.com/ablaom)\n", "\n", "Interacting with Julia at the REPL, or in a notebook, feels very much\n", "\n", "the same as python, MATLAB or R:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello world!" ] } ], "source": [ "print(\"Hello world!\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2 + 2" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Float64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typeof(42.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Just-in-time compilation\n", "\n", "Here's a function used in generating the famous Mandelbrot set,\n", "\n", "which looks pretty much the same in python, MATLAB or R:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "mandel (generic function with 1 method)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function mandel(z)\n", " c = z\n", " maxiter = 80\n", " for n in 1:maxiter\n", " if abs(z) > 2\n", " return n-1\n", " end\n", " z = z^2 + c\n", " end\n", " return maxiter\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In particular, notice the absence of type annotations. The crucial difference is what happens when you call this function (**remove leading`#` before evaluating next four cells**):" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.007121 seconds (21.31 k allocations: 1.197 MiB)\n" ] }, { "data": { "text/plain": [ "1" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# @elapsed mandel(1.2) # time call on a Float64" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is actually pretty lousy, slower than python. (If you are running this notebook using binder you may not see this - known issue.) However, trying again:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.000002 seconds (4 allocations: 160 bytes)\n" ] }, { "data": { "text/plain": [ "0" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# @elapsed mandel(3.4) # time on another Float64" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Thousands of times faster, second time around! What happenend?\n", "\n", "When you call `mandel(1.2)` in python, say, then the defining code\n", "is interpreted each time. When you call `mandel(1.2)` in Julia for\n", "the first time Julia inspects the of the argument, namely `Float64`,\n", "and using this information *compiles* an efficient type-specfic\n", "version of `mandel`, which it caches for use in any subsequent call\n", "*on the same type*. Indeed if we call `mandel` on a new type, a new\n", "compilation will be needed:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.033819 seconds (93.55 k allocations: 4.975 MiB)\n" ] }, { "data": { "text/plain": [ "0" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# @elapsed mandel(1.0 + 5.0im)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Second time with a complex input:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.000005 seconds (6 allocations: 224 bytes)\n" ] }, { "data": { "text/plain": [ "0" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# @elapsed mandel(2.0 + 0.5im)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since plotting the Mandelbrot set means calling `mandel` millions of\n", "times on the same type, the advantage of just-in-time compilation is\n", "obvious." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAF7CAYAAAA+OuT4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOy9eXgkZ33v+3nft5ZetY80I88+47HHHq9jY7wANsYGgw+xIWDIgYQbH8gCTnxMThLISQJ5uNdJzrkkN+cJnEvgsgZMFgibIbFjFju2WcYY7+OxPePZRzPaWlKru6vqfe8f1d1qSd1aW1K3VJ/n0SOpu7rq7dreb/1WYYwxRERERERERESsQeRKDyAiIiIiIiIiYqWIhFBERERERETEmiUSQhERERERERFrlkgIRURERERERKxZIiEUERERERERsWaJhFBERERERETEmiUSQhERERERERFrlkgIRURERERERKxZIiEUERERERERsWaJhFBERERERETEmqXhhdAnPvEJtm3bRiwWY+/evTz44IMrPaSIiIiIiIiIVUJDC6GvfvWr3HnnnfzRH/0RP//5z3nVq17FTTfdxOHDh1d6aBERERERERGrANHITVevuOIKLr30Uj75yU+WX9u9eze33HILd9999wqOLCIiIiIiImI1YK30AGpRKBTYt28ff/iHfzjp9RtvvJGHH3542vL5fJ58Pl/+X2vNwMAAnZ2dCCGWfLwRERERERERi8cYw8jICL29vUi59I6rhhVCZ86cIQgCenp6Jr3e09PDyZMnpy1/991389GPfnS5hhcRERERERGxhBw5coSNGzcu+XYaVgiVmGrNMcZUtfB86EMf4q677ir/Pzw8zObNm7mGN2JhL/k4F41UCNmAliuliAxqEZNQCpbhKW05EEKE36d+KwSpoMa1LKSc/J4QoCr2pZSULjhTHJtxLXTcZnRTgoHzBR1PaexRTfxUFuEFYEz4U1yfsSTGURTaY2hLkG9TyNtO432tm5bDeTBg948jx3MQBBBoCDRG68mD1QZ0MLHuEkZjginLrjRBAFPHv0IYQzieiAXjG48Hg2+STqeXZXsNK4S6urpQSk2z/vT19U2zEgG4rovrutNet7CxRIMLISEQ9bwZ1wMR3rAjt2JEmdIkHYmg2sjaQqjq9qbuzyn/G6kw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", "text/plain": [ "Figure(PyObject
)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "┌ Warning: PyPlot is using tkagg backend, which is known to cause crashes on MacOS (#410); use the MPLBACKEND environment variable to request a different backend.\n", "└ @ PyPlot /Users/anthony/.julia/packages/PyPlot/XHEG0/src/init.jl:192\n" ] }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using PyPlot\n", "\n", "# plt.imshow([mandel(x + y * im) for y = -1:0.001:1, x = -2:0.001:1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Multiple dispatch\n", "\n", "You will never see anything like `A.add(B)` in Julia because Julia\n", "is not a traditional object-oriented language. In Julia, function and\n", "structure are kept separate, with the help of abstract types and\n", "multiple dispatch, as we explain next\n", "In addition to regular concrete types, such as `Float64` and\n", "`String`, Julia has a built-in heirarchy of *abstract* types. These\n", "generally have subtypes but no instances:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Int64" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typeof(42)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Signed" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "supertype(Int64)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Integer" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "supertype(Signed)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3-element Array{Any,1}:\n", " Bool \n", " Signed \n", " Unsigned" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subtypes(Integer)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "true" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Bool <: Integer # is Bool a subtype of Integer?" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "false" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Bool <: String" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In Julia, which is optionally typed, one uses type annotations to\n", "adapt the behaviour of functions to their types. If we define" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "divide (generic function with 1 method)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "divide(x, y) = x / y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "then `divide(x, y)` will make sense whenever `x / y` makes sense (for\n", "the built-in function `/`). For example, we can use it to divide two\n", "integers, or two matrices:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "divide(1, 2)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2×2 Array{Float64,2}:\n", " 1.0 -0.0\n", " 9.0 -2.0" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "divide([1 2; 3 4], [1 2; 3 7])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To vary the behaviour for specific types we make type annotatations:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "divide(x::Integer, y::Integer) = floor(x/y)\n", "divide(x::String, y::String) = join([x, y], \" / \")\n", "divide(1, 2)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"Hello / World!\"" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "divide(\"Hello\", \"World!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the case of `Float64` the original \"fallback\" method still\n", "applies:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "divide(1.0, 2.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## User-defined types\n", "\n", "Users can define their own abstract types and composite types:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "describe (generic function with 2 methods)" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "abstract type Organism end\n", "\n", "struct Animal <: Organism\n", " name::String\n", " is_hervibore::Bool\n", "end\n", "\n", "struct Plant <: Organism\n", " name::String\n", " is_flowering::Bool\n", "end\n", "\n", "describe(o::Organism) = string(o.name) # fall-back method\n", "function describe(p::Plant)\n", "\n", " if p.is_flowering\n", " text = \" is a flowering plant.\"\n", " else\n", " text = \" is a non-flowering plant.\"\n", " end\n", " return p.name*text\n", "\n", "end" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"Elephant\"" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "describe(Animal(\"Elephant\", true))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"Fern is a non-flowering plant.\"" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "describe(Plant(\"Fern\", false))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For more on multiple dispatch, see this [blog post](http://www.stochasticlifestyle.com/type-dispatch-design-post-object-oriented-programming-julia/) by [Christopher Rackauckas](http://www.chrisrackauckas.com/)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Automatic differentiation\n", "\n", "Differentiation of almost arbitrary programs with respect to their input. ([source]( https://render.githubusercontent.com/view/ipynb?commit=89317894e2e5370a80e45d52db8a4055a4fdecd6&enc_url=68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f6d6174626573616e636f6e2f454d455f4a756c69615f776f726b73686f702f383933313738393465326535333730613830653435643532646238613430353561346664656364362f315f496e74726f64756374696f6e2e6970796e62&nwo=matbesancon%2FEME_Julia_workshop&path=1_Introduction.ipynb&repository_id=270611906&repository_type=Repository#Automatic-differentiation) by [@matbesancon](https://github.com/matbesancon))" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "sqrt_babylonian (generic function with 1 method)" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using ForwardDiff\n", "\n", "function sqrt_babylonian(s)\n", " x = s / 2\n", " while abs(x^2 - s) > 0.001\n", " x = (x + s/x) / 2\n", " end\n", " x\n", "end" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.123901414519125e-6" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sqrt_babylonian(2) - sqrt(2)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ForwardDiff.derivative(sqrt_babylonian, 2) = 0.353541906958862\n", "ForwardDiff.derivative(sqrt, 2) = 0.35355339059327373\n" ] } ], "source": [ "@show ForwardDiff.derivative(sqrt_babylonian, 2);\n", "@show ForwardDiff.derivative(sqrt, 2);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Unitful computations\n", "Physicists' dreams finally made true. ([soure](https://render.githubusercontent.com/view/ipynb?commit=89317894e2e5370a80e45d52db8a4055a4fdecd6&enc_url=68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f6d6174626573616e636f6e2f454d455f4a756c69615f776f726b73686f702f383933313738393465326535333730613830653435643532646238613430353561346664656364362f315f496e74726f64756374696f6e2e6970796e62&nwo=matbesancon%2FEME_Julia_workshop&path=1_Introduction.ipynb&repository_id=270611906&repository_type=Repository#Unitful-computations) by [@matbesancon](https://github.com/matbesancon))" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "┌ Info: Precompiling Unitful [1986cc42-f94f-5a68-af5c-568840ba703d]\n", "└ @ Base loading.jl:1273\n" ] } ], "source": [ "using Unitful\n", "using Unitful: J, kg, m, s" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4.0 kg m² s⁻²" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "3J + 1kg * (1m / 1s)^2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"MLJ\"\n", "\n", "# MLJ\n", "\n", "MLJ (Machine Learning in Julia) is a toolbox written in Julia\n", "providing a common interface and meta-algorithms for selecting,\n", "tuning, evaluating, composing and comparing machine learning models\n", "written in Julia and other languages. In particular MLJ wraps a large\n", "number of [scikit-learn](https://scikit-learn.org/stable/) models. \n", "\n", "## Key goals\n", "\n", "* Offer a consistent way to use, compose and tune machine learning\n", " models in Julia,\n", "\n", "* Promote the improvement of the Julia ML/Stats ecosystem by making it\n", " easier to use models from a wide range of packages,\n", "\n", "* Unlock performance gains by exploiting Julia's support for\n", " parallelism, automatic differentiation, GPU, optimisation etc.\n", "\n", "\n", "## Key features\n", "\n", "* Data agnostic, train models on any data supported by the\n", " [Tables.jl](https://github.com/JuliaData/Tables.jl) interface,\n", "\n", "* Extensive support for model composition (*pipelines* and *learning\n", " networks*),\n", "\n", "* Convenient syntax to tune and evaluate (composite) models.\n", "\n", "* Consistent interface to handle probabilistic predictions.\n", "\n", "* Extensible [tuning\n", " interface](https://github.com/alan-turing-institute/MLJTuning.jl),\n", " to support growing number of optimization strategies, and designed\n", " to play well with model composition.\n", "\n", "\n", "More information is available from the [MLJ design paper](https://github.com/alan-turing-institute/MLJ.jl/blob/master/paper/paper.md)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's how to genearate the full list of models supported by MLJ:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "142-element Array{NamedTuple{(:name, :package_name, :is_supervised, :docstring, :hyperparameter_ranges, :hyperparameter_types, :hyperparameters, :implemented_methods, :is_pure_julia, :is_wrapper, :load_path, :package_license, :package_url, :package_uuid, :prediction_type, :supports_online, :supports_weights, :input_scitype, :target_scitype, :output_scitype),T} where T<:Tuple,1}:\n", " (name = ARDRegressor, package_name = ScikitLearn, ... ) \n", " (name = AdaBoostClassifier, package_name = ScikitLearn, ... ) \n", " (name = AdaBoostRegressor, package_name = ScikitLearn, ... ) \n", " (name = AdaBoostStumpClassifier, package_name = DecisionTree, ... ) \n", " (name = AffinityPropagation, package_name = ScikitLearn, ... ) \n", " (name = AgglomerativeClustering, package_name = ScikitLearn, ... ) \n", " (name = BaggingClassifier, package_name = ScikitLearn, ... ) \n", " (name = BaggingRegressor, package_name = ScikitLearn, ... ) \n", " (name = BayesianLDA, package_name = MultivariateStats, ... ) \n", " (name = BayesianLDA, package_name = ScikitLearn, ... ) \n", " (name = BayesianQDA, package_name = ScikitLearn, ... ) \n", " (name = BayesianRidgeRegressor, package_name = ScikitLearn, ... ) \n", " (name = BayesianSubspaceLDA, package_name = MultivariateStats, ... )\n", " ⋮ \n", " (name = Standardizer, package_name = MLJModels, ... ) \n", " (name = StaticSurrogate, package_name = MLJBase, ... ) \n", " (name = SubspaceLDA, package_name = MultivariateStats, ... ) \n", " (name = TheilSenRegressor, package_name = ScikitLearn, ... ) \n", " (name = UnivariateBoxCoxTransformer, package_name = MLJModels, ... )\n", " (name = UnivariateDiscretizer, package_name = MLJModels, ... ) \n", " (name = UnivariateStandardizer, package_name = MLJModels, ... ) \n", " (name = UnsupervisedSurrogate, package_name = MLJBase, ... ) \n", " (name = WrappedFunction, package_name = MLJBase, ... ) \n", " (name = XGBoostClassifier, package_name = XGBoost, ... ) \n", " (name = XGBoostCount, package_name = XGBoost, ... ) \n", " (name = XGBoostRegressor, package_name = XGBoost, ... ) " ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using MLJ\n", "models()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Performance evaluation\n", "\n", "The following example shows how to evaluate the performance of supervised learning model in MLJ. We'll start by loading a canned data set that is very well-known:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "X, y = @load_iris;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here `X` is a table of input features, and `y` the target observations (iris species)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we can inspect a list of models that apply immediately to this data:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "42-element Array{NamedTuple{(:name, :package_name, :is_supervised, :docstring, :hyperparameter_ranges, :hyperparameter_types, :hyperparameters, :implemented_methods, :is_pure_julia, :is_wrapper, :load_path, :package_license, :package_url, :package_uuid, :prediction_type, :supports_online, :supports_weights, :input_scitype, :target_scitype, :output_scitype),T} where T<:Tuple,1}:\n", " (name = AdaBoostClassifier, package_name = ScikitLearn, ... ) \n", " (name = AdaBoostStumpClassifier, package_name = DecisionTree, ... ) \n", " (name = BaggingClassifier, package_name = ScikitLearn, ... ) \n", " (name = BayesianLDA, package_name = MultivariateStats, ... ) \n", " (name = BayesianLDA, package_name = ScikitLearn, ... ) \n", " (name = BayesianQDA, package_name = ScikitLearn, ... ) \n", " (name = BayesianSubspaceLDA, package_name = MultivariateStats, ... ) \n", " (name = ConstantClassifier, package_name = MLJModels, ... ) \n", " (name = DecisionTreeClassifier, package_name = DecisionTree, ... ) \n", " (name = DeterministicConstantClassifier, package_name = MLJModels, ... )\n", " (name = DummyClassifier, package_name = ScikitLearn, ... ) \n", " (name = EvoTreeClassifier, package_name = EvoTrees, ... ) \n", " (name = ExtraTreesClassifier, package_name = ScikitLearn, ... ) \n", " ⋮ \n", " (name = ProbabilisticSGDClassifier, package_name = ScikitLearn, ... ) \n", " (name = RandomForestClassifier, package_name = DecisionTree, ... ) \n", " (name = RandomForestClassifier, package_name = ScikitLearn, ... ) \n", " (name = RidgeCVClassifier, package_name = ScikitLearn, ... ) \n", " (name = RidgeClassifier, package_name = ScikitLearn, ... ) \n", " (name = SGDClassifier, package_name = ScikitLearn, ... ) \n", " (name = SVC, package_name = LIBSVM, ... ) \n", " (name = SVMClassifier, package_name = ScikitLearn, ... ) \n", " (name = SVMLinearClassifier, package_name = ScikitLearn, ... ) \n", " (name = SVMNuClassifier, package_name = ScikitLearn, ... ) \n", " (name = SubspaceLDA, package_name = MultivariateStats, ... ) \n", " (name = XGBoostClassifier, package_name = XGBoost, ... ) " ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "models(matching(X, y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll choose one and invoke the `@load` macro, which simultaneously loads the code for the chosen model, and instantiates the model, using default hyper-parameters:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "RandomForestClassifier(\n", " max_depth = -1,\n", " min_samples_leaf = 1,\n", " min_samples_split = 2,\n", " min_purity_increase = 0.0,\n", " n_subfeatures = -1,\n", " n_trees = 10,\n", " sampling_fraction = 0.7,\n", " pdf_smoothing = 0.0)\u001b[34m @709\u001b[39m" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tree_model = @load RandomForestClassifier pkg=DecisionTree" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can evaluate it's performance using, say, 6-fold cross-validation, and the `cross_entropy` performance measure:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[33mEvaluating over 6 folds: 100%[=========================] Time: 0:00:05\u001b[39m\n" ] }, { "data": { "text/plain": [ "┌\u001b[0m───────────────\u001b[0m┬\u001b[0m───────────────\u001b[0m┬\u001b[0m─────────────────────────────────────────────\u001b[0m┐\u001b[0m\n", "│\u001b[0m\u001b[22m _.measure \u001b[0m│\u001b[0m\u001b[22m _.measurement \u001b[0m│\u001b[0m\u001b[22m _.per_fold \u001b[0m│\u001b[0m\n", "├\u001b[0m───────────────\u001b[0m┼\u001b[0m───────────────\u001b[0m┼\u001b[0m─────────────────────────────────────────────\u001b[0m┤\u001b[0m\n", "│\u001b[0m cross_entropy \u001b[0m│\u001b[0m 0.0893 \u001b[0m│\u001b[0m [0.14, 0.0216, 0.104, 0.109, 0.0582, 0.103] \u001b[0m│\u001b[0m\n", "└\u001b[0m───────────────\u001b[0m┴\u001b[0m───────────────\u001b[0m┴\u001b[0m─────────────────────────────────────────────\u001b[0m┘\u001b[0m\n", "_.per_observation = [[[2.22e-16, 1.2, ..., 2.22e-16], [2.22e-16, 2.22e-16, ..., 0.105], [2.22e-16, 0.357, ..., 0.357], [2.22e-16, 2.22e-16, ..., 2.22e-16], [2.22e-16, 2.22e-16, ..., 2.22e-16], [2.22e-16, 2.22e-16, ..., 0.105]]]\n" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "evaluate(tree_model, X, y, resampling=CV(nfolds=6, shuffle=true), measure=cross_entropy)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fit and predict\n", "\n", "We'll now evaluate the peformance of our model by hand, but using a simple holdout set, to illustate a typical `fit!` and `predict` workflow. \n", "\n", "First note that a *model* in MLJ is an object that only serves as a container for the hyper-parameters of the model, and that's all. A *machine* is an object binding a model to some data, and is where *learned* parameters are stored (among other things):" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[34mMachine{RandomForestClassifier} @047\u001b[39m trained 0 times.\n", " args: \n", " 1:\t\u001b[34mSource @200\u001b[39m ⏎ `Table{AbstractArray{Continuous,1}}`\n", " 2:\t\u001b[34mSource @688\u001b[39m ⏎ `AbstractArray{Multiclass{3},1}`\n" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tree = machine(tree_model, X, y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Splitting the data\n", "\n", "To split the data into a training and testing set, you can use the function `partition` to obtain indices for data points that should be considered either as training or testing data:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3-element Array{Int64,1}:\n", " 27\n", " 54\n", " 150" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train, test = partition(eachindex(y), 0.7, shuffle=true) \n", "test[1:3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To fit the machine, you can use the function `fit!` specifying the rows to be used for the training:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "┌ Info: Training \u001b[34mMachine{RandomForestClassifier} @047\u001b[39m.\n", "└ @ MLJBase /Users/anthony/.julia/packages/MLJBase/2UxSl/src/machines.jl:317\n" ] }, { "data": { "text/plain": [ "\u001b[34mMachine{RandomForestClassifier} @047\u001b[39m trained 1 time.\n", " args: \n", " 1:\t\u001b[34mSource @200\u001b[39m ⏎ `Table{AbstractArray{Continuous,1}}`\n", " 2:\t\u001b[34mSource @688\u001b[39m ⏎ `AbstractArray{Multiclass{3},1}`\n" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fit!(tree, rows=train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that this modifies the machine, which now contains the trained parameters of the decision tree. You can inspect the result of the fitting with the `fitted_params` method:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(forest = Ensemble of Decision Trees\n", "Trees: 10\n", "Avg Leaves: 6.4\n", "Avg Depth: 4.8,)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fitted_params(tree) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can now use the machine to make predictions with the `predict` function specifying rows to be used for the prediction:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "┌ Warning: `predict(mach)` and `predict(mach, rows=...)` are deprecated. Data or nodes should be explictly specified, as in `predict(mach, X)`. \n", "│ caller = ip:0x0\n", "└ @ Core :-1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "ŷ[1] = UnivariateFinite{Multiclass{3}}(setosa=>1.0, versicolor=>0.0, virginica=>0.0)\n" ] }, { "data": { "text/plain": [ "UnivariateFinite{Multiclass{3}}(setosa=>1.0, versicolor=>0.0, virginica=>0.0)" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ŷ = predict(tree, rows=test)\n", "@show ŷ[1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the output is probabilistic, effectively a vector with a score for each class. You could get the mode by using the `mode` function on `ŷ` or using `predict_mode`:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "┌ Warning: `predict_mode(mach)` and `predict_mode(mach, rows=...)` are deprecated. Data or nodes should be explictly specified, as in `predict_mode(mach, X)`. \n", "│ caller = ip:0x0\n", "└ @ Core :-1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "ȳ[1] = \"setosa\"\n", "mode(ŷ[1]) = \"setosa\"\n" ] }, { "data": { "text/plain": [ "CategoricalArrays.CategoricalValue{String,UInt32} \"setosa\"" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ȳ = predict_mode(tree, rows=test)\n", "@show ȳ[1]\n", "@show mode(ŷ[1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To measure the discrepancy between ŷ and y you could use the average cross entropy:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0777" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mce = cross_entropy(ŷ, y[test]) |> mean\n", "round(mce, digits=4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# A more advanced example\n", "\n", "As in other frameworks, MLJ also supports a variety of unsupervised models for pre-processing data, reducing dimensionality, etc. It also provides a [wrapper](https://alan-turing-institute.github.io/MLJ.jl/dev/tuning_models/) for tuning model hyper-parameters in various ways. Data transformations, and supervised models are then typically combined into linear [pipelines](https://alan-turing-institute.github.io/MLJ.jl/dev/composing_models/#Linear-pipelines-1). However, a more advanced feature of MLJ not common in other frameworks allows you to combine models in more complicated ways. We give a simple demonstration of that next.\n", "\n", "We start by loading the model code we'll need:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "@load RidgeRegressor pkg=MultivariateStats\n", "@load RandomForestRegressor pkg=DecisionTree;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The next step is to define \"learning network\" - a kind of blueprint for the new composite model type. Later we \"export\" the network as a new stand-alone model type.\n", "\n", "Our learing network will:\n", "\n", "- standarizes the input data\n", "\n", "- learn and apply a Box-Cox transformation to the target variable\n", "\n", "- blend the predictions of two supervised learning models - a ridge regressor and a random forest regressor; we'll blend using a simple average (for a more sophisticated stacking example, see [here](https://alan-turing-institute.github.io/DataScienceTutorials.jl/getting-started/stacking/))\n", "\n", "- apply the *inverse* Box-Cox transformation to this blended prediction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The basic idea is to proceed as if one were composing the various steps \"by hand\", but to wrap the training data in \"source nodes\" first. In place of production data, one typically uses some dummy data, to test the network as it is built. When the learning network is \"exported\" as a new stand-alone model type, it will no longer be bound to any data. You bind the exported model to production data when your're ready to use your new model type (just like you would with any other MLJ model).\n", "\n", "There is no need to `fit!` the machines you create, as this will happen automatically when you *call* the final node in the network (assuming you provide the dummy data).\n", "\n", "*Input layer*" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[34mSource @647\u001b[39m ⏎ `AbstractArray{Continuous,1}`" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# define some synthetic data:\n", "X, y = make_regression(100)\n", "y = abs.(y)\n", "\n", "test, train = partition(eachindex(y), 0.8);\n", "\n", "# wrap as source nodes:\n", "Xs = source(X)\n", "ys = source(y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*First layer and target transformation*" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[34mNode{Machine{UnivariateBoxCoxTransformer}} @033\u001b[39m\n", " args:\n", " 1:\t\u001b[34mSource @647\u001b[39m\n", " transform(\n", " \u001b[0m\u001b[1m\u001b[34mMachine{UnivariateBoxCoxTransformer} @291\u001b[39m\u001b[22m, \n", " \u001b[34mSource @647\u001b[39m)" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ " formula:\n" ] } ], "source": [ "std_model = Standardizer()\n", "stand = machine(std_model, Xs)\n", "W = MLJ.transform(stand, Xs)\n", "\n", "box_model = UnivariateBoxCoxTransformer()\n", "box = machine(box_model, ys)\n", "z = MLJ.transform(box, ys)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Second layer*" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[34mNode{Nothing} @404\u001b[39m\n", " args:\n", " 1:\t\u001b[34mNode{Nothing} @096\u001b[39m\n", " 2:\t\u001b[34mNode{Nothing} @501\u001b[39m\n", " +(\n", " #118(\n", " predict(\n", " \u001b[0m\u001b[1m\u001b[34mMachine{RidgeRegressor} @194\u001b[39m\u001b[22m, \n", " transform(\n", " \u001b[0m\u001b[1m\u001b[34mMachine{Standardizer} @178\u001b[39m\u001b[22m, \n", " \u001b[34mSource @446\u001b[39m))),\n", " #118(\n", " predict(\n", " \u001b[0m\u001b[1m\u001b[34mMachine{RandomForestRegressor} @202\u001b[39m\u001b[22m, \n", " transform(\n", " \u001b[0m\u001b[1m\u001b[34mMachine{Standardizer} @178\u001b[39m\u001b[22m, \n", " \u001b[34mSource @446\u001b[39m))))" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ " formula:\n" ] } ], "source": [ "ridge_model = RidgeRegressor(lambda=0.1)\n", "ridge = machine(ridge_model, W, z)\n", "\n", "forest_model = RandomForestRegressor(n_trees=50)\n", "forest = machine(forest_model, W, z)\n", "\n", "ẑ = 0.5*predict(ridge, W) + 0.5*predict(forest, W)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Output*" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[34mNode{Machine{UnivariateBoxCoxTransformer}} @855\u001b[39m\n", " args:\n", " 1:\t\u001b[34mNode{Nothing} @404\u001b[39m\n", " inverse_transform(\n", " \u001b[0m\u001b[1m\u001b[34mMachine{UnivariateBoxCoxTransformer} @291\u001b[39m\u001b[22m, \n", " +(\n", " #118(\n", " predict(\n", " \u001b[0m\u001b[1m\u001b[34mMachine{RidgeRegressor} @194\u001b[39m\u001b[22m, \n", " transform(\n", " \u001b[0m\u001b[1m\u001b[34mMachine{Standardizer} @178\u001b[39m\u001b[22m, \n", " \u001b[34mSource @446\u001b[39m))),\n", " #118(\n", " predict(\n", " \u001b[0m\u001b[1m\u001b[34mMachine{RandomForestRegressor} @202\u001b[39m\u001b[22m, \n", " transform(\n", " \u001b[0m\u001b[1m\u001b[34mMachine{Standardizer} @178\u001b[39m\u001b[22m, \n", " \u001b[34mSource @446\u001b[39m)))))" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ " formula:\n" ] } ], "source": [ "ŷ = inverse_transform(box, ẑ)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "No fitting has been done thus far, we have just defined a sequence of operations. We can test the netork by fitting the final predction node and then calling it to retrieve the prediction:" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "┌ Info: Training \u001b[34mMachine{UnivariateBoxCoxTransformer} @291\u001b[39m.\n", "└ @ MLJBase /Users/anthony/.julia/packages/MLJBase/2UxSl/src/machines.jl:317\n", "┌ Info: Training \u001b[34mMachine{Standardizer} @178\u001b[39m.\n", "└ @ MLJBase /Users/anthony/.julia/packages/MLJBase/2UxSl/src/machines.jl:317\n", "┌ Info: Training \u001b[34mMachine{RidgeRegressor} @194\u001b[39m.\n", "└ @ MLJBase /Users/anthony/.julia/packages/MLJBase/2UxSl/src/machines.jl:317\n", "┌ Info: Training \u001b[34mMachine{RandomForestRegressor} @202\u001b[39m.\n", "└ @ MLJBase /Users/anthony/.julia/packages/MLJBase/2UxSl/src/machines.jl:317\n" ] }, { "data": { "text/plain": [ "4-element Array{Float64,1}:\n", " 0.6921862297324471\n", " 1.6808322228314643\n", " 1.457825054812906 \n", " 4.189887949048443 " ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fit!(ŷ);\n", "ŷ()[1:4]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To \"export\" the network a new stand-alone model type, we can use a macro:" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [], "source": [ "@from_network machine(Deterministic(), Xs, ys, predict=ŷ) begin\n", " mutable struct CompositeModel\n", " rgs1 = ridge_model\n", " rgs2 = forest_model\n", " end\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's an instance of our new type:" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "CompositeModel(\n", " rgs1 = RidgeRegressor(\n", " lambda = 0.1),\n", " rgs2 = RandomForestRegressor(\n", " max_depth = -1,\n", " min_samples_leaf = 1,\n", " min_samples_split = 2,\n", " min_purity_increase = 0.0,\n", " n_subfeatures = -1,\n", " n_trees = 50,\n", " sampling_fraction = 0.7,\n", " pdf_smoothing = 0.0))\u001b[34m @810\u001b[39m" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "composite = CompositeModel()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since we made our model mutable, we could change the regressors for different ones.\n", "\n", "For now we'll evaluate this model on the famous Boston data set:" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[33mEvaluating over 6 folds: 100%[=========================] Time: 0:00:00\u001b[39m\n" ] }, { "data": { "text/plain": [ "┌\u001b[0m───────────\u001b[0m┬\u001b[0m───────────────\u001b[0m┬\u001b[0m──────────────────────────────────────\u001b[0m┐\u001b[0m\n", "│\u001b[0m\u001b[22m _.measure \u001b[0m│\u001b[0m\u001b[22m _.measurement \u001b[0m│\u001b[0m\u001b[22m _.per_fold \u001b[0m│\u001b[0m\n", "├\u001b[0m───────────\u001b[0m┼\u001b[0m───────────────\u001b[0m┼\u001b[0m──────────────────────────────────────\u001b[0m┤\u001b[0m\n", "│\u001b[0m rms \u001b[0m│\u001b[0m 4.03 \u001b[0m│\u001b[0m [3.72, 2.79, 3.77, 6.18, 3.59, 3.27] \u001b[0m│\u001b[0m\n", "│\u001b[0m mae \u001b[0m│\u001b[0m 2.49 \u001b[0m│\u001b[0m [2.52, 1.96, 2.55, 3.04, 2.54, 2.36] \u001b[0m│\u001b[0m\n", "└\u001b[0m───────────\u001b[0m┴\u001b[0m───────────────\u001b[0m┴\u001b[0m──────────────────────────────────────\u001b[0m┘\u001b[0m\n", "_.per_observation = [missing, missing]\n" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X, y = @load_boston\n", "evaluate(composite, X, y, resampling=CV(nfolds=6, shuffle=true), measures=[rms, mae])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Check out more [Data Science Tutorials in Julia](https://alan-turing-institute.github.io/DataScienceTutorials.jl/)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Julia 1.3.0", "language": "julia", "name": "julia-1.3" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.3.0" } }, "nbformat": 4, "nbformat_minor": 4 }