{ "cells": [ { "cell_type": "markdown", "source": [ "# IRIS\n", "\n", "In this tutorial we will analyze the likelihood of a JPT fit on the IRIS dataset.\n", "We will investigate the hyperparameters and their effects on parameter count and quality of JPTs.\n", "Similar to the MNIST example we first have to join feature and targets." ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true, "ExecuteTime": { "start_time": "2023-04-13T15:46:09.777022Z", "end_time": "2023-04-13T15:46:09.791926Z" } }, "outputs": [], "source": [ "import sklearn.datasets\n", "import pandas as pd\n", "\n", "dataset = sklearn.datasets.load_iris()\n", "df = pd.DataFrame(columns=dataset.feature_names, data=dataset.data)\n", "\n", "target = dataset.target.astype(object)\n", "for idx, target_name in enumerate(dataset.target_names):\n", " target[target == idx] = target_name\n", "\n", "df[\"plant\"] = target\n" ] }, { "cell_type": "markdown", "source": [ "Next we define the variables and model." ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 8, "outputs": [ { "data": { "text/plain": "JPT\n\n >\n \n \n >\n >\n >\n\nJPT stats: #innernodes = 3, #leaves = 4 (7 total)" }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import jpt.variables\n", "import jpt.trees\n", "\n", "variables = jpt.variables.infer_from_dataframe(df)\n", "\n", "model = jpt.trees.JPT(variables, min_samples_leaf=30)\n", "\n", "model.fit(df)" ], "metadata": { "collapsed": false, "ExecuteTime": { "start_time": "2023-04-13T15:46:09.780258Z", "end_time": "2023-04-13T15:46:09.832558Z" } } }, { "cell_type": "markdown", "source": [ "Let's have a look at the log likelihood." ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 9, "outputs": [ { "data": { "text/plain": "-348.57025395213486" }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "\n", "likelihood = model.likelihood(df)\n", "log_likelihood = np.sum(np.log(likelihood))\n", "log_likelihood" ], "metadata": { "collapsed": false, "ExecuteTime": { "start_time": "2023-04-13T15:46:09.832333Z", "end_time": "2023-04-13T15:46:09.832889Z" } } }, { "cell_type": "markdown", "source": [ "Seems okay. Let's get a feeling for the likelihood with respect to the minimal samples per leaf." ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 10, "outputs": [ { "data": { "text/plain": "" }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": "
", "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "log_likelihoods = np.zeros(50)\n", "number_of_parameters = np.zeros(50)\n", "\n", "for i in range(1,51):\n", " model = jpt.trees.JPT(variables, min_samples_leaf=i)\n", " model.fit(df)\n", " likelihood = model.likelihood(df)\n", " log_likelihoods[i-1] = np.sum(np.log(likelihood))\n", " number_of_parameters[i-1] = model.number_of_parameters()\n", "\n", "plt.plot(range(1,51), log_likelihoods, label='log likelihoods')\n", "plt.plot(range(1,51), number_of_parameters, label='# Parameters')\n", "plt.legend()" ], "metadata": { "collapsed": false, "ExecuteTime": { "start_time": "2023-04-13T15:46:09.832430Z", "end_time": "2023-04-13T15:46:10.459407Z" } } }, { "cell_type": "markdown", "source": [ "In this plot we can observe multiple things. First of all, the more parameters we have, the more likelihood we get. Second, fewer samples per leaf produces more parameters which is also intuitive.\n", "The spike that occurs when having few samples per leaf is explainable by the dirac delta. JPTs are able to use the dirac impulse as distribution when there is no uncertainty left in a leaf. The dirac impulse produces an infinite density. These densities are then scaled down, such that the likelihood remains measurable and comparable.\n", "We can try to scale down that scaling." ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 11, "outputs": [ { "data": { "text/plain": "" }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": "
", "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "log_likelihoods = np.zeros(50)\n", "number_of_parameters = np.zeros(50)\n", "\n", "for i in range(1,51):\n", " model = jpt.trees.JPT(variables, min_samples_leaf=i)\n", " model.fit(df)\n", " likelihood = model.likelihood(df, dirac_scaling=1.)\n", " log_likelihoods[i-1] = np.sum(np.log(likelihood))\n", " number_of_parameters[i-1] = model.number_of_parameters()\n", "\n", "plt.plot(range(1,51), log_likelihoods, label='log likelihoods')\n", "plt.plot(range(1,51), number_of_parameters, label='# Parameters')\n", "plt.legend()" ], "metadata": { "collapsed": false, "ExecuteTime": { "start_time": "2023-04-13T15:46:10.463662Z", "end_time": "2023-04-13T15:46:11.080315Z" } } }, { "cell_type": "markdown", "source": [ "With the dirac_scaling keyword we can get a feeling for how many dirac impulses are represented in our model. Let's experiment with the min_impurity improvement parameter." ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 12, "outputs": [ { "data": { "text/plain": "" }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": "
", "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "log_likelihoods = np.zeros(50)\n", "number_of_parameters = np.zeros(50)\n", "\n", "for i in range(1,51):\n", " model = jpt.trees.JPT(variables, min_impurity_improvement=i*0.1)\n", " model.fit(df)\n", " likelihood = model.likelihood(df, dirac_scaling=1.)\n", " log_likelihoods[i-1] = np.sum(np.log(likelihood))\n", " number_of_parameters[i-1] = model.number_of_parameters()\n", "\n", "plt.plot(range(1,51), log_likelihoods, label='log likelihoods')\n", "plt.plot(range(1,51), number_of_parameters, label='# Parameters')\n", "plt.legend()" ], "metadata": { "collapsed": false, "ExecuteTime": { "start_time": "2023-04-13T15:46:11.084350Z", "end_time": "2023-04-13T15:46:11.591275Z" } } }, { "cell_type": "markdown", "source": [ "This time we constrained the tree to only add new parameters when they improve the information gain significantly by at least min_impurity_improvement. The relations between the parameter count and likelihood remain the same. These two hyperparameters are influencing the training process the most." ], "metadata": { "collapsed": false } } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 0 }