{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Quantile MLPRegressor\n", "\n", "[scikit-learn](http://scikit-learn.org/stable/) does not have a quantile regression for multi-layer perceptron. [mlinsights](http://www.xavierdupre.fr/app/mlinsights/helpsphinx/index.html) implements a version of it based on the *scikit-learn* model. The implementation overwrites method ``_backprop``."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": ["import warnings\n", "warnings.simplefilter(\"ignore\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["We generate some dummy data."]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": ["import numpy\n", "X = numpy.random.random(1000)\n", "eps1 = (numpy.random.random(900) - 0.5) * 0.1\n", "eps2 = (numpy.random.random(100)) * 10\n", "eps = numpy.hstack([eps1, eps2])\n", "X = X.reshape((1000, 1))\n", "Y = X.ravel() * 3.4 + 5.6 + eps"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [{"data": {"text/plain": ["MLPRegressor(activation='tanh', hidden_layer_sizes=(30,))"]}, "execution_count": 5, "metadata": {}, "output_type": "execute_result"}], "source": ["from sklearn.neural_network import MLPRegressor\n", "clr = MLPRegressor(hidden_layer_sizes=(30,), activation='tanh')\n", "clr.fit(X, Y)"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [{"data": {"text/plain": ["QuantileMLPRegressor(activation='tanh', hidden_layer_sizes=(30,))"]}, "execution_count": 6, "metadata": {}, "output_type": "execute_result"}], "source": ["from mlinsights.mlmodel import QuantileMLPRegressor\n", "clq = QuantileMLPRegressor(hidden_layer_sizes=(30,), activation='tanh')\n", "clq.fit(X, Y)"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
XYclrclq
00.2517346.4706347.0597806.481283
10.5380657.4236948.0299747.510084
20.5305107.4111818.0064147.485186
30.0483485.8080516.2785725.646920
40.8821628.6244568.9867418.519049
\n", "
"], "text/plain": [" X Y clr clq\n", "0 0.251734 6.470634 7.059780 6.481283\n", "1 0.538065 7.423694 8.029974 7.510084\n", "2 0.530510 7.411181 8.006414 7.485186\n", "3 0.048348 5.808051 6.278572 5.646920\n", "4 0.882162 8.624456 8.986741 8.519049"]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["from pandas import DataFrame\n", "data= dict(X=X.ravel(), Y=Y, clr=clr.predict(X), clq=clq.predict(X))\n", "df = DataFrame(data)\n", "df.head()"]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["import matplotlib.pyplot as plt\n", "fig, ax = plt.subplots(1, 1, figsize=(10, 4))\n", "choice = numpy.random.choice(X.shape[0]-1, size=100)\n", "xx = X.ravel()[choice]\n", "yy = Y[choice]\n", "ax.plot(xx, yy, '.', label=\"data\")\n", "xx = numpy.array([[0], [1]])\n", "y1 = clr.predict(xx)\n", "y2 = clq.predict(xx)\n", "ax.plot(xx, y1, \"--\", label=\"L2\")\n", "ax.plot(xx, y2, \"--\", label=\"L1\")\n", "ax.set_title(\"Quantile (L1) vs Square (L2) for MLPRegressor\")\n", "ax.legend();"]}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.5"}}, "nbformat": 4, "nbformat_minor": 2}