{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Base d'apprentissage et de test\n", "\n", "Le mod\u00e8le est estim\u00e9 sur une base d'apprentissage et \u00e9valu\u00e9 sur une base de test."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": ["from papierstat.datasets import load_wines_dataset\n", "df = load_wines_dataset()\n", "X = df.drop(['quality', 'color'], axis=1)\n", "y = df['quality']"]}, {"cell_type": "markdown", "metadata": {}, "source": ["On divise en base d'apprentissage et de test avec la fonction [train_test_split](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html)."]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": ["from sklearn.model_selection import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(X, y)"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [{"data": {"text/plain": ["KNeighborsRegressor(algorithm='auto', leaf_size=30, metric='minkowski',\n", " metric_params=None, n_jobs=1, n_neighbors=1, p=2,\n", " weights='uniform')"]}, "execution_count": 5, "metadata": {}, "output_type": "execute_result"}], "source": ["from sklearn.neighbors import KNeighborsRegressor\n", "knn = KNeighborsRegressor(n_neighbors=1)\n", "knn.fit(X_train, y_train)"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": ["prediction = knn.predict(X_test)"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", "\n", "
\n", " \n", " \n", " | \n", " expected | \n", " prediction | \n", "
\n", " \n", " \n", " \n", " 2647 | \n", " 5 | \n", " 5.0 | \n", "
\n", " \n", " 920 | \n", " 5 | \n", " 5.0 | \n", "
\n", " \n", " 4360 | \n", " 5 | \n", " 6.0 | \n", "
\n", " \n", " 6435 | \n", " 5 | \n", " 5.0 | \n", "
\n", " \n", " 5436 | \n", " 6 | \n", " 6.0 | \n", "
\n", " \n", "
\n", "
"], "text/plain": [" expected prediction\n", "2647 5 5.0\n", "920 5 5.0\n", "4360 5 6.0\n", "6435 5 5.0\n", "5436 6 6.0"]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["import pandas\n", "res = pandas.DataFrame(dict(expected=y_test, prediction=prediction))\n", "res.head()"]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["from seaborn import jointplot\n", "ax = jointplot(\"expected\", \"prediction\", res, kind=\"kde\", size=4)\n", "ax.ax_marg_y.set_title('Distribution valeurs attendues\\nvaleurs pr\u00e9dites');"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Le r\u00e9sultat para\u00eet acceptable. On enl\u00e8ve les r\u00e9ponses correctes."]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [{"data": {"image/png": "iVBORw0KGgoAAAANSUhEUgAAAQ8AAAFDCAYAAAAktYspAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJztnXd4HNX1v9+jLtmWbLmquBe5F1woNtUUY7Apodj0Dkm+tCSUECCEwI+QRiA00wlgOoQamsE27g3b4N5kW66S5SLZVj+/P2ZWrNbbtNrVzkr3fZ59tDtz594zo53P3nvnnnNEVTEYDIb6EhdtAwwGQ2xixMNgMISEEQ+DwRASRjwMBkNIGPEwGAwhYcTDYDCERMyKh4g8KyL3hamuLiJSKiLx9ufpInJdOOq26/ufiFwZrvrCgYioiPSKth1OQkS62dclIdq2xAKOFA8RyReRwyJSIiL7RGSOiNwkIrX2qupNqvrnIOs61V8ZVd2iqi1VtToMtj8gIq971H+mqr7a0LqbG57/O3NzOwtHiofNBFVtBXQF/gLcBbwY7kbMFzG8uHpvhmaAqjruBeQDp3psGwXUAAPtz68AD9nv2wGfAvuAYuB7LGF8zT7mMFAK3Al0AxS4FtgCzHTblmDXNx14BFgA7Ac+AjLtfScBBd7sBcYBFUCl3d4yt/qus9/HAfcCm4HdwH+ADHufy44rbduKgD/4uEbHADuBeLdt5wHL3a7XXPua7ACeBJLcyirQy36fDPzdbnMX8CyQau+7Cpjl0bb7sa8AzwCfAwft6zAeWAmUANuA3/k4h57At8Ae+1zfAFrb+7z977bYbZfar2PtstcAq4C9wJdAVw9bbwLW2fufAsTeF2+fdxGwEfi1x/cgH7fvIfAA8LrH/2COfY2XASe57bvKrrME2ARcGu37Kuz3abQN8PGlqvNPc9u+Bfil25fWJR6P2F/4RPt1vNsXxPML0M3+gvwHaAGk4l08tgED7TLvu740+BEPb18wt/pc4nENsB7oAbQEPgBe87DteduuIUA50M/HddoAnOb2+V3gbvv9cPvLnWDXuwq4zeOmcgnAv4CPgUygFfAJ8IjbTRBIPPYDo7GEMQVLrI6397cBjvJhfy/gNCzxao8l5P/y9T3w/D/Z2861r2c/+1zvBeZ42Pop0BroAhQC4+x9NwGrgc72uX9HkOIB5GCJ3nj7vE+zP7fH+s4cAPLsslnAgGjfV+F+OXnY4o3tWP9kTyqx/kFdVbVSVb9X+7/mhwdU9aCqHvax/zVV/UlVDwL3AReFqUt+KfBPVd2oqqXA74FJHsOnP6nqYVVdhvWLNsRHXW8CkwFEpBXWF/lNAFVdrKrzVLVKVfOBKcCJnhWIiADXA7erarGqlgD/D5hUj3P6SFVnq2qNqpZh/T/6i0i6qu5V1SXeDlLV9ar6taqWq2oh8E9vNgbgRiyhW6WqVbbtQ0Wkq1uZv6jqPlXdgiUQQ+3tF2GJ1VZVLcb6EQqWy4DPVfVz+7y/BhZh/Q/A7iWLSKqq7lDVFfU8L8cTa+KRgzUs8eRvWL8+X4nIRhG5O4i6ttZj/2asHk27oKz0T7Zdn3vdCUBHt2073d4fwuqheGMqcL6IJAPnA0tUdTOAiPQRkU9FZKeIHMC6qbzZ3x5IAxbbk9P7gC/s7cHieS1/gXUTbRaRGSJyrLeDRKSDiLwlIttsG1/3YaM/ugKPu9leDAjWd8WFr+uZzZH/5/q0e6GrXbvtMUCW/YNzMVbPZoeIfCYifet1VjFAzIiHiIzE+kLM8tynqiWq+ltV7QFMAH4jImNdu31UGahn0tntfResX9MirHF9mptd8dS90QLVux3ri+dedxXWXEO9UNWVWF/4M4FLsMTExTNYXfLeqpoO3IN1U3lShDWvMEBVW9uvDFV13WCe59vJmykedi1U1XOADsB/gXd8nMIj9rGDbRsv87DR81p6u7ZbgRvdbG+tqqmqOsdHm+7s4Mj/szt1zh1wP/etWL1T93ZbqOpfAFT1S1U9DatHvBprKNqkcLx4iEi6iJwNvIU13vzRS5mzRaSX3QU/AFTbL7Buyh4hNH2ZiPQXkTTgQeA9tR7lrgVSROQsEUnEGmMnux23C+jm/ljZgzeB20Wku4i0xOoRvG13uUNhKnALcALWnIeLVljXotT+1fult4NVtQbri/2YiHQAEJEcETnDLrIMGCAiQ0UkBWvc7xMRSRKRS0UkQ1Ur+fn/4Y1WWBOf+0QkB7jDY7/n/64Qazjgvu1Z4PciMsBuP0NELvRnoxvvALeISK6ItAE8e6xLsYaUiSIyArjAbd/rwAQROUNE4kUkRUROsuvqKCITRaQF1pxVqZ9rELM4WTw+EZESLIX/A9Z4+GofZXsD32D9k+YCT6vqdHvfI8C9dtfyd/Vo/zWsycCdWJOAtwCo6n7gV8ALWJOqB4ECt+NcN/AeEfE21n/Jrnsm1ix8GXBzPezy5E2sSdxvVbXIbfvvsHojJVji8LafOu7CGvbNs4cP3wB5AKq6Fks8v8F6YnFEz88LlwP5dl03YfUovPEn4CisCdfPsCaP3anzv1PVQ8DDwGx72zGq+iHwKPCW3d5PWD2xYHge6+nMMmCJl/bvw3oitNe2tbZnp6pbgXOwenSFWN/TO7DuqTjgt1i9zGKseZxfBWlTzOB6ImEwGAz1wsk9D4PB4GCMeBgMhpAw4mEwGELCiIfBYAgJIx5Rwn6sVxC4pHMRkfYislREhvspc5WIzHL7XCoioTw6NzgM41FqCAl7jcurwK9UdXGwx7ktPkNEXsHyE7o3/BYaIo0RjyaGiCQ0YMFZ0HXbC8DGBzjE0IQxw5YGICJ3i8h7HtseF5En7PdXi8gqO6jRRhG50U9d2SLyvogUisgmEbnFbd8rIvKQ2+c6Qx47aM5dIrIcOCgiCfbnbXbba9yW63u2+4pYUdm+tsvOcHcqEyv4zq9FZB3WIjFEpK9dvtiu+yK38m1F5GMROSAiC7AWWeFRXy8RuQHLSfBOeyjzSRDXYZSILLLr3iUi//R1PQ2NQLTdemP5heWjcghItz/HY/lLHGN/Pgvr5hGsVYaHsN3TcXPtxxLxxcD9QBLW8uuNwBn2/lewww94Hmt/zsdaSt0Zy5U/D2vFY7a9vxvQ08c5vIK1CvUErGX2j+Pmgo/lT/I1ljdzKpa7+Vas1b4JWCtEi7BdzrHcCN6xyw3EWoXrWV8vH+cV6DrMBS6337d0XWfzis7L9DwagFoerEuwYkoAnAIcUtV59v7PVHWDWswAvsKKNeLJSKC9qj6oqhWquhFr6XR93OKfUMu1/DCWH0Uyllt8oqrmq+oGP8d+pqozVbUcyxXgWBFxdxh7RC13/cPA2UC+qr6slrv/Eqx4JxeI5ST4C+B+tcId/IQ1LxIsga5DJdBLRNqpaqnrOhuigxGPhjMVO6YGHp6tInKmiMyzu/f7sOYIvLmcdwWypa579z3UddMPRK1ruaquB27DcmLbLZbbe3aQx5Zi+WNke9tv23q0h62XYnmctsfqjTTEzd3fdbgW6AOsFpGFYjlMGqKEmTBtOO8C/xCRXKwwgMcCiBVj433gCqxgOZUi8l+8u8VvBTapam8fbfhzDXfh6RY/FZgqIulYgYAexXJY80ZtL0MsT99MLKcub3VvBWao5W5eB7vnUWXXt9re7Onm7tNmAlwHVV0HTBbLY/l84D0RaatW/AxDI2N6Hg1ErQhY04GXsb74q+xdSVhDh0KgSkTOBE73Uc0C4IA9yZlqu3gPFCuGCVjzGeNFJFOseBq3+bNJRPJE5BRbwMqw4nX4cwkfLyJjRCQJ+DMwXy2vUW98CvQRkcvFclVPFJGRItJPrZAFHwAPiEiaiPTHisfqC0+Xe7/XQUQuE5H2aoUR2Gcf0+Rc3WMFIx7hYSpW4F93l+0SLDf+d7Bcui/BihN6BPZNNwErPN4mrAnIF4AMu8hrWG7j+VjzJv7c68ESrb/Y9ezECspzTwD7/4g1XBmONQzxin1ep2PNQ2y363+Un2Oa/B/WZOZOrAnRl/20+yLWvMw+EflvENdhHLBCREqxJnYnqRX20BAFjEt+M8cs1DKEiul5GAyGkDDiYTAYQsIMWwwGQ0iYnofBYAgJIx71RKKQbFlEeovIchHp3lhtGgyBMOLhcEQkA2uJ9gWquina9jRVPJ0PDYExK0wdiNR1fd+P5QhncEO8hB7wts0QQaLtmRfKCyvPyDYsb9A1wFh7ezCZ4X1lTO8FzMDKIVKElYjJW9vdqJsMOQNrsdMO26aHsDPXh1DntVjJvGfa2/1lYZ+OlddkgV3/R0Cm2/6JwAr72Om4JcvGWmz2O2C5fezbQIq9rx3WKlJX6sbvgTh7XzbWkvtCrEVct7jVOQorV+sBrJWj//Tz/zsHa9XsAaxk3ePc6v/Ybnc9cL3bMQ8A72ElWzoAXOdjWxxW8qYNWImn3/G4LmPcrulWrETeN2A53VVg5f75JJzn21RfUTeg3gb7cTcnuMzwvjKmv4nlUerK9D7GR/vdqCse/8XyHWmBtZJzAVb6w1Dq/I9dTyp+srDbx0zHEquB9jHv83MG9z5Y/jCnYeXYvdO+GZPs/fm2ndlYfiyrgJvsfY9gZWFLtF/HY/njhMVd3r7p9tu2xdnn2dfeNwN42r5WQ+3/j+uH4QGsG/xc+7hUH9tuA+YBuVirXqcAb9p1dMH6wZlsn1tbYKi97xVMeIAmLx69gN1Yy8ETA5S9DfjQ7bO638BYv0p32+//AzwH5Aaos5tdjys5dTmQ6rZ/MvBdiHX2cNt2F1YuVPdyXwJX2u+nY2V/d+3rj/XLGY+V6ewdt31xWEJzkv05H7jMbf9fgWft9w9i9WJ6ebR9NLDFY9vvgZft9zOxsqq1C3CuU4DHvGzvjOWn0spt2yPAK/b7B7B7ZG77vW1bhS049ucsLIFJsO390IddnuIRlvNtyq+YmzBVP+7mElxmeF8Z0+/E+oVdICIrROSaIMzpivULtsPNhXwKVg8klDo9Xd+9ZmH3UX6zbUs7rB5FrSu8Wo5kWwkuc/zfsHopX4kV/cyVvzVc7vKdsYYUnmQDxWr5zrifk7vN3pz1PLd1BT50s3EVlih19NO2N0x4gADE5ISp+nY3fwb4AZisqiUicht1kxP7q3MncD2AiIwBvhGRmbZY+WIrVs+jnXqZqAuhTk/X99dU9Xo/7XtmeK/EmlvZDgxy7RARsctu81OXy+YSrDyrvxUrefR3IrKQ8LnLb8UjNKHNdiBTRFq5CUgXD5u9rWj05tZ/jarO9iwoIluxhk1eT8FLPeE43yZLzPU8AribB5UZ3ke9F9oxOcCaTFUCuHur6g4sL9d/iEi6iMSJSE8ROTHUOt3wmYXdrcxlItJfRNKwhhvvqeWZ+g5wloiMFSvK+W+xRG5OENfhbLFijAo/Z7ivJnzu8i8CV9u2xYlIjoj0VSsEwBzgEftcB2P9ur8R5PVy8SzwsNhxWMVKD3GOve8N4FQRuUisOK9tRWSovc+EB6gnMSce+Hc3r09meE9GAvNtd++PgVs1uHUVV2BNqK3EEoj3+HloEWqdqP8s7C5ewxqr78SaZLzFPnYNVmb6f2NdpwnABFWtCKLp3sA3WE8d5gJPq+p0DZO7vKouwIp/+hjWxOkMrCECWPNF3bB6IR8Cf1TVr4Ow2Z3Hsa71VyJSgjV5erTd9hasCejfYj3RWQoMsY8z4QHqifFtiVFEZDrW05UXom2LoXkSiz0Pg8HgAIx4GAyGkDDDFoPBEBKm52EwGELCiIfBYAgJpy0SM2OoRqKmRlm8ZS/llTUMyE6nTYukaJvU3PCWvyemcJp4GBqBg+VV3P72Ur5auQuAdi2TePHKkQzp3DrKlhliCTNsaWbU1CjXvbqIb1btYvKoLtw1Lo84ES5+bi5rdpYErsBgsDHi0cx4c+EW5m7cwzVjujNxSDZDO7fhgYkDSIyP454PfqSmxowcDcFhxKMZsbukjEc+X82A7HROyetQu71NWhKXHt2VxVv28ubCLVG00BBLGPFoRrw4axOHKqq4dnR3LL+3nzmhdzv6dmrF49+so7yqWfl3GULEiEcz4UBZJW/M28LR3duS1Tr1iP0iwnnDcthdUs6HSwJ67hsMRjyaC1Pnb6G0vIoJQ7J9lhmUk0GPdi14ZsYGqs3chyEARjwcSE2N8vGy7Zz/9Bwm/HsWD326kpKyypDrK6+q5sVZmxiYk0H3di18lhMRJg7JZvOeQ0xbtSvk9gzNAyMeDkNVuefDH7nlzR/YeeAwNaq8NHsT5z41m/yi0IJUfbhkG4Ul5UwYnBWw7IhumbRrmcQrc/JDasvQfDDi4TD+9uUa3lq4lYlDsvnbBUO496z+/GF8P3aXlHPlywvYf7h+PZCaGmXKzI10a5vGoJyMgOXj44RT+3VkzoY9Zt2HwS9GPBzEwvxinp6+gZPzOjBpZGfi7Cci/bMz+O1peRTsPcztby+lPp7QX63cxaaig0wckn3EExZfnNy3A0nxcbw6Nz+EszA0F4x4OISyymruem85HVolc8WxXY+40fM6teKyo7vy7erdvLnAWxDxI1FVnp2xgQ6tkhnVvW3QtqSnJDK6V1s+WFLA/kOhz7UYmjZGPBzCK3Py2Vh0kGvHdCclMd5rmTMGdGRgTjoPf76SbfsOB6xzwaZilm7dx1mDs4iPq58f1hkDOlFWWcPbi8yiMYN3jHg4gP2HKnn6u/UM69yawbm+ndNEhBuO70F1jXL3+8v9Dl9UlSemrSM9NYGT+nTwWc4XXdu2oF9WK/4zZ7N5bGvwihEPB/DszA2UlFVx8cjOAcu2b5XC5JFd+H5dEe8uKvBZbvraQmZv2MO5Q3NISgjt33zmgCwK9h3m0+Xb63VcVXUN7y7ayi1v/sClL8zjsa/XsrX4UEg2GJyLEY8os+tAGS/P2sRxvdrRta3vNRjunNq/I/2zWvHgpyvZ5OXxbWV1DY98vopO6cmc1q+jlxqCY3i3NnTOTOWJaeuC7n1sKCxl3OPfc8d7y5mzoYhtew/zxLR1nP7YTD5Y4lvsDLGHEY8o8/i0dVTVKBcNzw1c2CZOhJtO7IUIXP+fRZSW101W9/8+X8XaXaVccnRXEuJD/xfHiXDe0Fw2FB4Mqvfxw5a9/OKZORSWlPObU/vwxKRhPHL+YJ6YPIzu7dL4zTvLeH7mxpDtMTgLIx5RZGNhKW8v2MrYfh3pkJ5Sr2Pbt0rmllN6s7GwlIunzGXLnkNUVNXw72nreHl2PuMHdmJkt8wG23h090y6tk3j4c9W+V1j8t2a3Ux+fh7JCXH8aeIARnbPrH1i1K5lMveM78/R3TN5+PNVvL/Y9ECaAk6Lnu4oYyLNr6cuYdqqXTx20VBap4UWBnDJlr08PX09B8urSUmMo6yyhqO7Z3LzKb3r/YTFFxsKS7n/o5+4cHhnHr1g8BH7319cwF3vLye3TSp3jevr81wqq2t49IvVrN1Vwge/HM2g3MCL1powMR+G0IhHlPixYD8TnpzF+UflcOHwwBOl/igsKWPuhj0UHaxgeJc2EQknOHX+Zj5ZvoNbxvbm9lN7IyJUVNXwxLR1PPndegZkp/Ob0/qQluQ/suWBskru+eBHUpPi+ezm48lISwy7rTGCEY8w4yhjIoWqMum5eazacYDHLh4a8IZzAjU1ynPfb2TG2kKGdm5N/+x0Zq0rYkvxIU7s055rx3QnMcj5lXW7SvjTpys5Ka89z18+grgw9ZBijJg/aTPnEQXeXVzA/E3FXDSyc0wIB0BcnHDDCT244tiu7DtUwX9/2EarlATuOD2Pm07sGbRwAPTu2IrLju7CtFW7ee57M4Eaq5ieRyOz+0AZpz02k6yMFO47u3+t/0pzQ1V54tt1LNy0lzeuP5pjegS/fL6JEPP/eNPzaEQqqmr45etLKK+q5roxPZqtcIC1Wvb643vQMT2Zm6f+ENRye4OzMOLRSFRU1fC7d5exeMtebjyhJzltjgwF2NxIS0rgtlP7cLCiiitenM/egxXRNslQD8ywpZ6oKhuLDrK8YB/b95VRVllNq5QEumRaviCd26QdMQG4blcJ9/73J+ZvKmbyyM5MHJoTJeudyaodB3jkf6vo2rYFL105ki5t06JtUmMQ891OIx5BUlhSzuvzNvPhD9vY4uanIdQ1OjUpnryOrejWNo3E+Dg2FJbyw5Z9JCfGcc3o7hzfu32j2x4LrNy+n8e+WUd8nPC7M/KYNLLzEZOwqsqO/WWs2VXC+l2l7DlYQXVNDRmpiXRv15IhnTPIbRMzwmPEI8w4yhiwFki98P1G3l+8jcrqGgbmZDCqeyZ5HVvRMT2FxHjhcGU12/eVsbX4EFvsV1FpOVU1SodWyfTPSueMgZ1IT2m2axqCYsf+w7zw/UZW7ighPSWBUd3b0r5VEocrqinYd5i1O0s4UPbzUvyEOCEuzlpv4mJAdjpnDuzEWYOz/cZrdQBGPMKMI4ypqVFmrS/iP3Pz+WbVbhLjhRN6t2f8oCyyvaQtMIQPVWVZwT7mbSxmQ2EppWVVJCXE0aZFEp3bpNI5M40ubdLIzUyjRVJ87WK1bfsOs2L7fhZsKmbd7lIARnZrw8UjuzB+UCcnPhI34hFmomaMqrJudylf/rSTtxdtpWDvYVqlJHBav46cPqATGamm1xAr7CktZ/b6IqavLWTH/jJaJMczcUg2p/XvyLE92pGa5D3YUiNjxCPM1NuYmhqlorqG8qoaKqpqKK+qtv9anyuqayivrKGiutr+W0NVtVJeVUNRaTk7D5Sxbe9hftq2nz32bP/A7HRO7tuBkd0y67X4yeAsVJU1O0v4ds1uFmwqpryqhqSEOEZ2bUPfrHR6dWhJ93YtaJOWREZqIi1TEkiIE+LjhHiRSK98NeIRTiY/N0+ra5SqmhqqFaqra6hWpapaa//+LAjVVFTXUFndMPszUhPJbJFEl8w0+nRsxZDcDNq2TA7TGRmcQkVVDat3HmBZwX5W7TjA9n2HKXebK/FFQpwQJ5agxMVRKyruf933xdviE+ftvdjl4oQ3rjvGiEc4EZEvgHbRtqOetAOKom1EAzD2R4ciVR0XbSMagqPEIxYRkUWqOiLadoSKsd8QKmZAbzAYQsKIh8FgCAkjHg3nuWgb0ECM/YaQMHMeBoMhJEzPw2AwhISj1uyOPe0Mfeejz6NthsEQcdqmxXtd55HaY7ju+GluyAGxw0RQa1Ac1fPYs2dPtE0wGKJKzeEDxMpMgqPEw2AwOMQ7NAiMeBgMDqMmRroeRjwMBocRI9rhrAnTYKiuqmTv7u1UVZRjHjMbnIyIkJCUTJsO2cQnBB/SQWNk4BJz4rF393Zap6eTmflzLlSDwYmoKsXFe9i7ezvtsrvW47gIGhVGYm7YUlVRboTDEBOICJmZbamqKK/XcUY8IoSqGuEwxAwiUu/hdawMW2JOPAyNy5dffMGA/n3pm9ebvz76F69lysvLuWTyJPrm9ea4Y48hPz8fgG++/ppRo0YwdOhgRo0awXffflt7zFtvvcnQoYMZNmwIZ40/k6Kixg/Joarcdtst9M3rzbBhQ1iyZInf8uedew5Dhwyqs+3JJ//NgP59GTJ4IHffdWdY7KqJDe0w4uEUqqqqAhcKgerq6gYde8st/8cnn37O8h9X8Nbbb7Fy5cojyr300ou0btOa1WvWcettt3HP7+8GoG27dvz3vx+zdOlyXnrpFa666grAOtff3H4b33zzLT/8sIxBgwbx9FNPhmxnqHzxv/+xft16Vq1eyzPPTOH/fv0rn2U//PADWrZsWWfb9O++45OPP2bJD8tYtvwnfvPb34XFrlh5EGDEo57k5+czcEA/rr76KoYNG8LFF13IoUNWHpfFixdzysknMWrUCMafOY4dO3YA8MILz3PMMaM46qihXHThBbXlr7nman73299w6thT+P3ddzFzxgyGDx/G8OHDGDHiKEpKSlBV7rrzDoYOGcTQoYN55523AZgxfTpjTzmZiy+6kIED+nH55ZfVful69ezOQ39+kBNPOJ733ns35HNdsGABPXv2okePHiQlJXHxRRfzyccfHVHuk48/5vLLrwTgF7+4gG+/nYaqMmzYMLKzswEYMGAAZWVllJdbT8lUlYMHD6KqHCg5QJZdbsqUZ5ky5dkj2nj11Vc4/7xzOWv8mQzo35c/P/inkM/LxceffMRll1+OiHDMMcewf/++2v+ZO6Wlpfzrscf4/T1/qLN9ypRnufPOu0hOtsJWdujQocE2ATEzLI+5py1OYM2aNUx57gVGjx7Nddddw7PPPM3Nt9zKbbfewgcf/pf27dvzzjtvc999f+CFF17ivPPO57rrrgfg/vvu5aWXXuT//u9mANatW8eXX31NfHw8554zkSeeeJLRo0dTWlpKSkoKH374AcuWLWPxkqUUFRVx7DGjOP74EwBYuvQHli3/iezsbE44fgyzZ89mzJgxAKSkpDBj5vdH2D516hv84x9/P2J7r569ePudukKzffs2cjvn1n7Oyc1lwYL5Rxy7ffs2OnfuDEBCQgIZGRns2bOHdu1+jij5wQfvM3TosNob7cmnnmbY0MG0aNGCXr168+9/PwXAjTfe5PO6L1y4gKXLfiQtLY1jjxnFmePPYsSIukHELpk8iTVr1xxx7G233c7ll19R1+5t28nN7fzz+eXksm3bNrKysuqU++P993H7b35DWlrdhFJr161l1qzvue++e0lJSeHRv/6NkSNH+rS/qRFR8RCRW4HrsRxtnlfVf0Wyvcaic+fOjB49GoBLL7mMJ5/8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\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["ax = jointplot(\"expected\", \"prediction\", res[res['expected'] != res['prediction']], kind=\"kde\", size=4)\n", "ax.ax_marg_x.set_title('Distribution valeurs attendues\\nvaleurs pr\u00e9dites\\n' +\n", " 'sans les r\u00e9ponses correctes');"]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": ["res['diff'] = res['prediction'] - res[\"expected\"]"]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["ax = res['diff'].hist(bins=15, figsize=(3,3))\n", "ax.set_title(\"R\u00e9partition des diff\u00e9rences\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Si on fait la moyenne des erreurs en valeur absolue :"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.5661538461538461"]}, "execution_count": 12, "metadata": {}, "output_type": "execute_result"}], "source": ["import numpy\n", "numpy.abs(res['diff']).mean()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Le mod\u00e8le se trompe en moyenne d'un demi point. Le module *scikit-learn* propose de nombreuses [m\u00e9triques](http://scikit-learn.org/stable/modules/classes.html#sklearn-metrics-metrics) pour \u00e9valuer les r\u00e9sultats. On s'int\u00e9resse plus particuli\u00e8rement \u00e0 celle de la [r\u00e9gression](http://scikit-learn.org/stable/modules/classes.html#regression-metrics). Celle qu'on a utilis\u00e9e s'appelle [mean_absolute_error](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_absolute_error.html#sklearn.metrics.mean_absolute_error)."]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.5661538461538461"]}, "execution_count": 13, "metadata": {}, "output_type": "execute_result"}], "source": ["from sklearn.metrics import mean_absolute_error\n", "mean_absolute_error(y_test, prediction)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Un autre indicateur tr\u00e8s utilis\u00e9 : [R2](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.r2_score.html#sklearn.metrics.r2_score)."]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [{"data": {"text/plain": ["-0.05471047787566907"]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["from sklearn.metrics import r2_score\n", "r2_score(y_test, prediction)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Une valeur n\u00e9gative implique que le mod\u00e8le fait moins bien que si la pr\u00e9diction \u00e9tait constante et \u00e9gale \u00e0 la moyenne des notes sur la base de test. Essayons."]}, {"cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.0"]}, "execution_count": 15, "metadata": {}, "output_type": "execute_result"}], "source": ["const = numpy.mean(y_test) * numpy.ones(y_test.shape[0])\n", "r2_score(y_test, const)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Pour \u00eatre rigoureux, il faudrait prendre la moyenne des notes sur la base d'apprentissage, celles des vins connus."]}, {"cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [{"data": {"text/plain": ["-0.0027584386563039853"]}, "execution_count": 16, "metadata": {}, "output_type": "execute_result"}], "source": ["const = numpy.mean(y_train) * numpy.ones(y_test.shape[0])\n", "r2_score(y_test, const)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Sensiblement pareil et on sait maintenant que le mod\u00e8le n'est pas bon. On cherche une explication. Une raison possible est que les bases d'apprentissage et de test ne sont pas homog\u00e8nes : le mod\u00e8le apprend sur des donn\u00e9es et est test\u00e9 sur d'autres qui n'ont rien \u00e0 voir. On commence par regarder la distribution des notes."]}, {"cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " base | \n", " test | \n", " train | \n", " ratio | \n", "
\n", " \n", " y | \n", " | \n", " | \n", " | \n", "
\n", " \n", " \n", " \n", " 3 | \n", " 6 | \n", " 24 | \n", " 0.250000 | \n", "
\n", " \n", " 4 | \n", " 57 | \n", " 159 | \n", " 0.358491 | \n", "
\n", " \n", " 5 | \n", " 511 | \n", " 1627 | \n", " 0.314075 | \n", "
\n", " \n", " 6 | \n", " 710 | \n", " 2126 | \n", " 0.333960 | \n", "
\n", " \n", " 7 | \n", " 279 | \n", " 800 | \n", " 0.348750 | \n", "
\n", " \n", " 8 | \n", " 60 | \n", " 133 | \n", " 0.451128 | \n", "
\n", " \n", " 9 | \n", " 2 | \n", " 3 | \n", " 0.666667 | \n", "
\n", " \n", "
\n", "
"], "text/plain": ["base test train ratio\n", "y \n", "3 6 24 0.250000\n", "4 57 159 0.358491\n", "5 511 1627 0.314075\n", "6 710 2126 0.333960\n", "7 279 800 0.348750\n", "8 60 133 0.451128\n", "9 2 3 0.666667"]}, "execution_count": 17, "metadata": {}, "output_type": "execute_result"}], "source": ["ys = pandas.DataFrame(dict(y=y_train))\n", "ys['base'] = 'train'\n", "ys2 = pandas.DataFrame(dict(y=y_test))\n", "ys2['base'] = 'test'\n", "ys = pandas.concat([ys, ys2])\n", "ys['compte'] = 1\n", "piv = ys.groupby(['base', 'y'], as_index=False).count().pivot('y', 'base', 'compte')\n", "piv['ratio'] = piv['test'] / piv['train']\n", "piv"]}, {"cell_type": "markdown", "metadata": {}, "source": ["On voit le ratio entre les deux classes est \u00e0 peu pr\u00e8s \u00e9gal \u00e0 1/3 sauf pour les notes sous-repr\u00e9sent\u00e9es. On voit \u00e9galement que les classes 5,6,7 sont sur-repr\u00e9sent\u00e9es. Autrement dit, si je choisis un vin au hasard, il y a 90% de chance que sa note soit 5, 6 ou 7."]}, {"cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": []}], "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.6.4"}}, "nbformat": 4, "nbformat_minor": 2}