{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting fastai\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/38/4f/500931b73404695fb6cbf915defb9e53fd607e6f131d9a13cfa11cad6441/fastai-1.0.27-py3-none-any.whl (116kB)\n",
"\u001b[K 100% |################################| 122kB 2.5MB/s \n",
"\u001b[?25hCollecting cymem==2.0.2 (from fastai)\n",
" Downloading https://files.pythonhosted.org/packages/3d/61/9b0520c28eb199a4b1ca667d96dd625bba003c14c75230195f9691975f85/cymem-2.0.2-cp36-cp36m-manylinux1_x86_64.whl\n",
"Requirement already satisfied: pandas in /opt/conda/lib/python3.6/site-packages (from fastai) (0.23.4)\n",
"Requirement already satisfied: requests in /opt/conda/lib/python3.6/site-packages (from fastai) (2.19.1)\n",
"Collecting bottleneck (from fastai)\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/05/ae/cedf5323f398ab4e4ff92d6c431a3e1c6a186f9b41ab3e8258dff786a290/Bottleneck-1.2.1.tar.gz (105kB)\n",
"\u001b[K 100% |################################| 112kB 28.2MB/s \n",
"\u001b[?25hRequirement already satisfied: scipy in /opt/conda/lib/python3.6/site-packages (from fastai) (1.1.0)\n",
"Collecting thinc==6.12.0 (from fastai)\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/1f/18/e320bfc57c20df39cc5ffa1915c7b5402a9038f290ddd85b5b72689bd57a/thinc-6.12.0-cp36-cp36m-manylinux1_x86_64.whl (1.9MB)\n",
"\u001b[K 100% |################################| 1.9MB 17.5MB/s \n",
"\u001b[?25hRequirement already satisfied: numpy>=1.12 in /opt/conda/lib/python3.6/site-packages (from fastai) (1.15.1)\n",
"Collecting spacy==2.0.16 (from fastai)\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/ed/39/288640f591b29aac6996c97ddfafc3262ae0be7513e06bc560921b112d7c/spacy-2.0.16-cp36-cp36m-manylinux1_x86_64.whl (23.3MB)\n",
"\u001b[K 100% |################################| 23.3MB 3.4MB/s \n",
"\u001b[?25hCollecting torchvision-nightly (from fastai)\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/ca/bd/d0f9a33c81c79710eb7ee428b66869b49a8be16c7f1e446c211a7fbfb7be/torchvision_nightly-0.2.1-py2.py3-none-any.whl (54kB)\n",
"\u001b[K 100% |################################| 61kB 21.9MB/s \n",
"\u001b[?25hCollecting numexpr (from fastai)\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/db/ea/efd9e16283637eb5b6c0042b6cc3521f1b9a5b47767ac463c88bbd37670c/numexpr-2.6.8-cp36-cp36m-manylinux1_x86_64.whl (162kB)\n",
"\u001b[K 100% |################################| 163kB 30.8MB/s \n",
"\u001b[?25hCollecting typing (from fastai)\n",
" Downloading https://files.pythonhosted.org/packages/4a/bd/eee1157fc2d8514970b345d69cb9975dcd1e42cd7e61146ed841f6e68309/typing-3.6.6-py3-none-any.whl\n",
"Collecting dataclasses (from fastai)\n",
" Downloading https://files.pythonhosted.org/packages/26/2f/1095cdc2868052dd1e64520f7c0d5c8c550ad297e944e641dbf1ffbb9a5d/dataclasses-0.6-py3-none-any.whl\n",
"Requirement already satisfied: matplotlib in /opt/conda/lib/python3.6/site-packages (from fastai) (2.2.3)\n",
"Collecting regex (from fastai)\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/a7/5f/9147243aa851f77b5321d19251b58efe3170a52c4ed81fadf46bc1cd9f49/regex-2018.11.07.tar.gz (646kB)\n",
"\u001b[K 100% |################################| 655kB 30.5MB/s \n",
"\u001b[?25hRequirement already satisfied: Pillow in /opt/conda/lib/python3.6/site-packages (from fastai) (5.3.0)\n",
"Collecting fastprogress>=0.1.15 (from fastai)\n",
" Downloading https://files.pythonhosted.org/packages/dc/b8/7ce2b3c6f886f5cb1b16e62d368456b4fdb7e16bba962571bc50dae49b30/fastprogress-0.1.15-py3-none-any.whl\n",
"Requirement already satisfied: pyyaml in /opt/conda/lib/python3.6/site-packages (from fastai) (3.13)\n",
"Requirement already satisfied: python-dateutil>=2.5.0 in /opt/conda/lib/python3.6/site-packages (from pandas->fastai) (2.7.3)\n",
"Requirement already satisfied: pytz>=2011k in /opt/conda/lib/python3.6/site-packages (from pandas->fastai) (2018.5)\n",
"Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /opt/conda/lib/python3.6/site-packages (from requests->fastai) (3.0.4)\n",
"Requirement already satisfied: idna<2.8,>=2.5 in /opt/conda/lib/python3.6/site-packages (from requests->fastai) (2.7)\n",
"Requirement already satisfied: urllib3<1.24,>=1.21.1 in /opt/conda/lib/python3.6/site-packages (from requests->fastai) (1.23)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.6/site-packages (from requests->fastai) (2018.10.15)\n",
"Requirement already satisfied: tqdm<5.0.0,>=4.10.0 in /opt/conda/lib/python3.6/site-packages (from thinc==6.12.0->fastai) (4.26.0)\n",
"Collecting msgpack<1.0.0,>=0.5.6 (from thinc==6.12.0->fastai)\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/22/4e/dcf124fd97e5f5611123d6ad9f40ffd6eb979d1efdc1049e28a795672fcd/msgpack-0.5.6-cp36-cp36m-manylinux1_x86_64.whl (315kB)\n",
"\u001b[K 100% |################################| 317kB 27.7MB/s \n",
"\u001b[?25hCollecting dill<0.3.0,>=0.2.7 (from thinc==6.12.0->fastai)\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/6f/78/8b96476f4ae426db71c6e86a8e6a81407f015b34547e442291cd397b18f3/dill-0.2.8.2.tar.gz (150kB)\n",
"\u001b[K 100% |################################| 153kB 29.1MB/s \n",
"\u001b[?25hCollecting wrapt<1.11.0,>=1.10.0 (from thinc==6.12.0->fastai)\n",
" Downloading https://files.pythonhosted.org/packages/a0/47/66897906448185fcb77fc3c2b1bc20ed0ecca81a0f2f88eda3fc5a34fc3d/wrapt-1.10.11.tar.gz\n",
"Collecting murmurhash<1.1.0,>=0.28.0 (from thinc==6.12.0->fastai)\n",
" Downloading https://files.pythonhosted.org/packages/38/40/6b39438f7eefbb46460f645b8eefebc0c5f1cd38a934a2189c39d8bd0225/murmurhash-1.0.1-cp36-cp36m-manylinux1_x86_64.whl\n",
"Collecting plac<1.0.0,>=0.9.6 (from thinc==6.12.0->fastai)\n",
" Downloading https://files.pythonhosted.org/packages/9e/9b/62c60d2f5bc135d2aa1d8c8a86aaf84edb719a59c7f11a4316259e61a298/plac-0.9.6-py2.py3-none-any.whl\n",
"Requirement already satisfied: six<2.0.0,>=1.10.0 in /opt/conda/lib/python3.6/site-packages (from thinc==6.12.0->fastai) (1.11.0)\n",
"Collecting cytoolz<0.10,>=0.9.0 (from thinc==6.12.0->fastai)\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/36/f4/9728ba01ccb2f55df9a5af029b48ba0aaca1081bbd7823ea2ee223ba7a42/cytoolz-0.9.0.1.tar.gz (443kB)\n",
"\u001b[K 100% |################################| 450kB 30.8MB/s \n",
"\u001b[?25hCollecting preshed<3.0.0,>=2.0.1 (from thinc==6.12.0->fastai)\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/20/93/f222fb957764a283203525ef20e62008675fd0a14ffff8cc1b1490147c63/preshed-2.0.1-cp36-cp36m-manylinux1_x86_64.whl (83kB)\n",
"\u001b[K 100% |################################| 92kB 26.3MB/s \n",
"\u001b[?25hCollecting msgpack-numpy<0.4.4.0 (from thinc==6.12.0->fastai)\n",
" Downloading https://files.pythonhosted.org/packages/ad/45/464be6da85b5ca893cfcbd5de3b31a6710f636ccb8521b17bd4110a08d94/msgpack_numpy-0.4.3.2-py2.py3-none-any.whl\n",
"Collecting ujson>=1.35 (from spacy==2.0.16->fastai)\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/16/c4/79f3409bc710559015464e5f49b9879430d8f87498ecdc335899732e5377/ujson-1.35.tar.gz (192kB)\n",
"\u001b[K 100% |################################| 194kB 38.8MB/s \n",
"\u001b[?25hRequirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.6/site-packages (from matplotlib->fastai) (0.10.0)\n",
"Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /opt/conda/lib/python3.6/site-packages (from matplotlib->fastai) (2.2.0)\n",
"Requirement already satisfied: kiwisolver>=1.0.1 in /opt/conda/lib/python3.6/site-packages (from matplotlib->fastai) (1.0.1)\n",
"Collecting toolz>=0.8.0 (from cytoolz<0.10,>=0.9.0->thinc==6.12.0->fastai)\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/14/d0/a73c15bbeda3d2e7b381a36afb0d9cd770a9f4adc5d1532691013ba881db/toolz-0.9.0.tar.gz (45kB)\n",
"\u001b[K 100% |################################| 51kB 18.3MB/s \n",
"\u001b[?25hRequirement already satisfied: setuptools in /opt/conda/lib/python3.6/site-packages (from kiwisolver>=1.0.1->matplotlib->fastai) (40.2.0)\n",
"Building wheels for collected packages: bottleneck, regex, dill, wrapt, cytoolz, ujson, toolz\n",
" Running setup.py bdist_wheel for bottleneck ... \u001b[?25ldone\n",
"\u001b[?25h Stored in directory: /root/.cache/pip/wheels/f2/bf/ec/e0f39aa27001525ad455139ee57ec7d0776fe074dfd78c97e4\n",
" Running setup.py bdist_wheel for regex ... \u001b[?25ldone\n",
"\u001b[?25h Stored in directory: /root/.cache/pip/wheels/a2/03/2b/bdd66c376010fb1c405145e16bed909618dd544282951a18c7\n",
" Running setup.py bdist_wheel for dill ... \u001b[?25ldone\n",
"\u001b[?25h Stored in directory: /root/.cache/pip/wheels/e2/5d/17/f87cb7751896ac629b435a8696f83ee75b11029f5d6f6bda72\n",
" Running setup.py bdist_wheel for wrapt ... \u001b[?25ldone\n",
"\u001b[?25h Stored in directory: /root/.cache/pip/wheels/48/5d/04/22361a593e70d23b1f7746d932802efe1f0e523376a74f321e\n",
" Running setup.py bdist_wheel for cytoolz ... \u001b[?25ldone\n",
"\u001b[?25h Stored in directory: /root/.cache/pip/wheels/88/f3/11/9817b001e59ab04889e8cffcbd9087e2e2155b9ebecfc8dd38\n",
" Running setup.py bdist_wheel for ujson ... \u001b[?25ldone\n",
"\u001b[?25h Stored in directory: /root/.cache/pip/wheels/28/77/e4/0311145b9c2e2f01470e744855131f9e34d6919687550f87d1\n",
" Running setup.py bdist_wheel for toolz ... \u001b[?25ldone\n",
"\u001b[?25h Stored in directory: /root/.cache/pip/wheels/f4/0c/f6/ce6b2d1aa459ee97cc3c0f82236302bd62d89c86c700219463\n",
"Successfully built bottleneck regex dill wrapt cytoolz ujson toolz\n",
"\u001b[31mspacy 2.0.16 has requirement regex==2018.01.10, but you'll have regex 2018.11.7 which is incompatible.\u001b[0m\n",
"Installing collected packages: cymem, bottleneck, msgpack, dill, wrapt, murmurhash, plac, toolz, cytoolz, preshed, msgpack-numpy, thinc, regex, ujson, spacy, torchvision-nightly, numexpr, typing, dataclasses, fastprogress, fastai\n",
"Successfully installed bottleneck-1.2.1 cymem-2.0.2 cytoolz-0.9.0.1 dataclasses-0.6 dill-0.2.8.2 fastai-1.0.27 fastprogress-0.1.15 msgpack-0.5.6 msgpack-numpy-0.4.3.2 murmurhash-1.0.1 numexpr-2.6.8 plac-0.9.6 preshed-2.0.1 regex-2018.11.7 spacy-2.0.16 thinc-6.12.0 toolz-0.9.0 torchvision-nightly-0.2.1 typing-3.6.6 ujson-1.35 wrapt-1.10.11\n",
"\u001b[33mYou are using pip version 18.0, however version 18.1 is available.\n",
"You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n"
]
}
],
"source": [
"!pip install fastai"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"from fastai import *\n",
"from fastai.tabular import *"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"train_set = pd.read_csv(\"train.csv\")\n",
"test_set = pd.read_csv(\"test.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" user_id | \n",
" product | \n",
" campaign_id | \n",
" webpage_id | \n",
" product_category_1 | \n",
" product_category_2 | \n",
" user_group_id | \n",
" gender | \n",
" age_level | \n",
" user_depth | \n",
" city_development_index | \n",
" var_1 | \n",
" is_click | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 858557 | \n",
" C | \n",
" 359520 | \n",
" 13787 | \n",
" 4 | \n",
" NaN | \n",
" 10.0 | \n",
" Female | \n",
" 4.0 | \n",
" 3.0 | \n",
" 3.0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" 243253 | \n",
" C | \n",
" 105960 | \n",
" 11085 | \n",
" 5 | \n",
" NaN | \n",
" 8.0 | \n",
" Female | \n",
" 2.0 | \n",
" 2.0 | \n",
" NaN | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" 243253 | \n",
" C | \n",
" 359520 | \n",
" 13787 | \n",
" 4 | \n",
" NaN | \n",
" 8.0 | \n",
" Female | \n",
" 2.0 | \n",
" 2.0 | \n",
" NaN | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 3 | \n",
" 1097446 | \n",
" I | \n",
" 359520 | \n",
" 13787 | \n",
" 3 | \n",
" NaN | \n",
" 3.0 | \n",
" Male | \n",
" 3.0 | \n",
" 3.0 | \n",
" 2.0 | \n",
" 1 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" 663656 | \n",
" C | \n",
" 405490 | \n",
" 60305 | \n",
" 3 | \n",
" NaN | \n",
" 2.0 | \n",
" Male | \n",
" 2.0 | \n",
" 3.0 | \n",
" 2.0 | \n",
" 1 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" user_id product campaign_id webpage_id product_category_1 \\\n",
"0 858557 C 359520 13787 4 \n",
"1 243253 C 105960 11085 5 \n",
"2 243253 C 359520 13787 4 \n",
"3 1097446 I 359520 13787 3 \n",
"4 663656 C 405490 60305 3 \n",
"\n",
" product_category_2 user_group_id gender age_level user_depth \\\n",
"0 NaN 10.0 Female 4.0 3.0 \n",
"1 NaN 8.0 Female 2.0 2.0 \n",
"2 NaN 8.0 Female 2.0 2.0 \n",
"3 NaN 3.0 Male 3.0 3.0 \n",
"4 NaN 2.0 Male 2.0 3.0 \n",
"\n",
" city_development_index var_1 is_click \n",
"0 3.0 0 0 \n",
"1 NaN 0 0 \n",
"2 NaN 0 0 \n",
"3 2.0 1 0 \n",
"4 2.0 1 0 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_set = train_set.loc[:,'user_id':'is_click']\n",
"train_set.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" user_id | \n",
" product | \n",
" campaign_id | \n",
" webpage_id | \n",
" product_category_1 | \n",
" product_category_2 | \n",
" user_group_id | \n",
" gender | \n",
" age_level | \n",
" user_depth | \n",
" city_development_index | \n",
" var_1 | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 732573 | \n",
" J | \n",
" 404347 | \n",
" 53587 | \n",
" 1 | \n",
" NaN | \n",
" 5.0 | \n",
" Male | \n",
" 5.0 | \n",
" 3.0 | \n",
" NaN | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" 172910 | \n",
" I | \n",
" 118601 | \n",
" 28529 | \n",
" 3 | \n",
" 82527.0 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 1 | \n",
"
\n",
" \n",
" 2 | \n",
" 172910 | \n",
" I | \n",
" 118601 | \n",
" 28529 | \n",
" 4 | \n",
" 82527.0 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 1 | \n",
"
\n",
" \n",
" 3 | \n",
" 557318 | \n",
" G | \n",
" 118601 | \n",
" 28529 | \n",
" 5 | \n",
" 82527.0 | \n",
" 1.0 | \n",
" Male | \n",
" 1.0 | \n",
" 3.0 | \n",
" 1.0 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" 923896 | \n",
" H | \n",
" 118601 | \n",
" 28529 | \n",
" 5 | \n",
" 82527.0 | \n",
" 9.0 | \n",
" Female | \n",
" 3.0 | \n",
" 1.0 | \n",
" NaN | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" user_id product campaign_id webpage_id product_category_1 \\\n",
"0 732573 J 404347 53587 1 \n",
"1 172910 I 118601 28529 3 \n",
"2 172910 I 118601 28529 4 \n",
"3 557318 G 118601 28529 5 \n",
"4 923896 H 118601 28529 5 \n",
"\n",
" product_category_2 user_group_id gender age_level user_depth \\\n",
"0 NaN 5.0 Male 5.0 3.0 \n",
"1 82527.0 NaN NaN NaN NaN \n",
"2 82527.0 NaN NaN NaN NaN \n",
"3 82527.0 1.0 Male 1.0 3.0 \n",
"4 82527.0 9.0 Female 3.0 1.0 \n",
"\n",
" city_development_index var_1 \n",
"0 NaN 0 \n",
"1 NaN 1 \n",
"2 NaN 1 \n",
"3 1.0 0 \n",
"4 NaN 1 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_set = test_set.loc[:,'user_id':'var_1']\n",
"test_set.head()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"dep_var = \"is_click\"\n",
"cat_names = ['product', 'product_category_1', 'product_category_2', 'user_group_id', 'gender', 'age_level', 'user_depth', 'city_development_index', 'var_1']\n",
"cont_names = ['user_id', 'campaign_id', 'webpage_id']"
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {},
"outputs": [],
"source": [
"procs = [FillMissing, Categorify, Normalize]\n",
"test = TabularList.from_df(test_set.copy(), cat_names=cat_names, cont_names=cont_names, procs=procs)"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {},
"outputs": [],
"source": [
"data = (TabularList.from_df(train_set, cat_names=cat_names, cont_names=cont_names, procs=procs)\n",
" .split_by_idx(list(range(int(.2*len(train_set)))))\n",
" .label_from_df(cols=dep_var)\n",
" .add_test(test, label=0)\n",
" .databunch())"
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
" \n",
" product | \n",
" product_category_1 | \n",
" product_category_2 | \n",
" user_group_id | \n",
" gender | \n",
" age_level | \n",
" user_depth | \n",
" city_development_index | \n",
" var_1 | \n",
" user_id | \n",
" campaign_id | \n",
" webpage_id | \n",
" target | \n",
"
\n",
" \n",
" E | \n",
" 1 | \n",
" 146115.0 | \n",
" 11.0 | \n",
" Female | \n",
" 5.0 | \n",
" 3.0 | \n",
" 2.0 | \n",
" 0 | \n",
" -1.3754 | \n",
" -1.7345 | \n",
" -1.3194 | \n",
" 0 | \n",
"
\n",
" \n",
" H | \n",
" 3 | \n",
" nan | \n",
" 5.0 | \n",
" Male | \n",
" 5.0 | \n",
" 3.0 | \n",
" 2.0 | \n",
" 0 | \n",
" 0.2960 | \n",
" 0.7841 | \n",
" 1.4211 | \n",
" 0 | \n",
"
\n",
" \n",
" C | \n",
" 3 | \n",
" nan | \n",
" 3.0 | \n",
" Male | \n",
" 3.0 | \n",
" 3.0 | \n",
" 2.0 | \n",
" 0 | \n",
" -0.0101 | \n",
" 0.7841 | \n",
" 1.4211 | \n",
" 0 | \n",
"
\n",
" \n",
" D | \n",
" 4 | \n",
" nan | \n",
" 3.0 | \n",
" Male | \n",
" 3.0 | \n",
" 3.0 | \n",
" 2.0 | \n",
" 1 | \n",
" 0.4042 | \n",
" 0.4259 | \n",
" -0.7555 | \n",
" 1 | \n",
"
\n",
" \n",
" I | \n",
" 4 | \n",
" 82527.0 | \n",
" 4.0 | \n",
" Male | \n",
" 4.0 | \n",
" 3.0 | \n",
" 4.0 | \n",
" 1 | \n",
" 0.5354 | \n",
" -1.4518 | \n",
" -0.0657 | \n",
" 0 | \n",
"
\n",
" \n",
" C | \n",
" 5 | \n",
" nan | \n",
" 2.0 | \n",
" Male | \n",
" 2.0 | \n",
" 2.0 | \n",
" 1.0 | \n",
" 0 | \n",
" -0.0488 | \n",
" 0.4369 | \n",
" -0.7555 | \n",
" 0 | \n",
"
\n",
" \n",
" C | \n",
" 3 | \n",
" nan | \n",
" 2.0 | \n",
" Male | \n",
" 2.0 | \n",
" 3.0 | \n",
" 3.0 | \n",
" 0 | \n",
" 0.7757 | \n",
" 0.7841 | \n",
" 1.4211 | \n",
" 0 | \n",
"
\n",
" \n",
" I | \n",
" 4 | \n",
" 82527.0 | \n",
" 4.0 | \n",
" Male | \n",
" 4.0 | \n",
" 3.0 | \n",
" 4.0 | \n",
" 1 | \n",
" 1.7603 | \n",
" -1.4518 | \n",
" -0.0657 | \n",
" 0 | \n",
"
\n",
" \n",
" H | \n",
" 1 | \n",
" 146115.0 | \n",
" 1.0 | \n",
" Male | \n",
" 1.0 | \n",
" 3.0 | \n",
" 3.0 | \n",
" 0 | \n",
" 1.7800 | \n",
" 0.7752 | \n",
" 1.1068 | \n",
" 0 | \n",
"
\n",
" \n",
" B | \n",
" 2 | \n",
" nan | \n",
" 2.0 | \n",
" Male | \n",
" 2.0 | \n",
" 3.0 | \n",
" 3.0 | \n",
" 1 | \n",
" -1.1441 | \n",
" -1.6048 | \n",
" -1.0744 | \n",
" 0 | \n",
"
\n",
"
\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"data.show_batch(rows=10)"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [],
"source": [
"learn = tabular_learner(data, layers=[250,1000,250], metrics=accuracy)"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"