Last active
November 24, 2024 20:12
-
-
Save fgiobergia/257933a2df6a9d83a93a2e4bf46c9018 to your computer and use it in GitHub Desktop.
IMDB classification example (DSL Lecture Nov. 18)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "id": "5ecd8ebf-0007-420a-919c-c509c9e6a48a", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import pandas as pd\n", | |
| "\n", | |
| "df = pd.read_csv(\"aclimdb_reviews_train.txt\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "id": "81fced4e-a362-4228-a519-db6589de4962", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "25000" | |
| ] | |
| }, | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "len(df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "id": "e9bb981a-9679-4ede-947f-59da6da7b362", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>review</th>\n", | |
| " <th>label</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>For a movie that gets no respect there sure ar...</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>Working with one of the best Shakespeare sourc...</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>Bizarre horror movie filled with famous faces ...</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>Well...tremors I, the original started off in ...</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>A solid, if unremarkable film. Matthau, as Ein...</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " review label\n", | |
| "0 For a movie that gets no respect there sure ar... 1\n", | |
| "1 Working with one of the best Shakespeare sourc... 0\n", | |
| "2 Bizarre horror movie filled with famous faces ... 1\n", | |
| "3 Well...tremors I, the original started off in ... 0\n", | |
| "4 A solid, if unremarkable film. Matthau, as Ein... 1" | |
| ] | |
| }, | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "id": "2c1791db-b13a-436a-9d91-34a81bd32f92", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "np.int64(0)" | |
| ] | |
| }, | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# checking for missing reviews\n", | |
| "df[\"review\"].isna().sum()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "id": "1d60dca0-574b-4668-9ad8-8af7545942eb", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "np.float64(0.5)" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# target balance (0.5 => 50% positive (1), 50% negative (0))\n", | |
| "df[\"label\"].mean()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "40f645a2-9083-431a-a12e-5fa5d14b351e", | |
| "metadata": {}, | |
| "source": [ | |
| "# Simple decision tree (depth 3) + visualization" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "id": "a22cf430-2d81-4e5b-b9c9-c6f5dc047401", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from sklearn.pipeline import make_pipeline\n", | |
| "from sklearn.tree import DecisionTreeClassifier\n", | |
| "from sklearn.feature_extraction.text import CountVectorizer\n", | |
| "from sklearn.ensemble import RandomForestClassifier\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "id": "be898cbb-b9c6-48d0-8ad2-004cf8098588", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "['cat' 'dog' 'house' 'my']\n", | |
| "[[1 2 0 3]\n", | |
| " [0 1 1 2]]\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# toy sentences, to show how CountVectorizer works\n", | |
| "texts = [\n", | |
| " \"my dog my cat my dog\", \n", | |
| " \"my dog, my house\"\n", | |
| "]\n", | |
| "\n", | |
| "cv = CountVectorizer()\n", | |
| "cv.fit(texts) # extract vocabulary\n", | |
| "print(cv.get_feature_names_out()) # show vocabulary\n", | |
| "\n", | |
| "# convert sentences into vectors (according to the vocabulary & term frequencies for each sentence)\n", | |
| "print(cv.transform(texts).toarray())" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "id": "28af9267-8c49-4a31-bdc9-98812a9549cd", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "\n", | |
| "# pipeline with term frequency, 1000 most common words, and a (short -- max-depth=3) decision tree\n", | |
| "pipe = make_pipeline(\n", | |
| " CountVectorizer(max_features=1_000, stop_words=\"english\"),\n", | |
| " DecisionTreeClassifier(max_depth=3)\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "id": "4872637b-03d9-4739-9629-f4465ed4bf22", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from sklearn.model_selection import train_test_split\n", | |
| "\n", | |
| "# setting aside 25% for testing\n", | |
| "# (stratification on y to keep the 50/50 label distribution)\n", | |
| "X_train, X_test, y_train, y_test = train_test_split(df[\"review\"].values, df[\"label\"].values, train_size=0.75, stratify=df[\"label\"].values)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "id": "e8264c43-5710-4654-9f57-050ff7d3573d", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from sklearn.metrics import accuracy_score" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "id": "e5d07362-6d5b-4b24-97d9-08b01036ca83", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<style>#sk-container-id-1 {\n", | |
| " /* Definition of color scheme common for light and dark mode */\n", | |
| " --sklearn-color-text: black;\n", | |
| " --sklearn-color-line: gray;\n", | |
| " /* Definition of color scheme for unfitted estimators */\n", | |
| " --sklearn-color-unfitted-level-0: #fff5e6;\n", | |
| " --sklearn-color-unfitted-level-1: #f6e4d2;\n", | |
| " --sklearn-color-unfitted-level-2: #ffe0b3;\n", | |
| " --sklearn-color-unfitted-level-3: chocolate;\n", | |
| " /* Definition of color scheme for fitted estimators */\n", | |
| " --sklearn-color-fitted-level-0: #f0f8ff;\n", | |
| " --sklearn-color-fitted-level-1: #d4ebff;\n", | |
| " --sklearn-color-fitted-level-2: #b3dbfd;\n", | |
| " --sklearn-color-fitted-level-3: cornflowerblue;\n", | |
| "\n", | |
| " /* Specific color for light theme */\n", | |
| " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n", | |
| " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n", | |
| " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n", | |
| " --sklearn-color-icon: #696969;\n", | |
| "\n", | |
| " @media (prefers-color-scheme: dark) {\n", | |
| " /* Redefinition of color scheme for dark theme */\n", | |
| " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n", | |
| " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n", | |
| " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n", | |
| " --sklearn-color-icon: #878787;\n", | |
| " }\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 pre {\n", | |
| " padding: 0;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 input.sk-hidden--visually {\n", | |
| " border: 0;\n", | |
| " clip: rect(1px 1px 1px 1px);\n", | |
| " clip: rect(1px, 1px, 1px, 1px);\n", | |
| " height: 1px;\n", | |
| " margin: -1px;\n", | |
| " overflow: hidden;\n", | |
| " padding: 0;\n", | |
| " position: absolute;\n", | |
| " width: 1px;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-dashed-wrapped {\n", | |
| " border: 1px dashed var(--sklearn-color-line);\n", | |
| " margin: 0 0.4em 0.5em 0.4em;\n", | |
| " box-sizing: border-box;\n", | |
| " padding-bottom: 0.4em;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-container {\n", | |
| " /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n", | |
| " but bootstrap.min.css set `[hidden] { display: none !important; }`\n", | |
| " so we also need the `!important` here to be able to override the\n", | |
| " default hidden behavior on the sphinx rendered scikit-learn.org.\n", | |
| " See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n", | |
| " display: inline-block !important;\n", | |
| " position: relative;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-text-repr-fallback {\n", | |
| " display: none;\n", | |
| "}\n", | |
| "\n", | |
| "div.sk-parallel-item,\n", | |
| "div.sk-serial,\n", | |
| "div.sk-item {\n", | |
| " /* draw centered vertical line to link estimators */\n", | |
| " background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n", | |
| " background-size: 2px 100%;\n", | |
| " background-repeat: no-repeat;\n", | |
| " background-position: center center;\n", | |
| "}\n", | |
| "\n", | |
| "/* Parallel-specific style estimator block */\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-parallel-item::after {\n", | |
| " content: \"\";\n", | |
| " width: 100%;\n", | |
| " border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n", | |
| " flex-grow: 1;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-parallel {\n", | |
| " display: flex;\n", | |
| " align-items: stretch;\n", | |
| " justify-content: center;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " position: relative;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-parallel-item {\n", | |
| " display: flex;\n", | |
| " flex-direction: column;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n", | |
| " align-self: flex-end;\n", | |
| " width: 50%;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n", | |
| " align-self: flex-start;\n", | |
| " width: 50%;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n", | |
| " width: 0;\n", | |
| "}\n", | |
| "\n", | |
| "/* Serial-specific style estimator block */\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-serial {\n", | |
| " display: flex;\n", | |
| " flex-direction: column;\n", | |
| " align-items: center;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " padding-right: 1em;\n", | |
| " padding-left: 1em;\n", | |
| "}\n", | |
| "\n", | |
| "\n", | |
| "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n", | |
| "clickable and can be expanded/collapsed.\n", | |
| "- Pipeline and ColumnTransformer use this feature and define the default style\n", | |
| "- Estimators will overwrite some part of the style using the `sk-estimator` class\n", | |
| "*/\n", | |
| "\n", | |
| "/* Pipeline and ColumnTransformer style (default) */\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-toggleable {\n", | |
| " /* Default theme specific background. It is overwritten whether we have a\n", | |
| " specific estimator or a Pipeline/ColumnTransformer */\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| "}\n", | |
| "\n", | |
| "/* Toggleable label */\n", | |
| "#sk-container-id-1 label.sk-toggleable__label {\n", | |
| " cursor: pointer;\n", | |
| " display: block;\n", | |
| " width: 100%;\n", | |
| " margin-bottom: 0;\n", | |
| " padding: 0.5em;\n", | |
| " box-sizing: border-box;\n", | |
| " text-align: center;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n", | |
| " /* Arrow on the left of the label */\n", | |
| " content: \"▸\";\n", | |
| " float: left;\n", | |
| " margin-right: 0.25em;\n", | |
| " color: var(--sklearn-color-icon);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| "}\n", | |
| "\n", | |
| "/* Toggleable content - dropdown */\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-toggleable__content {\n", | |
| " max-height: 0;\n", | |
| " max-width: 0;\n", | |
| " overflow: hidden;\n", | |
| " text-align: left;\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-toggleable__content.fitted {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-toggleable__content pre {\n", | |
| " margin: 0.2em;\n", | |
| " border-radius: 0.25em;\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n", | |
| " /* Expand drop-down */\n", | |
| " max-height: 200px;\n", | |
| " max-width: 100%;\n", | |
| " overflow: auto;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n", | |
| " content: \"▾\";\n", | |
| "}\n", | |
| "\n", | |
| "/* Pipeline/ColumnTransformer-specific style */\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Estimator-specific style */\n", | |
| "\n", | |
| "/* Colorize estimator box */\n", | |
| "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n", | |
| "#sk-container-id-1 div.sk-label label {\n", | |
| " /* The background is the default theme color */\n", | |
| " color: var(--sklearn-color-text-on-default-background);\n", | |
| "}\n", | |
| "\n", | |
| "/* On hover, darken the color of the background */\n", | |
| "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Label box, darken color on hover, fitted */\n", | |
| "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Estimator label */\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-label label {\n", | |
| " font-family: monospace;\n", | |
| " font-weight: bold;\n", | |
| " display: inline-block;\n", | |
| " line-height: 1.2em;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-label-container {\n", | |
| " text-align: center;\n", | |
| "}\n", | |
| "\n", | |
| "/* Estimator-specific */\n", | |
| "#sk-container-id-1 div.sk-estimator {\n", | |
| " font-family: monospace;\n", | |
| " border: 1px dotted var(--sklearn-color-border-box);\n", | |
| " border-radius: 0.25em;\n", | |
| " box-sizing: border-box;\n", | |
| " margin-bottom: 0.5em;\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-estimator.fitted {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "/* on hover */\n", | |
| "#sk-container-id-1 div.sk-estimator:hover {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 div.sk-estimator.fitted:hover {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n", | |
| "\n", | |
| "/* Common style for \"i\" and \"?\" */\n", | |
| "\n", | |
| ".sk-estimator-doc-link,\n", | |
| "a:link.sk-estimator-doc-link,\n", | |
| "a:visited.sk-estimator-doc-link {\n", | |
| " float: right;\n", | |
| " font-size: smaller;\n", | |
| " line-height: 1em;\n", | |
| " font-family: monospace;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " border-radius: 1em;\n", | |
| " height: 1em;\n", | |
| " width: 1em;\n", | |
| " text-decoration: none !important;\n", | |
| " margin-left: 1ex;\n", | |
| " /* unfitted */\n", | |
| " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n", | |
| " color: var(--sklearn-color-unfitted-level-1);\n", | |
| "}\n", | |
| "\n", | |
| ".sk-estimator-doc-link.fitted,\n", | |
| "a:link.sk-estimator-doc-link.fitted,\n", | |
| "a:visited.sk-estimator-doc-link.fitted {\n", | |
| " /* fitted */\n", | |
| " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n", | |
| " color: var(--sklearn-color-fitted-level-1);\n", | |
| "}\n", | |
| "\n", | |
| "/* On hover */\n", | |
| "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n", | |
| ".sk-estimator-doc-link:hover,\n", | |
| "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n", | |
| ".sk-estimator-doc-link:hover {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-3);\n", | |
| " color: var(--sklearn-color-background);\n", | |
| " text-decoration: none;\n", | |
| "}\n", | |
| "\n", | |
| "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n", | |
| ".sk-estimator-doc-link.fitted:hover,\n", | |
| "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n", | |
| ".sk-estimator-doc-link.fitted:hover {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-3);\n", | |
| " color: var(--sklearn-color-background);\n", | |
| " text-decoration: none;\n", | |
| "}\n", | |
| "\n", | |
| "/* Span, style for the box shown on hovering the info icon */\n", | |
| ".sk-estimator-doc-link span {\n", | |
| " display: none;\n", | |
| " z-index: 9999;\n", | |
| " position: relative;\n", | |
| " font-weight: normal;\n", | |
| " right: .2ex;\n", | |
| " padding: .5ex;\n", | |
| " margin: .5ex;\n", | |
| " width: min-content;\n", | |
| " min-width: 20ex;\n", | |
| " max-width: 50ex;\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " box-shadow: 2pt 2pt 4pt #999;\n", | |
| " /* unfitted */\n", | |
| " background: var(--sklearn-color-unfitted-level-0);\n", | |
| " border: .5pt solid var(--sklearn-color-unfitted-level-3);\n", | |
| "}\n", | |
| "\n", | |
| ".sk-estimator-doc-link.fitted span {\n", | |
| " /* fitted */\n", | |
| " background: var(--sklearn-color-fitted-level-0);\n", | |
| " border: var(--sklearn-color-fitted-level-3);\n", | |
| "}\n", | |
| "\n", | |
| ".sk-estimator-doc-link:hover span {\n", | |
| " display: block;\n", | |
| "}\n", | |
| "\n", | |
| "/* \"?\"-specific style due to the `<a>` HTML tag */\n", | |
| "\n", | |
| "#sk-container-id-1 a.estimator_doc_link {\n", | |
| " float: right;\n", | |
| " font-size: 1rem;\n", | |
| " line-height: 1em;\n", | |
| " font-family: monospace;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " border-radius: 1rem;\n", | |
| " height: 1rem;\n", | |
| " width: 1rem;\n", | |
| " text-decoration: none;\n", | |
| " /* unfitted */\n", | |
| " color: var(--sklearn-color-unfitted-level-1);\n", | |
| " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 a.estimator_doc_link.fitted {\n", | |
| " /* fitted */\n", | |
| " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n", | |
| " color: var(--sklearn-color-fitted-level-1);\n", | |
| "}\n", | |
| "\n", | |
| "/* On hover */\n", | |
| "#sk-container-id-1 a.estimator_doc_link:hover {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-3);\n", | |
| " color: var(--sklearn-color-background);\n", | |
| " text-decoration: none;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-3);\n", | |
| "}\n", | |
| "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>Pipeline(steps=[('countvectorizer',\n", | |
| " CountVectorizer(max_features=1000, stop_words='english')),\n", | |
| " ('decisiontreeclassifier',\n", | |
| " DecisionTreeClassifier(max_depth=3))])</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" ><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> Pipeline<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.pipeline.Pipeline.html\">?<span>Documentation for Pipeline</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>Pipeline(steps=[('countvectorizer',\n", | |
| " CountVectorizer(max_features=1000, stop_words='english')),\n", | |
| " ('decisiontreeclassifier',\n", | |
| " DecisionTreeClassifier(max_depth=3))])</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" ><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> CountVectorizer<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html\">?<span>Documentation for CountVectorizer</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>CountVectorizer(max_features=1000, stop_words='english')</pre></div> </div></div><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" ><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> DecisionTreeClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.tree.DecisionTreeClassifier.html\">?<span>Documentation for DecisionTreeClassifier</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>DecisionTreeClassifier(max_depth=3)</pre></div> </div></div></div></div></div></div>" | |
| ], | |
| "text/plain": [ | |
| "Pipeline(steps=[('countvectorizer',\n", | |
| " CountVectorizer(max_features=1000, stop_words='english')),\n", | |
| " ('decisiontreeclassifier',\n", | |
| " DecisionTreeClassifier(max_depth=3))])" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "pipe.fit(X_train, y_train)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "id": "b20006b6-ccdc-406a-9cc4-cbcc8b74685f", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "y_pred = pipe.predict(X_test)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "id": "261795ea-b36e-4085-a2f0-acd443a06d09", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "0.67408" | |
| ] | |
| }, | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "accuracy_score(y_test, y_pred) # initial accuracy, just to get a sense of the initial performance" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 14, | |
| "id": "fcb5d99c-29e9-48ec-88af-ccba1e78fcb5", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "1000" | |
| ] | |
| }, | |
| "execution_count": 14, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "len(pipe[0].get_feature_names_out()) # the 1000 most common words used by CountVectorizer are returned by this method" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 15, | |
| "id": "53b0a76c-76c0-45b7-91a3-49662115794d", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAABiIAAAMWCAYAAAB88Z6nAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdZ1RUV//28WsABQRUrGCvUbGLvaJGUGMvsffeYu+918ResERs0SSWGBOjMYpdVEAsWNEoUdFbgx0VkXle5HH+mWBDwVH4ftY662bO2Wef3yHcy9lzzdnbYDQajQIAAAAAAAAAAIgHVpYuAAAAAAAAAAAAJFwEEQAAAAAAAAAAIN4QRAAAAAAAAAAAgHhDEAEAAAAAAAAAAOINQQQAAAAAAAAAAIg3BBEAAAAAAAAAACDeEEQAAAAAAAAAAIB4QxABAAAAAAAAAADiDUEEAAAAAAAAAACINwQRAAAAAAAAAAAg3hBEAAAAAAAAAACAeEMQAQAAAAAAAAAA4g1BBAAAAAAAAAAAiDcEEQAAAAAAAAAAIN4QRAAAAAAAAAAAgHhDEAEAAAAAAAAAAOINQQQAAAAAAAAAAIg3BBEAAAAAAAAAACDeEEQAAAAAAAAAAIB4QxABAAAAAAAAAADiDUEEAAAAAAAAAACINwQRAAAAAAAAAAAg3hBEAAAAAAAAAACAeEMQAQAAAAAAAAAA4g1BBAAAAAAAAAAAiDcEEQAAAAAAAAAAIN4QRAAAAAAAAAAAgHhDEAEAAAAAAAAAAOINQQQAAAAAAAAAAIg3BBEAAAAAAAAAACDeEEQAAAAAAAAAAIB4QxABAAAAAAAAAADiDUEEAAAAAAAAAACINwQRAAAAAAAAAAAg3hBEAAAAAAAAAACAeEMQAQAAAAAAAAAA4g1BBAAAAAAAAAAAiDcEEQAAAAAAAAAAIN4QRAAAAAAAAAAAgHhDEAEAAAAAAAAAAOINQQQAAAAAAAAAAIg3BBEAAAAAAAAAACDeEEQAAAAAAAAAAIB4QxABAAAAAAAAAADiDUEEAAAAAAAAAACINwQRAAAAAAAAAAAg3hBEAAAAAAAAAACAeEMQAQAAAAAAAAAA4g1BBAAAAAAAAAAAiDcEEQAAAAAAAAAAIN4QRAAAAAAAAAAAgHhDEAEAAAAAAAAAAOINQQQAAAAAAAAAAIg3BBEAAAAAAAAAACDeEEQAAAAAAAAAAIB4QxABAAAAAAAAAADiDUEEAAAAAAAAAACINwQRAAAAAAAAAAAg3hBEAAAAAAAAAACAeEMQAQAAAAAAAAAA4g1BBAAAAAAAAAAAiDcEEQAAAAAAAAAAIN4QRAAAAAAAAAAAgHhDEAEAAAAAAAAAAOINQQQAAAAAAAAAAIg3BBEAAAAAAAAAACDeEEQAAAAAAAAAAIB4Y2PpAgAAAIAPITQ0VLdv37Z0GYCZNGnSKEuWLJYuAwAAAIhXBBEAAABI8EJDQ5UvXz5FRERYuhTATLJkyXTmzBnCCAAAACRoBBEAAABI8G7fvq2IiAitXr1a+fLls3Q5gCTpzJkzatmypW7fvk0QAQAAgASNIAIAAACJRr58+VSsWDFLlwEAAAAAiQqLVQMAAAAAAAAAgHhDEAEAAAAAAAAAAOINQQQAAAAAAAAAAIg3BBEAAADAR6Rt27by8PCIl753794tg8Ggy5cvx0v/AAAAAPAyBBEAAAAALG7r1q0qUqSIbG1tlS1bNs2YMeON57Rt21YGgyHGBgAAAODjQhABAAAAIFZCQ0PjtD9/f3/VrVtXXl5eCgoK0tixYzVixAjNmzfvjeeWKVNGYWFhZhsAAACAjwtBBAAAAPARmjt3rjJnzix7e3vVqFFDf/31l+nYn3/+qUaNGiljxoyyt7dXvnz5NGfOHBmNxhh9ZMqUScmSJZOXl9d7BQhnz57VyJEjlSNHDvXu3fud+3mZb775RkWLFtXUqVOVL18+tWnTRr169dLUqVNj3NN/JU2aVC4uLmYbAAAAgI8LQQQAAADwkQkMDNSvv/6qLVu2aNeuXbpx44YaNGhg+lD+4cOH8vDw0K+//qrg4GANGjRIQ4YM0cqVK019bN68WX369FGfPn0UFBSkJk2aaODAgbGqIywsTDNnzpS7u7vy58+vgwcPavjw4Vq+fLmpzb59++To6PjaLX/+/K+9zoEDB1S9enWzfdWrV9fVq1d15cqVN/6uXFxclD17djVs2FDBwcGxukcAAAAA8c/G0gUAAAAAMBcVFaU1a9YoderUkqRVq1apYMGC8vX1VZUqVVSwYEEVLFjQ1D5Hjhw6evSo1qxZozZt2kiSpk+frkaNGmnAgAGSpM8++0ynT5/W119//dprP3z4UBs2bNDq1avl6+urokWLqmXLlvrll1/k6uoao33x4sUVFBT02j6TJEny2uNhYWExnmR48TosLEzZsmV76XleXl6qW7eucuXKpZs3b2ratGkqUaKEjhw5ogIFCrz2mgAAAAA+HIIIAAAA4COTJ08eUwghSQUKFFCKFCl06tQpValSRY8fP9aECRP0888/6/r163r69KkiIyPNPrA/ffq0GjdubNZv+fLl3xhErF+/Xu3atVP27Nm1e/dulS9f/rXt7e3tlStXrtjfZBxo1qyZ6eeCBQuqQoUKpmmqFi9ebJGaAAAAAMTE1EwAAADAJ2bgwIH69ttvNXToUO3cuVNBQUFq166dIiMj37vvunXrau7cuUqXLp08PDzk6emp5cuX6969ey9tHxdTM7m6uurGjRtm+27evGk69rZsbW3l7u6uy5cvv/U5AAAAAOIfQQQAAADwkTl37pzCw8NNr4ODg3Xv3j3TB/p79uxR8+bN1bx5cxUpUkS5cuXS+fPnzfpwc3PTwYMHzfYdOHDgjdd2dnZWz5495efnp3Pnzql8+fKaMmWK0qdPr/r16+vHH3/U48ePTe1fTM30um3r1q2vvWa5cuW0fft2s33btm1TpkyZlDVr1jfW/EJUVJROnDihzJkzv/U5AAAAAOIfQQQAAADwkbGxsVHLli11/Phx+fn5qXXr1ipWrJiqVKkiScqbN6+2bNkiPz8/nT17VgMHDlRgYKBZH/3799eGDRv0zTff6MKFC/Lx8dGqVatiVUfOnDk1atQonTt3Tvv27VPWrFnVq1cvtWzZ0tTmxdRMr9veFCb07dtXgYGBGjp0qM6ePauVK1dq7ty5Gjx4sAwGgyTpyJEjyps3r44cOSLpn7Us+vXrpwMHDujy5cs6fPiwmjRpoitXrqhHjx6xuk8AAAAA8YsgAgAAAPjIFCtWTF5eXqpZs6Y8PDyUJk0abdy40fSh/KxZs5QrVy59/vnnqlChgiIjI2N8+F6/fn19/fXX+vrrr1WoUCGtXr1aU6dOfeeaSpQooVmzZunatWuaNGnSe93fy/r+6aeftHXrVhUuXFgjR47UuHHj1LNnT1ObiIgInTt3ThEREZIka2trnT59Wg0bNtRnn32mBg0a6NmzZzp48KCKFSsWp/UBAAAAeD8Go9FotHQRAAAAQHwKDAyUu7u7AgIC+JAaHw3+LgEAAJBY8EQEAAAAAAAAAACINwQRAAAAAAAAAAAg3hBEAAAAAAAAAACAeEMQAQAAAAAAAAAA4g1BBAAAAJBA+Pj4yGAwxPo8g8EgHx+fuC8IAAAAAEQQAQAAACQYTZo0UVhYWKzPCwsLU5MmTeKhInOHDx9W2bJlZWdnJ1dXVw0ePFhRUVGvPWfMmDEyGAwxtsuXL8d7vQAAAADiho2lCwAAAAAQN+zt7WVvbx/r81xcXOKhGnN//fWXqlWrpvr162vx4sW6ePGi2rVrp+fPn2vGjBmvPTdTpkw6evSo2b60adPGZ7kAAAAA4hBPRAAAAACfgMePH6tz585KkSKFnJ2d1b17dw0dOlTZsmUztfnv1Ey7d++WwWDQtm3bVLFiRSVLlkxubm767bffzPr+EFMzLVy4UA4ODvr2229VoEAB1a1bV+PHj9f8+fP14MGD155rbW0tFxcXs83a2jpe6wUAAAAQdwgiAAAAgE/A4MGD9dNPP2nlypXy8/NTihQptGDBgrc+d9iwYTp+/LiKFy+uJk2a6M6dO2997dDQUDk6Or5xe50DBw6oWrVqZgFC9erV9eTJEwUEBLz23Bs3bihz5szKlCmTatSooYMHD7517QAAAAAsj6mZAAAAgI/co0eP5O3trTlz5qhu3bqSpMmTJ8vX11c3btx44/kjRoxQ9erVTeetWrVKR44ckZeX11tdP0OGDAoKCnrn+qV/1qEoVaqU2b4XU0K9bl2LkiVLavny5XJzc9P9+/e1cOFCVahQQdu2bVO1atXeqyYAAAAAHwZBBAAAAPCRCwkJUWRkpEqXLm22v0yZMtq0adMbzy9SpIjp5wwZMkiSbt68+dbXt7GxUa5cud66fVyqWbOm2evy5csrNDRU06dPJ4gAAAAAPhEEEQAAAMAn4t/rP8RGkiRJYvQRHR391ueHhobKzc3tje0ePnz4ymOurq4xnt54EYa4urq+dS0Gg0FlypTR5s2b3/ocAAAAAJZFEAEAAAB85HLlyqWkSZPq0KFDKlSokGm/n5/fB7l+XEzNVK5cOfn4+Cg6OlpWVv8sVbdt2zbZ2dnJ3d09Vn0FBgYqc+bM71UPAAAAgA+HIAIAAAD4yDk4OKhLly4aNWqUXF1dlTdvXq1YsUJnzpyRs7NzvF8/LqZm6tatm+bNm6cOHTpowIABunjxokaOHKkePXrIyclJknTt2jVVrVpVkydPVv369SVJ/fr1U61atZQtWzbdv39f3t7e8vX15YkIAAAA4BNCEAEAAAB8AqZOnaonT56oZcuWsrKyUvPmzdW2bVtt377d0qW9lcyZM+v3339Xv3795O7urpQpU6pjx46aOHGiqc2zZ8907tw53bt3z7QvLCxMrVu31q1bt5QiRQoVKlRIf/zxh6pUqWKJ2wAAAADwDgxGo9Fo6SIAAACA+BQYGCh3d3cFBASoWLFili4nzlSpUkVOTk48HfCJSqh/lwAAAMB/8UQEAAAA8AkIDg7W0aNHVaZMGT179kyrVq2Sr6+vtmzZYunSAAAAAOC1CCIAAACAT4CVlZUWLVqk3r17Kzo6Wnny5NGGDRtUq1YtS5cGAAAAAK9FEAEAAAB8AvLlyyc/Pz9LlwEAAAAAsWZl6QIAAAAAAAAAAEDCRRABAAAAJEBjxoxRtmzZLF0GAAAAABBEAAAAALCc4OBgNW7cWLlz55aVlZXatm370na7d+9WpUqVlDJlSqVIkUIVKlTQzp07TccvX74sg8Hw0q1Hjx6mdm3btn1pm//aunWrihQpIltbW2XLlk0zZsyI83sHAAAAEguCCAAAAAAWExERoSxZsmjUqFEqXLjwS9tcvnxZNWvWVP78+XX48GEdPnxY+fPn1xdffKFLly5JkjJnzqywsDCz7ccff5QkNW3a1Ky/MmXKxGj7b/7+/qpbt668vLwUFBSksWPHasSIEZo3b148/AYAAACAhI8gAgAAAHgH+/fvV7ly5eTk5CQnJycVLlxY27dvNx0fMWKE8ufPLwcHB2XMmFEtW7bUzZs3zfowGAyaPXu2WrRoIScnJ7m6usrb21uRkZHq06ePUqdOrfTp02vcuHFm53l4eKhNmzYaMWKE0qVLJ0dHRzVr1kx37959bc07duxQuXLlZG9vrwwZMqht27a6deuW6XhwcLC8vLyUMmVKJUuWTHnz5tWqVave/5f1GiVKlNDXX3+tVq1aKUWKFC9t4+/vr8ePH2vq1KnKkyeP8ubNq2nTpunp06c6duyYJMna2louLi5m26ZNm+Tm5qYKFSqY9Zc0adIYbf/tm2++UdGiRTV16lTly5dPbdq0Ua9evTR16lQZjcb4+UUAAAAACRhBBAAAABBLUVFRqlOnjkqVKqXAwEAFBgZq7NixSpYsmamNra2tFi5cqODgYK1bt07nz59Xs2bNYvQ1ceJEVapUSceOHVPHjh3VrVs31a9fXxkyZJCfn5/GjBmj0aNHm01DJEmbNm1SaGiofH199dNPP+nQoUPq2LHjK2vetWuX6tatq6ZNm+rEiRP6+eefdeXKFdWrV8/04XqzZs2UOnVqHTx4UKdOndKsWbPk7Oz8yj5DQ0Pl6Oj4xu19lSxZUvb29lq0aJEiIyMVGRmphQsXKlWqVCpfvvxLz7l9+7Y2bNigLl26xDgWGBgoFxcXZc+eXQ0bNlRwcLDZ8QMHDqh69epm+6pXr66rV6/qypUr730/AAAAQGJjY+kCAAAAgE/NgwcPdOfOHdWpU0e5c+eWJNP/vjBy5EjTz9myZdO8efNUqlQpXb9+XRkyZDAda9SokTp37ixJGj16tL7++mtJ0qBBg0z9zpw5U3/88YeqVq1qOi958uRatmyZkiRJovz582vevHmqXbu2Ll68qJw5c8aoedy4cerZs6d69epl2rdixQplzZpVAQEBKl68uK5cuaJ+/frJzc1NkpQjR47X/h4yZMigoKCgN/6+3leWLFnk6+urL7/8UkOGDJEkubi46Pfff1f69Olfeo6Pj4+srKzUunVrs/1eXl6qW7eucuXKpZs3b2ratGkqUaKEjhw5ogIFCkiSwsLCYjwl8eJ1WFgYi4ADAAAAsUQQAQAAAMSSs7OzOnbsKC8vL1WuXFkeHh6qX7++8uTJY2qzefNmzZw5UxcuXND9+/cVHR0t6Z/1Dv4dRBQtWtT0s42NjdKmTasiRYqYXc/V1TXGtE4lSpRQkiRJTK9fPBkQHBz80iDi6NGj8vPz04IFC2Icu3DhgooXL64BAwaoY8eOWr58uTw8PFS3bl0VK1bslb8HGxsb5cqV65XH48r//vc/tWvXTl5eXurUqZMkydvbW7Vq1dLhw4eVJUsWs/ZGo1GLFy/Wl19+qZQpU5od+/dTKQULFlSFChWUL18+zZkzR4sXL473ewEAAAASI6ZmAgAAAN7BkiVLFBAQIE9PT+3Zs0cFChTQokWLJEmHDx9WgwYNVLp0aW3YsEH+/v7auHGjJCkyMtKsn3+HCdI/60a8bN+LIONdRUdHa8CAAQoKCjLbLly4oFq1akn65ymO8+fPq0mTJgoODlbp0qU1fPjwV/b5oaZmmjdvnp49e6bFixerRIkSKlGihJYsWSIHBwctXLgwRvtdu3bpwoUL6tq16xv7trW1lbu7uy5fvmza5+rqqhs3bpi1exEEubq6vt/NAAAAAIkQT0QAAAAA76hAgQIqUKCA+vXrp65du2rhwoXq2rWr9u/fr5QpU2rKlCmmtn5+fnF6bX9/fz179swUWhw4cECSlD9//pe2L168uE6dOvXGJxhy5Mih7t27q3v37poyZYomT56siRMnvrTth5qaKSIiQlZW5t+hMhgMsrKyemlA4+3trUKFCql06dJv7DsqKkonTpwwW2uiXLly2r59u9ki4du2bVOmTJmUNWvW97gTAAAAIHEiiAAAAABiKSQkREuWLFHt2rWVOXNmXb9+Xfv27VOhQoUkSXnz5lV4eLgWL16satWqyd/fXxMmTIjTGu7du6dOnTpp0KBBCgsLU69evVS/fv2XTssk/bNGhKenp3r37q22bdsqefLkCgkJ0Y8//qiZM2fKYDBo8ODBatiwobJnz667d+9q27ZtpvUiXiYupmaKjIzU6dOnJUkPHz5UeHi4Kdx4MUVVnTp1NHPmTPXt29e0nsaiRYt06dIl1atXz6y/mzdv6qefftKsWbNiXOvhw4caNWqUGjZsqIwZM5rWiLhy5YrWrl1rate3b1+VLVtWQ4cOVZs2bXTkyBHNnTtX06dPl8FgeK/7BQAAABIjgggAAAAglhwcHHThwgU1bdpUt27dUurUqVWzZk1Nnz5dkvTFF19o9OjRGj16tHr37q1SpUpp9uzZ+uKLL+Kshvr168vV1VWVKlVSRESEatWq9dJpil6oXLmydu3apbFjx6pixYqKjo5WlixZ5OnpKVtbW0VHR+vOnTvq0KGDwsLClDx5cnl4eGjGjBlxVvPLXL9+3WydjICAAG3ZskXSP2s9SFLFihW1YcMGTZ06VcuXL5ckubm5adOmTSpTpoxZf8uXL1fSpEnVsmXLGNeytrbW6dOn9d133yk8PFxp06aVu7u7Dh48aLYWRokSJfTTTz9p2LBh+uabb+Ti4mJa7BsAAABA7BmML97dAwAAAAlUYGCg3N3dFRAQ8NrFlz8VHh4eypYtm3x8fCxdCt5DQvu7BAAAAF6FxaoBAAAAAAAAAEC8IYgAAAAAAAAAAADxhjUiAAAAgE/M7t27LV0CAAAAALw1nogAAAAAAAAAAADxhiACAAAAAAAAAADEG4IIAAAAIA4YDAb5+PhYuoy3MmbMGBkMBhkMBvXs2dPS5SQ4d+/eNf1+DQaDpcsBAAAALI4gAgAAAEiEMmXKpLCwME2ePNm079GjRxoyZIhy5MghOzs7FSxYUOvXrzc7b/v27SpTpozSpEkjOzs75cyZU8OGDdPTp09Nbf4ddPx3O3r0qKndy463bds21vdy+/ZtdenSRZkzZ5a9vb1KliwZYx2NVatWyd3dXc7OzrK3t1e+fPk0ffp0GY1GU5u2bdu+tCYrKyv973//kyRdvnz5pW3GjBlj6idFihQKCwvTrFmzYn0vAAAAQELEYtUAAABAImRtbS0XFxezfZ07d9bBgwfl7e2tnDlzauvWrWrWrJmSJ08uT09PSVLy5MnVu3dvFShQQE5OTjp27Jg6d+6sBw8eaO7cuZKkAQMGqGvXrmZ99+rVS0FBQSpevLjZ/lmzZqlJkyam1/b29rG6D6PRqPr16+vRo0dat26d0qVLpxUrVqh69ery9/dXgQIFJEnp0qXTyJEjlSdPHtna2mrfvn3q3r27rKys1L9/f0nS7NmzNWXKFLP+69WrJwcHB6VLl85s/4YNG1S2bFnTa0dHR9PPBoNBLi4uSpEiRazuBQAAAEioeCICAAAAiZaPj4+cnJz06NEjs/3z58+Xs7Oznjx5IkkaMWKE8ufPLwcHB2XMmFEtW7bUzZs3X9v3y6Zq8vDwiPGN/7lz5ypv3ryys7NT7ty5NX78eD179uy97y22njx5oh9++EHjx4+Xp6encubMqV69eqlmzZqaOHGiqV2ZMmXUtGlTFShQQFmzZlW9evXUokULsycQHB0d5eLiYtrs7e21detWde7cOcZURSlSpDBrG9sP7y9evKj9+/drzpw5KleunHLnzq0JEyYoT548mj59uqmdl5eX6tWrp3z58ilHjhxq06aNPD09zer+by3379/X4cOHY4QqkpQqVSqztv8OIgAAAACYI4gAAABAotWoUSMZjUZt3LjRbP+KFSvUpEkT2dnZSZJsbW21cOFCBQcHa926dTp//ryaNWv23tcfM2aMZsyYocmTJ+vMmTOaM2eOlixZolGjRr32PEdHxzduoaGhsarl2bNnev78uemeX7C3t5efn98rw5GzZ8/qt99+U+XKlV/Z98qVKxUVFfXSaZeGDRum1KlTq3Dhwho5cqQiIiJiVfeLsOhlde/du/el5xiNRh05ckQHDhx4bd3e3t5Knz696tWrF+NYq1atlCZNGhUvXlzffPONRcIjAAAA4FPB1EwAAABItBwdHdWgQQOtWLFCrVq1kvTPB+tHjx7V7NmzTe1Gjhxp+jlbtmyaN2+eSpUqpevXrytDhgzvdO2IiAhNmzZN69evV82aNSVJ2bNn14QJE9SjRw9NmjTplQsdBwUFvbH/2Nbl5OSkcuXKafLkyXJ3d1fWrFm1fft2bd68WZGRkbp9+7ZcXV1N7TNlyqRbt24pMjJSXbp00cyZM1/Zt7e3txo0aKC0adOa7R8zZowqV66slClTyt/fX8OHD9eePXu0Z8+et17kOW/evMqePbtGjBihFStWKHXq1Fq9erWOHDmiJEmSmLW9d++eMmbMqMjISEVHR2vUqFHq16/fS/t9+vSpVqxYoU6dOpn14+joqGnTpqlcuXKmsGPkyJE6duyYVq1a9VY1AwAAAIkNQQQAAAAStRdT9Fy9elWZMmXSypUr9dlnn6lMmTKmNps3b9bMmTN14cIF3b9/X9HR0ZL+Wbj4XYOI4OBgPX78WI0bNzb70P358+d68uSJbty4YfbB/7/lypXrna75JqtXr1bHjh2VM2dOWVlZKU+ePOrYsaPmzZsnKyvzh6n37duniIgIBQYGatCgQUqfPr3Gjh0bo88DBw4oODhY8+bNi3Fs9OjRpp8LFSqkzJkzy9PTU4cOHTJbf+F1bGxstGnTJnXs2FEuLi6ytrZWyZIl1aJFixgLbTs5OSkoKEgRERE6cOCAhg4dqowZM6pDhw4x+l2/fr3Cw8PVuXNns/1p0qTRwIEDTa+LFi2qZMmSqXPnzpoyZYoyZsz4VnUDAAAAiQlBBAAAABK1ypUrK2PGjFq1apWGDBmiNWvWqEuXLqbjhw8fVoMGDTRw4EBNmTJFzs7Ounz5sqpXr67IyMhX9mswGGQ0Gs32/Xv6nhdhxrp165QvX74Y5//36YF/e5v1CE6fPq0sWbK8sd2/Zc2aVTt27FBERITu3r2rDBkyaNCgQUqePHmMerJnzy5Jyp8/vySpbdu2GjRokBwcHMzaLVq0SHnz5pWHh8cbr/8ifLh8+fJbBxGSVLhwYR09elQPHjxQRESE0qdPry+//FI5c+Y0a2dlZWUKcQoVKqTbt29r+PDhLw0iFi1aJE9PT9N9vk3dV65cIYgAAAAAXoIgAgAAAImalZWVWrVqpZUrV6pUqVK6evWqWrdubTq+f/9+pUyZUlOmTDHt8/Pze2O/6dKl0/Xr102vHz9+rLNnzyp37tyS/vkA387OThcvXlTt2rVjVXN8TM30b8mSJVOyZMkUGRmp9evXq169ejGeiPi36OhoRUdHKzIy0iyICA8P1/r16zVp0qS3um5gYKAkKXPmzO9Ut5OTk5ycnPT3339r+/bt6tOnz2vbR0dHm9aY+LfTp09r//79MdYOeZUXdWfKlCnWNQMAAACJAUEEAAAAEr02bdpo0qRJ6t+/v6pUqWL2gXLevHkVHh6uxYsXq1q1avL399eECRPe2Ofnn3+uxYsXq3LlykqePLnGjx+vqKgo03FHR0cNGzZMI0eOlLW1tTw9PRUVFaVTp07J399f06dPf2Xf8TU1086dO/X48WO5ubnpr7/+0qhRo/T48WOzIGH69OnKnz+/cufOLYPBoKNHj2rIkCGqU6eOnJ2dzfpbsWKFpH9+v/+1ZcsWXbt2TWXLlpWTk5MCAgI0YMAAlSxZUuXKlYtV3Zs2bVLy5MmVI0cOnTt3TgMHDlTGjBnNplAaOXKkPDw8lD17dj179ky7d+/WjBkz1L59+xj9eXt7y9XV9aUBkY+Pj6ytrVWsWDHZ2tpq3759GjBggBo1ahTrJ1AAAACAxIIgAgAAAIneZ599ptKlS8vPz0+rV682O/bFF19o9OjRGj16tHr37q1SpUpp9uzZ+uKLL17b54wZM9SpUyd5eXnJ2dlZI0aM0M2bN83ajBw5UhkyZNDcuXM1cOBA2dvb67PPPjN7IuNDevDggQYNGqQrV67I0dFRXl5eWrFihdl0Q8+ePdOAAQN05coVWVtbK2vWrOrVq9dLnz5YvHixGjVqpFSpUsU4ljRpUi1dulSDBg3Ss2fPlCVLFjVr1kxDhgwxe/qibdu22r17ty5fvvzKum/evKm+ffvq+vXrSpUqlerVq6cJEyaYTWF17949denSRdeuXZOdnZ1y5MihKVOmqGvXrmZ9PX78WCtXrlTPnj1lYxNzuGRlZaVp06bpzz//lNFoVPbs2TV48GD17t37db9aAAAAIFEzGP87cS0AAACQwAQGBsrd3V0BAQEqVqyYpcuxuDFjxsjHx+e1H+5/LCpWrKh8+fLJ29vb0qXEmo+Pj9q1axdjrZAX+LsEAABAYsETEQAAAEAiFBoaKkdHR3Xp0kVff/21pct5qTt37ujcuXPatGmTpUuJlXv37iljxoxmU3EBAAAAiRlBBAAAAJDIfPXVV2rZsqUkKWXKlJYt5jWcnZ1jTGf1KXBycnqrBcUBAACAxIIgAgAAAEhkUqVK9dJ1GxA3rKys4m1BcQAAAOBTZPXmJgAAAAAAAAAAAO+GIAIAAAAAAAAAAMQbgggAAAAAAAAAABBvWCMCAAAAicaZM2csXQJgwt8jAAAAEguCCAAAACR4adKkUbJkydSyZUtLlwKYSZYsmdKkSWPpMgAAAIB4ZTAajUZLFwEAAADEt9DQUN2+fVuSdOfOHa1cuVI//PCDJKlJkyZq1aqVnJ2dLVkiEpg7d+5o1apV+v777yW9/O8sTZo0ypIli6VKBAAAAD4IgggAAAAkGv/73/80ffp0LViwQFZWVurVq5f69evHN9IRr27fvq2vv/5a8+bNU3R0tHr06KEBAwYoXbp0li4NAAAA+CAIIgAAAJDg3bx5U9OnT9fChQtlbW1tCiBSp05t6dKQiPz999/65ptvNGfOHEVHR6tbt24aOHCg0qdPb+nSAAAAgHhFEAEAAIAE68aNG5o2bZoWLVqkJEmS6KuvvlLfvn2VKlUqS5eGRCw8PFwzZ87U7NmzFRUVZQokXFxcLF0aAAAAEC8IIgAAAJDghIWFaerUqfL29lbSpEnVp08f9enThzUg8FEJDw/XrFmzNHv2bEVGRqpr164aNGiQXF1dLV0aAAAAEKcIIgAAAJBgXL9+XVOnTtXixYtla2urPn36qHfv3gQQ+KjduXNHs2fP1qxZs/T06VN17txZgwcPVoYMGSxdGgAAABAnCCIAAADwybt27ZqmTJmiJUuWyN7eXn379tVXX32llClTWro04K3dvXvXFEg8fvzYFEhkzJjR0qUBAAAA74UgAgAAAJ+sq1evmgIIBwcH9evXT7169VKKFCksXRrwzu7du6c5c+Zo5syZioiIUMeOHTVkyBBlypTJ0qUBAAAA74QgAgAAAJ+cv/76S5MnT9ayZcvk6OhoCiCSJ09u6dKAOHP//n3NnTtX33zzjR4+fKgOHTpo6NChypw5s6VLAwAAAGKFIAIAAACfjNDQUFMAkTx5cvXv3189e/aUk5OTpUsD4s39+/c1b948ff3113rw4IEpkMiSJYulSwMAAADeCkEEAAAAPnqXL1/W5MmTtXz5cqVIkUIDBgxQ9+7dCSCQqDx48EDz58/XjBkzdP/+fbVr107Dhg1T1qxZLV0aAAAA8FoEEQAAAPho/fnnn5o0aZJ8fHyUMmVKDRw4UN27d5ejo6OlSwMs5uHDh1qwYIGmT5+uu3fvmgKJbNmyWbo0AAAA4KUIIgAAAPDRuXTpkiZNmqQVK1YoVapUGjhwoLp16yYHBwdLlwZ8NB4+fKiFCxdq+vTpunPnjtq0aaNhw4YpR44cli4NAAAAMEMQAQAAgI/GxYsXNXHiRK1cuVJp0qTRoEGD1LVrVyVLlszSpQEfrUePHmnRokWaNm2a/v77b7Vp00bDhw8nkAAAAMBHgyACAAAAFhcSEqIJEyZo9erVSps2rQYNGqQuXboQQACxEBERIW9vb02dOlW3b99Wq1atNHz4cOXKlcvSpQEAACCRI4gAAACAxVy4cMEUQKRPn16DBw9W586dZW9vb+nSgE9WRESEFi9erKlTp+rWrVtq0aKFRowYody5c1u6NAAAACRSBBEAAAD44M6dO6cJEybou+++k4uLi4YMGaKOHTsSQABx6PHjx1qyZImmTJmimzdvmgKJzz77zNKlAQAAIJGxsnQBAAAASDzOnj2rFi1ayM3NTb6+vpo9e7YuXryoXr16EUIAccze3l5fffWVLl26pNmzZ2vXrl3Kly+fWrZsqbNnz1q6PAAAACQiBBEAAACId2fOnFHz5s3l5uamvXv3au7cuQoJCVHPnj1lZ2dn6fKABM3Ozk49e/ZUSEiI5syZoz179sjNzU3NmzfXmTNnLF0eAAAAEgGCCAAAAMSb4OBgNW3aVPnz59f+/fu1YMEChYSEqHv37gQQwAdmZ2enHj16KCQkRPPnz9f+/fuVP39+NWvWTKdPn7Z0eQAAAEjACCIAAAAQ506dOqUvv/xSBQsW1KFDh7Rw4UJduHBBXbt2la2traXLAxI1W1tbdevWTRcuXNDChQt18OBBFShQQE2aNNGpU6csXR4AAAASIIIIAAAAxJmTJ0+qcePGKliwoI4ePSpvb29duHBBXbp0IYAAPjK2trbq0qWLLly4oEWLFunw4cMqWLCgGjdurJMnT1q6PAAAACQgBBEAAAB4b8ePH1fDhg1VqFAh+fv7a+nSpTp//rw6deqkpEmTWro8AK+RNGlSde7cWefPn9eSJUvk7++vQoUKqVGjRjpx4oSlywMAAEACQBABAACAd3bs2DHVr19fRYoUUVBQkJYtW6bz58+rQ4cOSpIkiaXLAxALSZMmVceOHXX+/HktW7ZMgYGBKly4sBo0aKCgoCBLlwcAAIBPGEEEAAAAYi0wMFD16tVTsWLFdPLkSS1fvlxnz55V+/btCSCAT1ySJEnUvn17nTt3Tt9++61OnDihokWLql69ejp27JilywMAAMAniCACAAAAby0gIEB16tSRu7u7goODtWLFCp09e1Zt27YlgAASmCRJkqhdu3Y6e/asfHx8FBwcrGLFiqlu3boKCAiwdHkAAAD4hBBEAAAA4I2OHj2qWrVqqXjx4jp37pxWrlypM2fOqHXr1rKxsbF0eQDikY2Njdq0aaMzZ86Y/r9fvHhx1a5dW/7+/pYuDwAAAJ8AgggAAAC80pEjR/TFF1+oZMmSCgkJ0erVq3X69Gm1atWKAAJIZGxsbNSqVSudPn1aq1at0oULF1SiRAl98cUXOnLkiKXLAwAAwEeMIAIAAAAx+Pn5qUaNGipVqpQuXbqk7777TsHBwWrRooWsra0tXR4AC7KxsVHLli0VHBysNWvW6NKlSypVqpRq1qypw4cPW7o8AAAAfIQIIgAAAGBy8OBBeXl5qUyZMgoNDdXatWt16tQpNWvWjAACgBlra2s1b95cp06d0tq1a3X58mWVLl1a1atX16FDhyxdHgAAAD4iBBEAAADQgQMH5OnpqXLlyunatWv6/vvvdfLkSTVt2pQAAsBrWVtbq2nTpjp58qTWrVunq1evqmzZsvL09NSBAwcsXR4AAAA+AgQRAAAAidi+ffv0+eefq3z58goLC9OPP/6oEydO6Msvv5SVFW8VAbw9a2trNWnSRCdOnNAPP/ygsLAwlS9fXtWqVdP+/fstXR4AAAAsiNElAABAIrR3715VrVpVFStW1K1bt7R+/XodP35cjRo1IoAA8F6srKzUuHFjHT9+XOvXr9fNmzdVoUIFVa1aVXv37rV0eQAAALAARpkAAACJyO7du1W5cmVVqlRJ4eHh2rhxo44dO6aGDRsSQACIU1ZWVmrYsKGCgoK0YcMG/f3336pUqZIqV66s3bt3W7o8AAAAfECMNgEAABI4o9EoX19f0weA9+7d008//aTAwEDVr1+fAAJAvLKyslKDBg0UGBioTZs26e7du6pcubI8PDzk6+sro9Fo6RIBAAAQzxh1AgAAJFBGo1E7d+5UpUqVVKVKFT18+FCbN29WQECA6tatK4PBYOkSASQiVlZWqlevngIDA7V582bdv39fVapUUaVKlbRr1y4CCQAAgASMIAIAACCBMRqN2rFjhypUqKDPP/9cjx8/1pYtW+Tv7686deoQQACwKIPBoDp16iggIEA///yzIiIiTGvW/PHHHwQSAAAACRBBBAAAQAJhNBr1+++/q1y5cvL09FRkZKR+/fVXHTlyRLVq1SKAAPBRMRgMql27to4ePapffvlFT58+VbVq1VS+fHn9/vvvBBIAAAAJCEEEAADAJ85oNGrbtm0qW7asvLy8FB0dra1bt+rw4cOqWbMmAQSAj5rBYNAXX3yhw4cPa+vWrYqKipKXl5fKli2r7du3E0gAAAAkAAQRAAAAnyij0aitW7eqTJkyqlGjhiRp27ZtOnTokGrUqEEAAeCTYjAYVKNGDfn5+em3336TJFWvXl1lypTRb7/9RiABAADwCSOIAAAA+MQYjUb9+uuvKlWqlL744gtZW1vr999/18GDB+Xl5UUAAeCTZjAYVL16dR08eFDbt2+XtbW1atasqdKlS+vXX38lkAAAAPgEEUQAAAB8IoxGo7Zs2aKSJUuqVq1asrW11Y4dO7R//35Vq1aNAAJAgmIwGOTp6an9+/drx44dSpIkiWrVqqWSJUvql19+IZAAAAD4hBBEAAAAfOSMRqM2b96s4sWLq06dOkqWLJl27typvXv36vPPPyeAAJCgGQwGff7559q3b5/++OMP2dvbq3bt2ipRooR+/vlnAgkAAIBPAEEEAADAR8poNOqnn35SsWLFVK9ePTk5OcnX11d79uxRlSpVCCAAJCoGg0FVq1bVnj17tGvXLjk6Oqpu3bpyd3fXTz/9RCABAADwESOIAAAA+MhER0dr48aNKlq0qOrXry9nZ2ft3r1bu3fvloeHh6XLAwCLMhgMqly5snbv3i1fX1+lSJFC9evXV9GiRbVp0yZFR0dbukQAAAD8B0EEAADARyI6Olrr169X0aJF1bBhQ6VOndr0zd9KlSpZujwA+Oh4eHiYnhRLnTq1GjRooKJFi2rDhg0EEgAAAB8RgggAAAALi46O1o8//qjChQurcePGSpcunfbt26edO3eqYsWKli4PAD56FStW1M6dO7Vv3z6lS5dOjRo1UpEiRfTjjz8SSAAAAHwECCIAAAAs5Pnz5/r+++9VqFAhffnll8qQIYMOHDigHTt2qHz58pYuDwA+OeXLl9eOHTu0f/9+ubi46Msvv1ShQoX0ww8/fLKBxJgxY5QtWzZLlwEAAPBeCCIAAMBHxWAwvHH71D1//lxr165VwYIF1bRpU2XKlEkHDx7U9u3bVbZsWUuXBwCfvHLlyun333/XwYMHlSlTJjVp0kQFCxbUunXr9Pz58w9ai4+Pz0v/LWvZsuUHrQMAAMCSCCIAAMBHJSwszLRt2LBBknTkyBGz/f8WGRlpiTLfyfPnz/Xdd9+pQIECat68ubJlyyY/Pz9t27ZNZcqUsXR5AJDglClTRtu2bdOhQ4eUNWtWNWvWTAULFtR33333wQOJf/87FhYWpvnz53/Q6wMAAFgSQQQAAPiouLi4mLZUqVJJktKmTWva17RpU7Vp00ajR49WhgwZlCZNGkn/LFjatm1bs75eNp3Fjh07VK5cOdnb2ytDhgxq27atbt26Fa/3FBUVpdWrVyt//vxq0aKFcubMqcOHD2vr1q0qVapUvF4bACCVLl1aW7du1eHDh5U9e3a1aNFC+fPn15o1az5YIPHvf99cXFyUIkUKBQYGqmbNmkqfPr0cHBxUuHBhrV279rX9XL16VQ0bNlSaNGlkZ2enHDlyaPr06abjz54905gxY5Q9e3bZ2dnJzc1NCxculNFojO9bBAAAeCWCCAAA8MnZuHGjrl69qt9//1379+9/6/N27dqlunXrqmnTpjpx4oR+/vlnXblyRfXq1YuXD2iioqK0cuVKubm5qVWrVsqdO7eOHDmiX375RSVLlozz6wEAXq9kyZL69ddfdeTIEeXOnVstW7aUm5ubVq1apaioqA9ez/3799W4cWPt3LlTx48fV+vWrdWyZUvt2bPnled0795d9+7d0x9//KGzZ8/q22+/VaZMmUzHO3XqpI0bN8rb21tnzpzRmDFjNHToUC1evPhD3BIAAMBL2Vi6AAAAgNhKmzatFi9eLGtr61idN27cOPXs2VO9evUy7VuxYoWyZs2qgIAAFS9ePE7qi4qK0po1azRhwgSFhISoTp06Wrt2rdzd3eOkfwDA+ylRooS2bNmigIAAjRs3Tq1bt9b48eM1fPhwtWjRQjY2cT9UdnR0NHt96NAheXh4yMPDw7Svf//+2rlzp9asWaNKlSq9tJ8rV66ofv36KlKkiCSZPfn3559/auXKlTp16pTc3NwkSdmzZ9fZs2c1d+5cdenSJU7vCQAA4G3xRAQAAPjkuLu7xzqEkKSjR49qzpw5cnR0NG0vPqi5cOHCe9f17NkzLV++XHnz5lXbtm1VoEABBQYGavPmzYQQAPARcnd31+bNmxUQECA3Nze1bdtWefPmlY+PT5w/IREUFGS25cmTR3///bd69eqlfPnyydnZWY6OjtqxY4cuX778yn769OmjSZMmqWTJkho8eLD27t1rOubv7y+j0aiSJUua/Vs3adKkOPl3DgAA4F3xRAQAAPjkODg4xNhnZWUVY3qlZ8+emb2Ojo7WgAEDYqwlIUnp06d/53qePXumlStXatKkSbp06ZLq16+v9evXm76tCgD4uBUrVkw//fSTgoKCNG7cOLVr1870hESrVq2UJEmS975Grly5Yuxr06aNLl68qEmTJilnzpxKliyZevfurUePHr2yn3bt2ql69eratm2bfH19VaNGDdWrV09r1qxRdHS0JGnv3r1Knjz5e9cMAAAQV3giAgAAJAjp0qXT9evXzfYFBgaavS5evLhOnTqlXLlyxdicnJxifc3IyEgtXbpUn332mTp27KiiRYvq+PHj2rhxIyEEAHyCihQpoo0bNyooKEhFixZVhw4dlCdPHi1dujRGuB0X9uzZo+7du6t+/foqVKiQsmfPrvPnz7/xPFdXV7Vr104rV67UsmXL9N133+nOnTump+9CQ0Nf+m8dAACApRBEAACABOHzzz+Xr6+vvv/+e4WEhGjy5Mk6dOiQWZtx48bp119/Ve/evXXs2DFdvHhR27dvV8eOHfXgwYO3vlZkZKQWL16szz77TJ06dVKJEiV04sQJrV+/XoUKFYrrWwMAfGCFCxfW+vXrdfz4cbm7u6tTp07KnTu3lixZosjIyDi7Tt68ebV27VodP35cJ0+eVNu2bfW///3vtef07NlTW7du1cWLFxUcHKyNGzcqQ4YMSpkypXLlyqX27durS5cuWrlypUJCQnT8+HEtX75ckyZNirO6AQAAYosgAgAAJAht2rRRjx491KtXL5UoUUJhYWHq0aOHWZvKlStr165dCg4OVsWKFVWoUCH16dNHDg4OsrW1feM1nj59qkWLFil37tzq2rWrSpUqpZMnT+qHH35QwYIF4+vWAAAWUqhQIf344486efKkSpUqpS5duih37tzy9vaOk0DCx8dHVlZWKlOmjKpXr67P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pk1T6iECABIhMWtH0n954Nlnn1WWLFmUJUsWPfvss/rrr79ibDNhwgTVq1dPWbJkibNf3L59W6NGjVLlypWVOXNm5cyZU40aNdKuXbtS6NHB0zCIACxy9epVFSpUSK+88ooeeeSROLdJmzatnn76aa1evVpHjx7Vp59+qqNHj+qJJ56Ic/vx48crU6ZM8d5fcHCwJk2alGBdBQoUUFRUVIyvggULJu3BAQCSzdixY/XWW2/pzTff1E8//aRx48ZpxIgRWrBggWObGzduKHv27BoyZIjq168f777ee+89derUSc8995wiIyO1e/duDRgwQGnSpEmNhwIASKQsWbJo4MCBioiI0JEjR/T2229r4cKFGjZsWKxt7Xa72rdvrxo1asS5r44dO2rTpk1avny5vvnmG0lS/fr1deXKFcc29/79v2PHDklS27ZtU+DRAQASKzFrR3a7Xc2aNdMvv/yijRs3auPGjTp27JiaN28uu93u2O7GjRt68sknNXr06Dj3c+PGDe3YsUNDhw7Vzp07FRERoVy5cql+/fr65ZdfUuTxwbMwiECSffPNN6pTp44yZ86szJkz65FHHtGGDRsc17/88ssqX768MmXKpPz586tDhw6xprA2m03Tp09X+/btlTlzZvn7+2vevHm6efOmBg0apBw5cihPnjwaP358jNsFBgaqc+fOevnll5U7d275+vqqXbt2On/+fII1b9q0SXXq1JGPj4/y5cunLl266MyZM47rDx48qEaNGsnPz08ZM2ZUmTJltGzZsof/YSWgevXqevvtt9WxY0dlzZo1zm38/f3Vq1cvVa1aVYUKFVLdunX10ksv6cCBA/rnn39ibBsWFqZFixYpNDQ0zn0NGjRIo0ePVkhISIJ1pUmTRnnz5o3xxQIVgAdBv0geS5Ys0eDBg9WqVSsVK1ZM7du3V48ePTRhwgTHNkWKFNGMGTPUvXt35c2bN879XLx4UYMHD9bkyZM1YMAAlS1bVqVLl1br1q3jHWIDQFJx7E8etWvXVtu2bVWhQgUVLlxYTz31lNq3bx/nWc2vvfaa0qdPr8GDB8e67ueff9aqVas0e/ZsBQcHq3Llyvroo490+vRpffTRR47t7v37f/Xq1cqePbtat26dkg8TgBujHySPxKwdbd68Wfv27dPSpUtVq1Yt1apVS8uWLdOePXsUFhbm2G78+PEa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nnrqqXi3edhs0LdvX9WsWTPRZ9MdPnxY69atU1BQUKzrAgMDlTt3bj322GNasmSJjDEPVBMQ9187cBm+vr5q1aqVlixZoo4dO0r67+CxZ88eTZ8+3bHd3W8FUaRIEc2cOVM1a9bUn3/+mei3E7rX1atXNWnSJH322WeO08SKFi2q119/XX379tUbb7wR74dY7t+//777f5C6atSoodDQUJUrV04XL17UnDlzVK9ePa1fvz7Gwv/dlixZor1792rmzJnx7nfevHmqVauWKlWqFOPyvn37qkqVKo6ffWJERUUpR44cSpcuXYzL8+bNm+T3VB02bJhu3Lih6tWry2az6fbt22revLlCQ0OTtB+73a727durW7du9/0MiaSKfkz3nqadN29e7d69O1nvC0DKoNfELyoqSl9++WWsHtKkSRPNmDFDbdq0Ud26dXX48GFNnTpV0n9D47jE12tSU5MmTdS7d2998cUXevLJJ/Xnn3/qtddekxR/3QDcD8f9hL3++uu6dOmSnn/++Xi3mTdvnlq1aqVcuXLFu01UVJReffVV9evXTxkzZoxzm1WrVun06dMJ3ld8fvnlF506dUpLly7VggUL5O3trdGjRysoKEgHDx50fIZReHi4nn32WY0cOVLSf3+nb9y4UXny5HHUGX353fh7HvBM9IiYkroOdePGDS1ZskQ9e/aMtS50t4fJBkuXLtXOnTvjfQHU3QoUKKAzZ87o5s2b6tWrlyOzSJK/v79mzZqlatWqycvLS2vWrFHPnj117NgxR0YAkoJBhBvo3LmzGjZsqN9//10FChTQ0qVLVapUKdWuXduxzapVqzR16lQdPXpUFy9edHxY5okTJx64ARw8eFDXrl1T69atYxzo79y5o+vXr+v06dPy9/eP87YlSpR4oPu8n3vfN69u3bo6deqUJk+eHGcDWLVqlXr37q333ntPVapUiXOfp06d0rp16/Tee+/FuPyDDz7Q9u3btW/fvuR7AEn02WefacaMGZo/f76qV6+uU6dOafjw4erSpYs+/PDDRO/njTfe0I0bNzR27NgUrBaAK6PXxG3RokXKkCGDnnvuuRiXv/zyyzpz5oxCQkJkt9vl5+engQMH6pVXXpGXV+wTUuPrNamtW7duOnHihDp06KAbN24oQ4YMGjt2rL799ts46wbgvjjux2327NmaNGmSvvzySxUoUCDObbZv366DBw8m+EKnv//+W40aNVLlypVjfOjpvebNm6eAgACVKVMmybXa7XbduHFDS5cuVfny5SVJn3zyifz9/fXVV1/p2Wef1d9//62uXbuqUaNGjg+xnjdvnpo1a6Zdu3apUKFCSb5fAO6PHvE/SV2H+uyzz3Tu3LkEB8wPkw2OHDmiwYMHKywsLMEz96J9/fXXunr1qvbt26cRI0YoT548evXVVyVJpUuXVunSpR3bVqtWTTdv3tTUqVP1yiuvJDhIAeJConQDQUFByp8/v5YtWyZjjD744AN17tzZcf2uXbvUqlUr1apVS59//rn27t3rOIXu5s2b8e7XZrPFOt3q1q1bjn9HN5GPP/5Y+/fvd3z9+OOPOnr0aIKv/kmt06ZtNptq164d4/TjaB9//LHatm2r9957L8EzGhYsWKAsWbLE+DAeSdq0aZOOHTsmPz8/pU2bVmnTptXJkyc1fvx4pU2bVnfu3Ilzf/7+/vrnn39i/Cyl/94aKb6GGZ+hQ4eqf//+6tatmypWrKimTZtq3rx5+uijj3TkyJFE72fz5s369ttv5e3t7XgsktS9e3cVKVIkSTXdK/oxnT59OsblD/J4AViHXhOb3W7XggUL1L59+1gfWOft7a25c+fq6tWrOnHihKKiolS1alVJUvHixWPtK75ek9psNptee+01Xbp0SSdPntTZs2fVtGlTSXHXDcB9cdyPbcqUKRoxYoRWr16tkJCQeLebO3euypQpE++Zxr///rsCAgJUrFgxrVixIt6FnGPHjmnLli3q3bv3A9Xr7+8vm82msmXLOi7LnTu3cubMqZMnT0qSZs6cqVu3bjle2FS9enUtWLBAmTJl0pw5cxz7kfh7HsD/0CPil9A6lPRfj2jYsKGKFi0a7z4eJhvs2LFD586dU9WqVR3rO0uXLtXWrVuVNm1ahYWFxdi+aNGiKl++vDp27KhJkybp9ddf15UrV+Ld/2OPPaYrV67ozJkzSa4N4IwIN+Dl5aWOHTtq6dKlqlmzpn7//Xd16tTJcf0333wjPz8/TZw40XHZzp0777vf3Llzx3gbhmvXrunw4cOOz0IoX768MmTIoF9++UXNmzdPUs2pddq0JO3bt08FCxaMcdmCBQvUv39/LVu2TK1bt473trdv39Z7772nTp06Od4jO9qECRM0bNiwGJc1atRILVq00AsvvKA0adLEuc86derIbrdr8+bNatKkiaT/3ht2165dMf7fEuPq1aux7if6++gGnRihoaGxGk3FihU1fvx4PfPMM0mq6V5Vq1aVt7e3NmzYoD59+jhq27x5s7p16/ZQ+waQeug1sa1fv14nT55M8H1b06ZN63jF7IcffqiiRYvGOgMvoV5jFS8vL+XPn1/Sf3VnzpxZDRs2tLgqAKmJ435Mr7zyiqZNm6Z169apXr168W537tw5ffbZZ3rjjTfivP6XX35R/fr1Va1aNX344YcJvpp0/vz5ypkzp1q1avVANderV09LlizRzz//7Dij4p9//tHZs2cdLza6evVqrDPebDabvLy8HHmCv+cB3IsekbC41qEk6aefftI333wT6/M17vaw2eCpp55StWrVYlz28ssv648//lBoaGiCAxC73S673a6bN2/GezbFvn375OPjo5w5cya5NoBBhJvo3Lmz3njjDQ0dOlTBwcExThMuU6aMzp07p/nz56tBgwbau3evXn/99fvus379+po/f76CgoKUJUsWvfbaa7p9+7bjel9fX40aNUpjxoxRmjRp1LBhQ92+fVsHDhzQ3r17NXny5Hj3nVKnxA0ZMkTNmjVTkSJFdPHiRc2bN0/h4eFatWqVY5upU6dq+PDhmj17turVq+d4ZU+aNGliTc9Xr16tqKioOBeZ8ufP71ikiZYuXTrlzp1bFSpUcFz20ksvaffu3dqyZYskqVSpUmrRooX69u2rRYsWyc/PT6NGjVLevHmT/MFNLVu21Ntvv60SJUqoevXqOnnypAYNGqSKFSuqVKlSju2iG+65c+d0+fJlx/flypVT+vTp421E+fPnj3Ea3unTp3X69GnHHwbRZ4Rkz57dcdr2zJkzNXPmTB0+fFiSlCVLFvXu3Vsvv/yy8ufPr+LFi2vKlCm6cuWKI8gAcA30mpjmzZun6tWrq3LlyrGu+/XXX7Vt2zY99thjunTpkt577z198sknWr16dawFn4R6TWKdO3cuxiu4Tp06pf3798vX19fxc7h586Z++uknSdLly5d17tw5Rz949NFHJUkXLlzQsmXLFBwcrDt37uizzz7TxIkTNXfuXGXJkuWB6wPgmjju/2fQoEGOs45LlizpyA/p06dX9uzZY2y7ZMkSSYrxyuBoP/30k+rXr69HHnlE06ZN0z///OO4Lnv27EqfPr3j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smXLqrsapCF0MQOFChVCoUKF1F0N0iC6mANDQ0MeC3SILrbx3OTg4KDuKlAe0cWssM+aP+hi29VE7GvnD7qYJ23vG/DVTEREREREREREREREpDIciCAiIiIiIiIiIiIiIpXhQAQREREREREREREREakMByKIiIiIiIiIiIiIiEhllP6x6vDwcFXWg0gr5HUOmDvKjC60EV3YR8qZ/N5G8vv+Ue7Q5naizXUn7aPN7U2b6055Q1PbiKbWiygzmth2NbFOpHk0tZ1kOhBhZWUFU1NT9O7dOy/qQ6TxTE1NYWVlpdJtMHeUFXnRJtWBOaCsyI85YAYoq7QtB2zjpC7MCuVnmtS+2XYpP9CUTDFPlFWa0na/JBNCiMwKPXr0CDExMXlRHyKNZ2VlBUdHR5Vvh7kjZeVVm1QH5oCUlV9zwAxQVmhjDtjGSR2YFcrPNK19s+2SttOkTDFPlBWa1HbllBqIICIiIiIiIiIiIiIiyg7+WDUREREREREREREREakMByKIiIiIiIiIiIiIiEhlOBBBREREREREREREREQqw4EIIiIiIiIiIiIiIiJSGQ5EEBERERERERERERGRynAggoiIiIiIiIiIiIiIVIYDEUREREREREREREREpDIciCAiIiIiIiIiIiIiIpXhQAQREREREREREREREakMByKIiIiIiIiIiIiIiEhlOBBBREREREREREREREQqw4EIIiIiIiIiIiIiIiJSGQ5EEBERERERERERERGRynAggoiIiIiIiIiIiIiIVIYDEUREREREREREREREpDIciCAiIiIiIiIiIiIiIpXhQAQREREREREREREREakMByKIiIiIiIiIiIiIiEhlOBBBREREREREREREREQqw4EIIiIiIiIiIiIiIiJSGQ5EEBERERERERERERGRynAggoiIiIiIiIiIiIiIVIYDEUREREREREREREREpDIciCAiIiIiIiIiIiIiIpXhQAQREREREREREREREakMByKIiIiIiIiIiIiIiEhlOBBBREREREREREREREQqw4EIIiIiIiIiIiIiIiJSGQ5EEBERERERERERERGRynAggoiIiIiIiIiIiIiIVIYDEUREREREREREREREpDIciCAiIiIiIiIiIiIiIpXhQAQREREREREREREREakMByKIiIiIiIiIiIiIiEhlOBBBREREREREREREREQqw4EIIiIiIiIiIiIiIiJSGQ5EEBERERERERERERGRynAggoiIiIiIiIiIiIiIVIYDEUREREREREREREREpDIciCAiIiIiIiIiIiIiIpXhQAQREREREREREREREakMByKIiIiIiIiIiIiIiEhlOBBBREREREREREREREQqw4EIIiIiIiIiIiIiIiJSGQ5EEBERERERERERERGRynAggoiIiIiIiIiIiIiIVIYDEUREREREREREREREpDIciCAiIiIiIiIiIiIiIpXhQAQREREREREREREREakMByKIiIiIiIiIiIiIiEhlOBBBREREREREREREREQqw4EIIiIiIiIiIiIiIiJSGQ5EEBERERERERERERGRynAggoiIiIiIiIiIiIiIVIYDEUREREREREREREREpDIciCAiIiIiIiIiIiIiIpXhQAQREREREREREREREakMByKIiIiIiIiIiIiIiEhlOBBBREREREREREREREQqw4EIIiIiIiIiIiIiIiJSGQ5EEBERERERERERERGRynAggoiIiIiIiIiIiIiIVIYDEUREREREREREREREpDIciCAiIiIiIiIiIiIiIpXhQAQREREREREREREREakMByKIiIiIiIiIiIiIiEhlOBBBREREREREREREREQqw4EIIiIiIiIiIiIiIiJSGQ5EEBERERERERERERGRynAggoiIiIiIiIiIiIiIVIYDEUREREREREREREREpDIciCAiIiIiIiIiIiIiIpXhQAQREREREREREREREakMByKIiIiIiIiIiIiIiEhl/g8VbtfJrK9cjQAAAABJRU5ErkJggg==", | |
| "text/plain": [ | |
| "<Figure size 2000x1000 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "from sklearn.tree import plot_tree\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "\n", | |
| "fig, ax = plt.subplots(figsize=(20,10))\n", | |
| "\n", | |
| "# using the 1000 words extracted by CountVectorizer for the labels of the features of the decision tree (feature_names)\n", | |
| "plot_tree(pipe[1], ax=ax, feature_names=pipe[0].get_feature_names_out());" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "9bf170fe-2246-44c4-aba0-25f2f4c3f2b1", | |
| "metadata": {}, | |
| "source": [ | |
| "# Random forest performance + feature importance (top-20 most important features)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 16, | |
| "id": "02b790c5-5e2d-45a5-b248-62a624bc5770", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<style>#sk-container-id-2 {\n", | |
| " /* Definition of color scheme common for light and dark mode */\n", | |
| " --sklearn-color-text: black;\n", | |
| " --sklearn-color-line: gray;\n", | |
| " /* Definition of color scheme for unfitted estimators */\n", | |
| " --sklearn-color-unfitted-level-0: #fff5e6;\n", | |
| " --sklearn-color-unfitted-level-1: #f6e4d2;\n", | |
| " --sklearn-color-unfitted-level-2: #ffe0b3;\n", | |
| " --sklearn-color-unfitted-level-3: chocolate;\n", | |
| " /* Definition of color scheme for fitted estimators */\n", | |
| " --sklearn-color-fitted-level-0: #f0f8ff;\n", | |
| " --sklearn-color-fitted-level-1: #d4ebff;\n", | |
| " --sklearn-color-fitted-level-2: #b3dbfd;\n", | |
| " --sklearn-color-fitted-level-3: cornflowerblue;\n", | |
| "\n", | |
| " /* Specific color for light theme */\n", | |
| " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n", | |
| " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n", | |
| " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n", | |
| " --sklearn-color-icon: #696969;\n", | |
| "\n", | |
| " @media (prefers-color-scheme: dark) {\n", | |
| " /* Redefinition of color scheme for dark theme */\n", | |
| " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n", | |
| " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n", | |
| " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n", | |
| " --sklearn-color-icon: #878787;\n", | |
| " }\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 pre {\n", | |
| " padding: 0;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 input.sk-hidden--visually {\n", | |
| " border: 0;\n", | |
| " clip: rect(1px 1px 1px 1px);\n", | |
| " clip: rect(1px, 1px, 1px, 1px);\n", | |
| " height: 1px;\n", | |
| " margin: -1px;\n", | |
| " overflow: hidden;\n", | |
| " padding: 0;\n", | |
| " position: absolute;\n", | |
| " width: 1px;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-dashed-wrapped {\n", | |
| " border: 1px dashed var(--sklearn-color-line);\n", | |
| " margin: 0 0.4em 0.5em 0.4em;\n", | |
| " box-sizing: border-box;\n", | |
| " padding-bottom: 0.4em;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-container {\n", | |
| " /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n", | |
| " but bootstrap.min.css set `[hidden] { display: none !important; }`\n", | |
| " so we also need the `!important` here to be able to override the\n", | |
| " default hidden behavior on the sphinx rendered scikit-learn.org.\n", | |
| " See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n", | |
| " display: inline-block !important;\n", | |
| " position: relative;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-text-repr-fallback {\n", | |
| " display: none;\n", | |
| "}\n", | |
| "\n", | |
| "div.sk-parallel-item,\n", | |
| "div.sk-serial,\n", | |
| "div.sk-item {\n", | |
| " /* draw centered vertical line to link estimators */\n", | |
| " background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n", | |
| " background-size: 2px 100%;\n", | |
| " background-repeat: no-repeat;\n", | |
| " background-position: center center;\n", | |
| "}\n", | |
| "\n", | |
| "/* Parallel-specific style estimator block */\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-parallel-item::after {\n", | |
| " content: \"\";\n", | |
| " width: 100%;\n", | |
| " border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n", | |
| " flex-grow: 1;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-parallel {\n", | |
| " display: flex;\n", | |
| " align-items: stretch;\n", | |
| " justify-content: center;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " position: relative;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-parallel-item {\n", | |
| " display: flex;\n", | |
| " flex-direction: column;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-parallel-item:first-child::after {\n", | |
| " align-self: flex-end;\n", | |
| " width: 50%;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-parallel-item:last-child::after {\n", | |
| " align-self: flex-start;\n", | |
| " width: 50%;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-parallel-item:only-child::after {\n", | |
| " width: 0;\n", | |
| "}\n", | |
| "\n", | |
| "/* Serial-specific style estimator block */\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-serial {\n", | |
| " display: flex;\n", | |
| " flex-direction: column;\n", | |
| " align-items: center;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " padding-right: 1em;\n", | |
| " padding-left: 1em;\n", | |
| "}\n", | |
| "\n", | |
| "\n", | |
| "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n", | |
| "clickable and can be expanded/collapsed.\n", | |
| "- Pipeline and ColumnTransformer use this feature and define the default style\n", | |
| "- Estimators will overwrite some part of the style using the `sk-estimator` class\n", | |
| "*/\n", | |
| "\n", | |
| "/* Pipeline and ColumnTransformer style (default) */\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-toggleable {\n", | |
| " /* Default theme specific background. It is overwritten whether we have a\n", | |
| " specific estimator or a Pipeline/ColumnTransformer */\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| "}\n", | |
| "\n", | |
| "/* Toggleable label */\n", | |
| "#sk-container-id-2 label.sk-toggleable__label {\n", | |
| " cursor: pointer;\n", | |
| " display: block;\n", | |
| " width: 100%;\n", | |
| " margin-bottom: 0;\n", | |
| " padding: 0.5em;\n", | |
| " box-sizing: border-box;\n", | |
| " text-align: center;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 label.sk-toggleable__label-arrow:before {\n", | |
| " /* Arrow on the left of the label */\n", | |
| " content: \"▸\";\n", | |
| " float: left;\n", | |
| " margin-right: 0.25em;\n", | |
| " color: var(--sklearn-color-icon);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| "}\n", | |
| "\n", | |
| "/* Toggleable content - dropdown */\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-toggleable__content {\n", | |
| " max-height: 0;\n", | |
| " max-width: 0;\n", | |
| " overflow: hidden;\n", | |
| " text-align: left;\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-toggleable__content.fitted {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-toggleable__content pre {\n", | |
| " margin: 0.2em;\n", | |
| " border-radius: 0.25em;\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-toggleable__content.fitted pre {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n", | |
| " /* Expand drop-down */\n", | |
| " max-height: 200px;\n", | |
| " max-width: 100%;\n", | |
| " overflow: auto;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n", | |
| " content: \"▾\";\n", | |
| "}\n", | |
| "\n", | |
| "/* Pipeline/ColumnTransformer-specific style */\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Estimator-specific style */\n", | |
| "\n", | |
| "/* Colorize estimator box */\n", | |
| "#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-label label.sk-toggleable__label,\n", | |
| "#sk-container-id-2 div.sk-label label {\n", | |
| " /* The background is the default theme color */\n", | |
| " color: var(--sklearn-color-text-on-default-background);\n", | |
| "}\n", | |
| "\n", | |
| "/* On hover, darken the color of the background */\n", | |
| "#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Label box, darken color on hover, fitted */\n", | |
| "#sk-container-id-2 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Estimator label */\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-label label {\n", | |
| " font-family: monospace;\n", | |
| " font-weight: bold;\n", | |
| " display: inline-block;\n", | |
| " line-height: 1.2em;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-label-container {\n", | |
| " text-align: center;\n", | |
| "}\n", | |
| "\n", | |
| "/* Estimator-specific */\n", | |
| "#sk-container-id-2 div.sk-estimator {\n", | |
| " font-family: monospace;\n", | |
| " border: 1px dotted var(--sklearn-color-border-box);\n", | |
| " border-radius: 0.25em;\n", | |
| " box-sizing: border-box;\n", | |
| " margin-bottom: 0.5em;\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-estimator.fitted {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "/* on hover */\n", | |
| "#sk-container-id-2 div.sk-estimator:hover {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 div.sk-estimator.fitted:hover {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n", | |
| "\n", | |
| "/* Common style for \"i\" and \"?\" */\n", | |
| "\n", | |
| ".sk-estimator-doc-link,\n", | |
| "a:link.sk-estimator-doc-link,\n", | |
| "a:visited.sk-estimator-doc-link {\n", | |
| " float: right;\n", | |
| " font-size: smaller;\n", | |
| " line-height: 1em;\n", | |
| " font-family: monospace;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " border-radius: 1em;\n", | |
| " height: 1em;\n", | |
| " width: 1em;\n", | |
| " text-decoration: none !important;\n", | |
| " margin-left: 1ex;\n", | |
| " /* unfitted */\n", | |
| " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n", | |
| " color: var(--sklearn-color-unfitted-level-1);\n", | |
| "}\n", | |
| "\n", | |
| ".sk-estimator-doc-link.fitted,\n", | |
| "a:link.sk-estimator-doc-link.fitted,\n", | |
| "a:visited.sk-estimator-doc-link.fitted {\n", | |
| " /* fitted */\n", | |
| " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n", | |
| " color: var(--sklearn-color-fitted-level-1);\n", | |
| "}\n", | |
| "\n", | |
| "/* On hover */\n", | |
| "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n", | |
| ".sk-estimator-doc-link:hover,\n", | |
| "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n", | |
| ".sk-estimator-doc-link:hover {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-3);\n", | |
| " color: var(--sklearn-color-background);\n", | |
| " text-decoration: none;\n", | |
| "}\n", | |
| "\n", | |
| "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n", | |
| ".sk-estimator-doc-link.fitted:hover,\n", | |
| "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n", | |
| ".sk-estimator-doc-link.fitted:hover {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-3);\n", | |
| " color: var(--sklearn-color-background);\n", | |
| " text-decoration: none;\n", | |
| "}\n", | |
| "\n", | |
| "/* Span, style for the box shown on hovering the info icon */\n", | |
| ".sk-estimator-doc-link span {\n", | |
| " display: none;\n", | |
| " z-index: 9999;\n", | |
| " position: relative;\n", | |
| " font-weight: normal;\n", | |
| " right: .2ex;\n", | |
| " padding: .5ex;\n", | |
| " margin: .5ex;\n", | |
| " width: min-content;\n", | |
| " min-width: 20ex;\n", | |
| " max-width: 50ex;\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " box-shadow: 2pt 2pt 4pt #999;\n", | |
| " /* unfitted */\n", | |
| " background: var(--sklearn-color-unfitted-level-0);\n", | |
| " border: .5pt solid var(--sklearn-color-unfitted-level-3);\n", | |
| "}\n", | |
| "\n", | |
| ".sk-estimator-doc-link.fitted span {\n", | |
| " /* fitted */\n", | |
| " background: var(--sklearn-color-fitted-level-0);\n", | |
| " border: var(--sklearn-color-fitted-level-3);\n", | |
| "}\n", | |
| "\n", | |
| ".sk-estimator-doc-link:hover span {\n", | |
| " display: block;\n", | |
| "}\n", | |
| "\n", | |
| "/* \"?\"-specific style due to the `<a>` HTML tag */\n", | |
| "\n", | |
| "#sk-container-id-2 a.estimator_doc_link {\n", | |
| " float: right;\n", | |
| " font-size: 1rem;\n", | |
| " line-height: 1em;\n", | |
| " font-family: monospace;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " border-radius: 1rem;\n", | |
| " height: 1rem;\n", | |
| " width: 1rem;\n", | |
| " text-decoration: none;\n", | |
| " /* unfitted */\n", | |
| " color: var(--sklearn-color-unfitted-level-1);\n", | |
| " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 a.estimator_doc_link.fitted {\n", | |
| " /* fitted */\n", | |
| " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n", | |
| " color: var(--sklearn-color-fitted-level-1);\n", | |
| "}\n", | |
| "\n", | |
| "/* On hover */\n", | |
| "#sk-container-id-2 a.estimator_doc_link:hover {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-3);\n", | |
| " color: var(--sklearn-color-background);\n", | |
| " text-decoration: none;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-2 a.estimator_doc_link.fitted:hover {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-3);\n", | |
| "}\n", | |
| "</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>Pipeline(steps=[('countvectorizer',\n", | |
| " CountVectorizer(max_features=1000, stop_words='english')),\n", | |
| " ('randomforestclassifier', RandomForestClassifier(n_jobs=-1))])</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" ><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> Pipeline<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.pipeline.Pipeline.html\">?<span>Documentation for Pipeline</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>Pipeline(steps=[('countvectorizer',\n", | |
| " CountVectorizer(max_features=1000, stop_words='english')),\n", | |
| " ('randomforestclassifier', RandomForestClassifier(n_jobs=-1))])</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-5\" type=\"checkbox\" ><label for=\"sk-estimator-id-5\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> CountVectorizer<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html\">?<span>Documentation for CountVectorizer</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>CountVectorizer(max_features=1000, stop_words='english')</pre></div> </div></div><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-6\" type=\"checkbox\" ><label for=\"sk-estimator-id-6\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> RandomForestClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>RandomForestClassifier(n_jobs=-1)</pre></div> </div></div></div></div></div></div>" | |
| ], | |
| "text/plain": [ | |
| "Pipeline(steps=[('countvectorizer',\n", | |
| " CountVectorizer(max_features=1000, stop_words='english')),\n", | |
| " ('randomforestclassifier', RandomForestClassifier(n_jobs=-1))])" | |
| ] | |
| }, | |
| "execution_count": 16, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "from sklearn.ensemble import RandomForestClassifier\n", | |
| "\n", | |
| "# pipeline with term frequency, 1000 most common words, and a random forest\n", | |
| "pipe = make_pipeline(\n", | |
| " CountVectorizer(max_features=1_000, stop_words=\"english\"),\n", | |
| " RandomForestClassifier(n_jobs=-1) # n_jobs=-1 to use all possible workers (https://scikit-learn.org/stable/glossary.html#term-n_jobs)\n", | |
| ")\n", | |
| "pipe.fit(X_train, y_train)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 17, | |
| "id": "c0c2c812-5dc7-4b75-bb59-13e4f20a9e8a", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "\n", | |
| "# get index of the 20 most important features (according to the random forest's feature importance)\n", | |
| "ndx_most_important = np.argsort(pipe[1].feature_importances_)[-20:]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 18, | |
| "id": "4b1ba0c5-47cc-4313-9986-773fee1e824c", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Text(0.5, 0, 'Feature importance')" | |
| ] | |
| }, | |
| "execution_count": 18, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAGwCAYAAACNeeBZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABht0lEQVR4nO3deVhUZf8/8PdhG9YZZEnARnEBBAVEUUNSRqUg0zTLLQwplyxRSS3lKhUkxSx3H1v0UbTIpVyy3DJqSElRTJCUEAmCpyhNhRHNYTu/P/x6fk3gQgPOML5f13Wur+ec+9znc99PX+Zz3ec+9xFEURRBRERERP+KmaEDICIiImrJmEwRERER6YHJFBEREZEemEwRERER6YHJFBEREZEemEwRERER6YHJFBEREZEeLAwdgKmrq6vDb7/9BgcHBwiCYOhwiIiI6B6IooirV6/Cw8MDZmZ3HntiMtXMfvvtNyiVSkOHQURERP9CaWkpHn744TuWYTLVzBwcHADc/B9DLpcbOBoiIiK6FxqNBkqlUvodvxMmU83s1qM9uVzOZIqIiKiFuZcpOpyATkRERKQHJlNEREREemAyRURERKQHJlNEREREemAyRURERKQHJlNEREREemAyRURERKQHJlNEREREemAyRURERKQHJlNEREREemAyRURERKQHJlNEREREemAyRURERKQHJlNEREREerAwdAAPiq7zD8JMZmvoMIiIiExG8eInDR0CAI5MEREREenFZJMplUqFuLi4Jq1TrVZDEASUl5c3ab1ERETUcplsMkVERER0PzCZIiIiItKDSSdTNTU1iI2NhUKhgIuLC+bOnQtRFAEAH330EYKDg+Hg4AA3Nzc899xzuHDhgs71+/btg7e3N2xsbNC/f38UFxcboBVERERkzEw6mdq0aRMsLCxw/PhxrFy5EsuWLcP69esBANXV1UhKSkJOTg52796N4uJixMTESNeWlpZi+PDhGDJkCLKzszFhwgTMmTPnrvfUarXQaDQ6GxEREZkuk14aQalUYvny5RAEAT4+PsjNzcXy5csxceJEvPjii1K5Dh06YNWqVejZsycqKythb2+P9957Dx07dsTSpUsBQLr+7bffvuM9k5OTkZiY2KztIiIiIuNh0iNTjzzyCARBkPZDQkJQUFCA2tpanDx5EkOGDEHbtm3h4OCAsLAwAEBJ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yWjfvj1sbGwQGBiIzz77DKIoIjw8HBEREbj14uDly5fx8MMPY968edL1X3zxBXr27Alra2u4uLjg6aefls5ptVrMmjULbdq0gZ2dHXr37g21Wt2o+NavXw9fX19YW1ujc+fOWLt2rXSuuLgYgiBg586d6N+/P2xtbREYGIijR48CANRqNV544QVUVFRAEAQIgoCEhIR/31lERERkMposmUpOTsbmzZvx/vvv48yZM3j11VcxduxYfPfdd9i0aRNOnDiBVatWAQAmT56MNm3aSMnU3r178fTTT2PQoEE4deoU0tLS0KtXL6nu2NhYHD16FFu3bsXp06cxYsQIREZGoqCg4J5iS01Nxbx587Bw4ULk5eVh0aJFmDt3LjZt2qRT7o033sCsWbOQnZ0Nb29vjBkzBjU1NejTpw9WrFgBuVyOsrIylJWVYdasWQ3eS6vVQqPR6GxERERkuppkaQStVotFixbh66+/RkhICACgQ4cOOHLkCD744AN88skn+OCDDxAdHY3ff/8d+/btw6lTp2BhcfP2CxcuxOjRo5GYmCjVGRgYCODmR483btyIkpISeHh4AABmzZqFAwcOYOPGjVi0aNFd45s/fz6WLl2K4cOHAwDat2+Ps2fP4oMPPsC4ceOkcrNmzcKTT958TTwxMRFdunTB+fPn0blzZygUCgiCADc3tzveKzk5WacdREREZNqaJJk6f/48rl+/jscee0zneFVVFYKCggAAI0aMwK5du7B48WK899578PLyksplZ2dj4sSJDdadm5uL2tpaeHt76xzXarVwdna+a2zXrl1DYWEhxo8fr3OPmpoaKBQKnbIBAQHSv93d3QEAFy5cQOfOne96n1vi4+MxY8YMaV+j0UCpVN7z9URERNSyNEkyVVlZCeDm47o2bdronJPJZACA69ev4+TJkzA3N6/3eM7GxuaOdZubm0vX/p29vf09x7Zu3Tr07t1b59w/67O0tJT+LQgCgJtzwRpDJpNJbSYiIiLT1yTJlJ+fH2QyGUpKShAWFtZgmZkzZ8LMzAz79+/HoEGD8OSTT2LAgAEAbo4IpaWl4YUXXqh3XVBQEGpra3HhwgX07du30bG1bt0aHh4e+PnnnxEVFdXo62+xsrJCbW3tv76eiIiITFOTJFMODg6YNWsWXn31VdTV1eHRRx9FRUUFMjIyIJfL4eLigg0bNuDo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MzP4+PhIx4KCghAfH4/vv/8eXbt2xSeffAIA6N69O/Lz89GpU6d6m5mZGXx9fVFaWqrTln/GQ0RERPSvvs2XmZmJtLQ0PP7443jooYeQmZmJixcvwtfXF3Z2dpgxYwb27t2Ljh07YtmyZSgvL69XR0ZGBpYsWYJhw4bh0KFD+PTTT7F3716dMp9++imCg4Px6KOPIjU1FcePH8d///tfAEBUVBTmz5+PcePGISEhARcvXsTUqVPx/PPPo3Xr1igqKsKHH36Ip556Ch4eHsjPz0dBQQGio6MBAPPmzcPgwYPRtm1bPPvsszAzM0NOTg5+/PFHvPXWWwgPD4e3tzfGjRuHd955BxqNBm+88ca/6S4iIiIyYf8qmZLL5fjuu++wYsUKaDQatGvXDkuXLsUTTzyB6upq5OTkIDo6GhYWFnj11VfRv3//enXMnDkTWVlZSExMhFwux7JlyxAREaFTJjExEVu3bsUrr7wCd3d3bNmyBX5+fgAAW1tbHDx4ENOnT0fPnj1ha2uLZ555BsuWLZPO//TTT9i0aRMuXboEd3d3TJkyBS+99BIAICIiAl9++SUWLFiAt99+G5aWlujcuTMmTJgAADAzM8OuXbswfvx49OrVC56enli1ahUiIyP/TZcRERGRifpXb/Ppy9PTE3FxcfXWo/o7QRDu+NZcS9GYtwGIiIjIODT723xEREREdBOTKSIiIiI9/Ks5U/oqLi6+axkDPH0kIiIiajSOTBERERHpgckUERERkR6YTBERERHpgckUERERkR6YTBERERHpgckUERERkR6YTBERERHpgckUERERkR6YTBERERHpgckUERERkR6YTBERERHpgckUERERkR4M8qHjB8mtDzZrNBoDR0JERET36tbv9q3f8TthMtXMLl26BABQKpUGjoSIiIga6+rVq1AoFHcsw2SqmTk5OQEASkpK7vo/Bt07jUYDpVKJ0tJSyOVyQ4djMtivTY992jzYr82D/fr/iaKIq1evwsPD465lmUw1MzOzm9PSFArFA/8fZnOQy+Xs12bAfm167NPmwX5tHuzXm+51EIQT0ImIiIj0wGSKiIiISA9MppqZTCbD/PnzIZPJDB2KSWG/Ng/2a9NjnzYP9mvzYL/+O4J4L+/8EREREVGDODJFREREpAcmU0RERER6YDJFREREpAcmU0RERER6YDJ1F//5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sXfv3qJCoRCtra1FX19fcdGiReKNGzeatZ33W1P368aNG0UA9bb58+dLZf766y/xlVdeEVu1aiXa2tqKTz/9tE6y1dLd7z4tKSkR+/XrJzo5OYkymUzs1KmT+Nprr5nUOlOi2LT9emuZiYa2b7/9VirHv61N368Pyt/WuxFEURTv3zgYERERkWnhnCkiIiIiPTCZIiIiItIDkykiIiIiPTCZIiIiItIDkykiIiIiPTCZIiIiItIDkykiIiIiPTCZIiIiItIDkykiogaoVCrExcUZOgwiagGYTBFRo8XExEAQhHrb+fPnm6T+lJQUODo6Nkld/9bOnTuRlJRk0BjuRK1WQxAElJeXGzoUogeehaEDIKKWKTIyEhs3btQ55urqaqBobq+6uhqWlpaNvs7JyakZomka1dXVhg6BiP6GI1NE9K/IZDK4ubnpbObm5gCAzz//HN27d4e1tTU6dOiAxMRE1NTUSNcuW7YM/v7+sLOzg1KpxCuvvILKykoAN0dcXnjhBVRUVEgjXgkJCQAAQRCwe/dunTgcHR2RkpICACguLoYgCNi2bRvCwsJgbW2N1NRUAMD69evh6+sLa2trdO7cGWvXrr1j+/75mM/T0xNvvfUWoqOjYW9vj3bt2mHPnj24ePEihg4dCnt7ewQEBCArK0u65tYI2+7du+Hl5QVra2tERESgtLRU517vvfceOnbsCCsrK/j4+OCjjz7SOS8IAt577z089dRTsLOzw8SJE9G/f38AQKtWrSAIAmJiYgAABw4cwKOPPgpHR0c4Oztj8ODBKCwslOq61Uc7d+5E//79YWtri8DAQBw9elTnnhkZGVCpVLC1tUWrVq0QERGBK1euAADq6uqQnJyM9u3bw8bGBoGBgfjss8/u2J9EJs3QX1omopZn3Lhx4tChQxs8991334lyuVxMSUkRCwsLxa+++kr09PQUExISpDLLly8Xv/nmG7GoqEhMS0sTfXx8xJdfflkURVHUarXiihUrRLlcLpaVlYllZWXi1atXRVEURQDirl27dO6nUCjEjRs3iqL4/79y7+npKe7YsUP8+eefxd9++038+OOPRXd3d+nYjh07RCcnJzElJeW2bQwLCxOnT58u7bdr1050cnIS33//ffHcuXPiyy+/LMrlcjEyMlLcvn27mJ+fLw4bNkz09fUV6+rqRFEUxY0bN4qWlpZi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", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig, ax = plt.subplots()\n", | |
| "\n", | |
| "ax.barh(pipe[0].get_feature_names_out()[ndx_most_important], pipe[1].feature_importances_[ndx_most_important])\n", | |
| "ax.set_xlabel(\"Feature importance\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 19, | |
| "id": "bfe10f7f-501f-4f38-9cd4-64b8f24b4559", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<style>#sk-container-id-3 {\n", | |
| " /* Definition of color scheme common for light and dark mode */\n", | |
| " --sklearn-color-text: black;\n", | |
| " --sklearn-color-line: gray;\n", | |
| " /* Definition of color scheme for unfitted estimators */\n", | |
| " --sklearn-color-unfitted-level-0: #fff5e6;\n", | |
| " --sklearn-color-unfitted-level-1: #f6e4d2;\n", | |
| " --sklearn-color-unfitted-level-2: #ffe0b3;\n", | |
| " --sklearn-color-unfitted-level-3: chocolate;\n", | |
| " /* Definition of color scheme for fitted estimators */\n", | |
| " --sklearn-color-fitted-level-0: #f0f8ff;\n", | |
| " --sklearn-color-fitted-level-1: #d4ebff;\n", | |
| " --sklearn-color-fitted-level-2: #b3dbfd;\n", | |
| " --sklearn-color-fitted-level-3: cornflowerblue;\n", | |
| "\n", | |
| " /* Specific color for light theme */\n", | |
| " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n", | |
| " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n", | |
| " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n", | |
| " --sklearn-color-icon: #696969;\n", | |
| "\n", | |
| " @media (prefers-color-scheme: dark) {\n", | |
| " /* Redefinition of color scheme for dark theme */\n", | |
| " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n", | |
| " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n", | |
| " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n", | |
| " --sklearn-color-icon: #878787;\n", | |
| " }\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 pre {\n", | |
| " padding: 0;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 input.sk-hidden--visually {\n", | |
| " border: 0;\n", | |
| " clip: rect(1px 1px 1px 1px);\n", | |
| " clip: rect(1px, 1px, 1px, 1px);\n", | |
| " height: 1px;\n", | |
| " margin: -1px;\n", | |
| " overflow: hidden;\n", | |
| " padding: 0;\n", | |
| " position: absolute;\n", | |
| " width: 1px;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-dashed-wrapped {\n", | |
| " border: 1px dashed var(--sklearn-color-line);\n", | |
| " margin: 0 0.4em 0.5em 0.4em;\n", | |
| " box-sizing: border-box;\n", | |
| " padding-bottom: 0.4em;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-container {\n", | |
| " /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n", | |
| " but bootstrap.min.css set `[hidden] { display: none !important; }`\n", | |
| " so we also need the `!important` here to be able to override the\n", | |
| " default hidden behavior on the sphinx rendered scikit-learn.org.\n", | |
| " See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n", | |
| " display: inline-block !important;\n", | |
| " position: relative;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-text-repr-fallback {\n", | |
| " display: none;\n", | |
| "}\n", | |
| "\n", | |
| "div.sk-parallel-item,\n", | |
| "div.sk-serial,\n", | |
| "div.sk-item {\n", | |
| " /* draw centered vertical line to link estimators */\n", | |
| " background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n", | |
| " background-size: 2px 100%;\n", | |
| " background-repeat: no-repeat;\n", | |
| " background-position: center center;\n", | |
| "}\n", | |
| "\n", | |
| "/* Parallel-specific style estimator block */\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-parallel-item::after {\n", | |
| " content: \"\";\n", | |
| " width: 100%;\n", | |
| " border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n", | |
| " flex-grow: 1;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-parallel {\n", | |
| " display: flex;\n", | |
| " align-items: stretch;\n", | |
| " justify-content: center;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " position: relative;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-parallel-item {\n", | |
| " display: flex;\n", | |
| " flex-direction: column;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-parallel-item:first-child::after {\n", | |
| " align-self: flex-end;\n", | |
| " width: 50%;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-parallel-item:last-child::after {\n", | |
| " align-self: flex-start;\n", | |
| " width: 50%;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-parallel-item:only-child::after {\n", | |
| " width: 0;\n", | |
| "}\n", | |
| "\n", | |
| "/* Serial-specific style estimator block */\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-serial {\n", | |
| " display: flex;\n", | |
| " flex-direction: column;\n", | |
| " align-items: center;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " padding-right: 1em;\n", | |
| " padding-left: 1em;\n", | |
| "}\n", | |
| "\n", | |
| "\n", | |
| "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n", | |
| "clickable and can be expanded/collapsed.\n", | |
| "- Pipeline and ColumnTransformer use this feature and define the default style\n", | |
| "- Estimators will overwrite some part of the style using the `sk-estimator` class\n", | |
| "*/\n", | |
| "\n", | |
| "/* Pipeline and ColumnTransformer style (default) */\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-toggleable {\n", | |
| " /* Default theme specific background. It is overwritten whether we have a\n", | |
| " specific estimator or a Pipeline/ColumnTransformer */\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| "}\n", | |
| "\n", | |
| "/* Toggleable label */\n", | |
| "#sk-container-id-3 label.sk-toggleable__label {\n", | |
| " cursor: pointer;\n", | |
| " display: block;\n", | |
| " width: 100%;\n", | |
| " margin-bottom: 0;\n", | |
| " padding: 0.5em;\n", | |
| " box-sizing: border-box;\n", | |
| " text-align: center;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 label.sk-toggleable__label-arrow:before {\n", | |
| " /* Arrow on the left of the label */\n", | |
| " content: \"▸\";\n", | |
| " float: left;\n", | |
| " margin-right: 0.25em;\n", | |
| " color: var(--sklearn-color-icon);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| "}\n", | |
| "\n", | |
| "/* Toggleable content - dropdown */\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-toggleable__content {\n", | |
| " max-height: 0;\n", | |
| " max-width: 0;\n", | |
| " overflow: hidden;\n", | |
| " text-align: left;\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-toggleable__content.fitted {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-toggleable__content pre {\n", | |
| " margin: 0.2em;\n", | |
| " border-radius: 0.25em;\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-toggleable__content.fitted pre {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n", | |
| " /* Expand drop-down */\n", | |
| " max-height: 200px;\n", | |
| " max-width: 100%;\n", | |
| " overflow: auto;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n", | |
| " content: \"▾\";\n", | |
| "}\n", | |
| "\n", | |
| "/* Pipeline/ColumnTransformer-specific style */\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Estimator-specific style */\n", | |
| "\n", | |
| "/* Colorize estimator box */\n", | |
| "#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-label label.sk-toggleable__label,\n", | |
| "#sk-container-id-3 div.sk-label label {\n", | |
| " /* The background is the default theme color */\n", | |
| " color: var(--sklearn-color-text-on-default-background);\n", | |
| "}\n", | |
| "\n", | |
| "/* On hover, darken the color of the background */\n", | |
| "#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Label box, darken color on hover, fitted */\n", | |
| "#sk-container-id-3 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Estimator label */\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-label label {\n", | |
| " font-family: monospace;\n", | |
| " font-weight: bold;\n", | |
| " display: inline-block;\n", | |
| " line-height: 1.2em;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-label-container {\n", | |
| " text-align: center;\n", | |
| "}\n", | |
| "\n", | |
| "/* Estimator-specific */\n", | |
| "#sk-container-id-3 div.sk-estimator {\n", | |
| " font-family: monospace;\n", | |
| " border: 1px dotted var(--sklearn-color-border-box);\n", | |
| " border-radius: 0.25em;\n", | |
| " box-sizing: border-box;\n", | |
| " margin-bottom: 0.5em;\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-estimator.fitted {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "/* on hover */\n", | |
| "#sk-container-id-3 div.sk-estimator:hover {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 div.sk-estimator.fitted:hover {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n", | |
| "\n", | |
| "/* Common style for \"i\" and \"?\" */\n", | |
| "\n", | |
| ".sk-estimator-doc-link,\n", | |
| "a:link.sk-estimator-doc-link,\n", | |
| "a:visited.sk-estimator-doc-link {\n", | |
| " float: right;\n", | |
| " font-size: smaller;\n", | |
| " line-height: 1em;\n", | |
| " font-family: monospace;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " border-radius: 1em;\n", | |
| " height: 1em;\n", | |
| " width: 1em;\n", | |
| " text-decoration: none !important;\n", | |
| " margin-left: 1ex;\n", | |
| " /* unfitted */\n", | |
| " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n", | |
| " color: var(--sklearn-color-unfitted-level-1);\n", | |
| "}\n", | |
| "\n", | |
| ".sk-estimator-doc-link.fitted,\n", | |
| "a:link.sk-estimator-doc-link.fitted,\n", | |
| "a:visited.sk-estimator-doc-link.fitted {\n", | |
| " /* fitted */\n", | |
| " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n", | |
| " color: var(--sklearn-color-fitted-level-1);\n", | |
| "}\n", | |
| "\n", | |
| "/* On hover */\n", | |
| "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n", | |
| ".sk-estimator-doc-link:hover,\n", | |
| "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n", | |
| ".sk-estimator-doc-link:hover {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-3);\n", | |
| " color: var(--sklearn-color-background);\n", | |
| " text-decoration: none;\n", | |
| "}\n", | |
| "\n", | |
| "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n", | |
| ".sk-estimator-doc-link.fitted:hover,\n", | |
| "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n", | |
| ".sk-estimator-doc-link.fitted:hover {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-3);\n", | |
| " color: var(--sklearn-color-background);\n", | |
| " text-decoration: none;\n", | |
| "}\n", | |
| "\n", | |
| "/* Span, style for the box shown on hovering the info icon */\n", | |
| ".sk-estimator-doc-link span {\n", | |
| " display: none;\n", | |
| " z-index: 9999;\n", | |
| " position: relative;\n", | |
| " font-weight: normal;\n", | |
| " right: .2ex;\n", | |
| " padding: .5ex;\n", | |
| " margin: .5ex;\n", | |
| " width: min-content;\n", | |
| " min-width: 20ex;\n", | |
| " max-width: 50ex;\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " box-shadow: 2pt 2pt 4pt #999;\n", | |
| " /* unfitted */\n", | |
| " background: var(--sklearn-color-unfitted-level-0);\n", | |
| " border: .5pt solid var(--sklearn-color-unfitted-level-3);\n", | |
| "}\n", | |
| "\n", | |
| ".sk-estimator-doc-link.fitted span {\n", | |
| " /* fitted */\n", | |
| " background: var(--sklearn-color-fitted-level-0);\n", | |
| " border: var(--sklearn-color-fitted-level-3);\n", | |
| "}\n", | |
| "\n", | |
| ".sk-estimator-doc-link:hover span {\n", | |
| " display: block;\n", | |
| "}\n", | |
| "\n", | |
| "/* \"?\"-specific style due to the `<a>` HTML tag */\n", | |
| "\n", | |
| "#sk-container-id-3 a.estimator_doc_link {\n", | |
| " float: right;\n", | |
| " font-size: 1rem;\n", | |
| " line-height: 1em;\n", | |
| " font-family: monospace;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " border-radius: 1rem;\n", | |
| " height: 1rem;\n", | |
| " width: 1rem;\n", | |
| " text-decoration: none;\n", | |
| " /* unfitted */\n", | |
| " color: var(--sklearn-color-unfitted-level-1);\n", | |
| " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 a.estimator_doc_link.fitted {\n", | |
| " /* fitted */\n", | |
| " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n", | |
| " color: var(--sklearn-color-fitted-level-1);\n", | |
| "}\n", | |
| "\n", | |
| "/* On hover */\n", | |
| "#sk-container-id-3 a.estimator_doc_link:hover {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-3);\n", | |
| " color: var(--sklearn-color-background);\n", | |
| " text-decoration: none;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-3 a.estimator_doc_link.fitted:hover {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-3);\n", | |
| "}\n", | |
| "</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>Pipeline(steps=[('countvectorizer',\n", | |
| " CountVectorizer(max_features=1000, stop_words='english')),\n", | |
| " ('randomforestclassifier', RandomForestClassifier(n_jobs=-1))])</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-7\" type=\"checkbox\" ><label for=\"sk-estimator-id-7\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> Pipeline<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.pipeline.Pipeline.html\">?<span>Documentation for Pipeline</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>Pipeline(steps=[('countvectorizer',\n", | |
| " CountVectorizer(max_features=1000, stop_words='english')),\n", | |
| " ('randomforestclassifier', RandomForestClassifier(n_jobs=-1))])</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-8\" type=\"checkbox\" ><label for=\"sk-estimator-id-8\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> CountVectorizer<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html\">?<span>Documentation for CountVectorizer</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>CountVectorizer(max_features=1000, stop_words='english')</pre></div> </div></div><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-9\" type=\"checkbox\" ><label for=\"sk-estimator-id-9\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> RandomForestClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>RandomForestClassifier(n_jobs=-1)</pre></div> </div></div></div></div></div></div>" | |
| ], | |
| "text/plain": [ | |
| "Pipeline(steps=[('countvectorizer',\n", | |
| " CountVectorizer(max_features=1000, stop_words='english')),\n", | |
| " ('randomforestclassifier', RandomForestClassifier(n_jobs=-1))])" | |
| ] | |
| }, | |
| "execution_count": 19, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "pipe" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 20, | |
| "id": "d951b515-6e35-4a8f-9e86-f693d4eeb737", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "0.81936" | |
| ] | |
| }, | |
| "execution_count": 20, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "accuracy_score(y_test, pipe.predict(X_test))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "22782057-8342-4e3b-ace9-3beebe67a1fb", | |
| "metadata": {}, | |
| "source": [ | |
| "# Grid search for TF + decision tree" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 21, | |
| "id": "337643db-8bf5-4fdd-b56c-3ae30ce6c5fa", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "pipe = make_pipeline(\n", | |
| " CountVectorizer(stop_words=\"english\"),\n", | |
| " DecisionTreeClassifier()\n", | |
| ")\n", | |
| "pipe.fit(X_train, y_train)\n", | |
| "\n", | |
| "# this grid has a total of 3 * 4 * 3 = 36 possible configurations\n", | |
| "grid = {\n", | |
| " \"countvectorizer__max_features\": [100, 500, 1000],\n", | |
| " \"decisiontreeclassifier__max_depth\": [3, 5, 10, None ],\n", | |
| " \"decisiontreeclassifier__min_impurity_decrease\": [0.0, 0.01, 0.1],\n", | |
| "}" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 22, | |
| "id": "4ae4fb59-e723-48ce-95bd-e9de977a9874", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<style>#sk-container-id-4 {\n", | |
| " /* Definition of color scheme common for light and dark mode */\n", | |
| " --sklearn-color-text: black;\n", | |
| " --sklearn-color-line: gray;\n", | |
| " /* Definition of color scheme for unfitted estimators */\n", | |
| " --sklearn-color-unfitted-level-0: #fff5e6;\n", | |
| " --sklearn-color-unfitted-level-1: #f6e4d2;\n", | |
| " --sklearn-color-unfitted-level-2: #ffe0b3;\n", | |
| " --sklearn-color-unfitted-level-3: chocolate;\n", | |
| " /* Definition of color scheme for fitted estimators */\n", | |
| " --sklearn-color-fitted-level-0: #f0f8ff;\n", | |
| " --sklearn-color-fitted-level-1: #d4ebff;\n", | |
| " --sklearn-color-fitted-level-2: #b3dbfd;\n", | |
| " --sklearn-color-fitted-level-3: cornflowerblue;\n", | |
| "\n", | |
| " /* Specific color for light theme */\n", | |
| " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n", | |
| " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n", | |
| " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n", | |
| " --sklearn-color-icon: #696969;\n", | |
| "\n", | |
| " @media (prefers-color-scheme: dark) {\n", | |
| " /* Redefinition of color scheme for dark theme */\n", | |
| " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n", | |
| " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n", | |
| " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n", | |
| " --sklearn-color-icon: #878787;\n", | |
| " }\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 pre {\n", | |
| " padding: 0;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 input.sk-hidden--visually {\n", | |
| " border: 0;\n", | |
| " clip: rect(1px 1px 1px 1px);\n", | |
| " clip: rect(1px, 1px, 1px, 1px);\n", | |
| " height: 1px;\n", | |
| " margin: -1px;\n", | |
| " overflow: hidden;\n", | |
| " padding: 0;\n", | |
| " position: absolute;\n", | |
| " width: 1px;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-dashed-wrapped {\n", | |
| " border: 1px dashed var(--sklearn-color-line);\n", | |
| " margin: 0 0.4em 0.5em 0.4em;\n", | |
| " box-sizing: border-box;\n", | |
| " padding-bottom: 0.4em;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-container {\n", | |
| " /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n", | |
| " but bootstrap.min.css set `[hidden] { display: none !important; }`\n", | |
| " so we also need the `!important` here to be able to override the\n", | |
| " default hidden behavior on the sphinx rendered scikit-learn.org.\n", | |
| " See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n", | |
| " display: inline-block !important;\n", | |
| " position: relative;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-text-repr-fallback {\n", | |
| " display: none;\n", | |
| "}\n", | |
| "\n", | |
| "div.sk-parallel-item,\n", | |
| "div.sk-serial,\n", | |
| "div.sk-item {\n", | |
| " /* draw centered vertical line to link estimators */\n", | |
| " background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n", | |
| " background-size: 2px 100%;\n", | |
| " background-repeat: no-repeat;\n", | |
| " background-position: center center;\n", | |
| "}\n", | |
| "\n", | |
| "/* Parallel-specific style estimator block */\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-parallel-item::after {\n", | |
| " content: \"\";\n", | |
| " width: 100%;\n", | |
| " border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n", | |
| " flex-grow: 1;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-parallel {\n", | |
| " display: flex;\n", | |
| " align-items: stretch;\n", | |
| " justify-content: center;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " position: relative;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-parallel-item {\n", | |
| " display: flex;\n", | |
| " flex-direction: column;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-parallel-item:first-child::after {\n", | |
| " align-self: flex-end;\n", | |
| " width: 50%;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-parallel-item:last-child::after {\n", | |
| " align-self: flex-start;\n", | |
| " width: 50%;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-parallel-item:only-child::after {\n", | |
| " width: 0;\n", | |
| "}\n", | |
| "\n", | |
| "/* Serial-specific style estimator block */\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-serial {\n", | |
| " display: flex;\n", | |
| " flex-direction: column;\n", | |
| " align-items: center;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " padding-right: 1em;\n", | |
| " padding-left: 1em;\n", | |
| "}\n", | |
| "\n", | |
| "\n", | |
| "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n", | |
| "clickable and can be expanded/collapsed.\n", | |
| "- Pipeline and ColumnTransformer use this feature and define the default style\n", | |
| "- Estimators will overwrite some part of the style using the `sk-estimator` class\n", | |
| "*/\n", | |
| "\n", | |
| "/* Pipeline and ColumnTransformer style (default) */\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-toggleable {\n", | |
| " /* Default theme specific background. It is overwritten whether we have a\n", | |
| " specific estimator or a Pipeline/ColumnTransformer */\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| "}\n", | |
| "\n", | |
| "/* Toggleable label */\n", | |
| "#sk-container-id-4 label.sk-toggleable__label {\n", | |
| " cursor: pointer;\n", | |
| " display: block;\n", | |
| " width: 100%;\n", | |
| " margin-bottom: 0;\n", | |
| " padding: 0.5em;\n", | |
| " box-sizing: border-box;\n", | |
| " text-align: center;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 label.sk-toggleable__label-arrow:before {\n", | |
| " /* Arrow on the left of the label */\n", | |
| " content: \"▸\";\n", | |
| " float: left;\n", | |
| " margin-right: 0.25em;\n", | |
| " color: var(--sklearn-color-icon);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 label.sk-toggleable__label-arrow:hover:before {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| "}\n", | |
| "\n", | |
| "/* Toggleable content - dropdown */\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-toggleable__content {\n", | |
| " max-height: 0;\n", | |
| " max-width: 0;\n", | |
| " overflow: hidden;\n", | |
| " text-align: left;\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-toggleable__content.fitted {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-toggleable__content pre {\n", | |
| " margin: 0.2em;\n", | |
| " border-radius: 0.25em;\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-toggleable__content.fitted pre {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n", | |
| " /* Expand drop-down */\n", | |
| " max-height: 200px;\n", | |
| " max-width: 100%;\n", | |
| " overflow: auto;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n", | |
| " content: \"▾\";\n", | |
| "}\n", | |
| "\n", | |
| "/* Pipeline/ColumnTransformer-specific style */\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Estimator-specific style */\n", | |
| "\n", | |
| "/* Colorize estimator box */\n", | |
| "#sk-container-id-4 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-label label.sk-toggleable__label,\n", | |
| "#sk-container-id-4 div.sk-label label {\n", | |
| " /* The background is the default theme color */\n", | |
| " color: var(--sklearn-color-text-on-default-background);\n", | |
| "}\n", | |
| "\n", | |
| "/* On hover, darken the color of the background */\n", | |
| "#sk-container-id-4 div.sk-label:hover label.sk-toggleable__label {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Label box, darken color on hover, fitted */\n", | |
| "#sk-container-id-4 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Estimator label */\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-label label {\n", | |
| " font-family: monospace;\n", | |
| " font-weight: bold;\n", | |
| " display: inline-block;\n", | |
| " line-height: 1.2em;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-label-container {\n", | |
| " text-align: center;\n", | |
| "}\n", | |
| "\n", | |
| "/* Estimator-specific */\n", | |
| "#sk-container-id-4 div.sk-estimator {\n", | |
| " font-family: monospace;\n", | |
| " border: 1px dotted var(--sklearn-color-border-box);\n", | |
| " border-radius: 0.25em;\n", | |
| " box-sizing: border-box;\n", | |
| " margin-bottom: 0.5em;\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-estimator.fitted {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-0);\n", | |
| "}\n", | |
| "\n", | |
| "/* on hover */\n", | |
| "#sk-container-id-4 div.sk-estimator:hover {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 div.sk-estimator.fitted:hover {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-2);\n", | |
| "}\n", | |
| "\n", | |
| "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n", | |
| "\n", | |
| "/* Common style for \"i\" and \"?\" */\n", | |
| "\n", | |
| ".sk-estimator-doc-link,\n", | |
| "a:link.sk-estimator-doc-link,\n", | |
| "a:visited.sk-estimator-doc-link {\n", | |
| " float: right;\n", | |
| " font-size: smaller;\n", | |
| " line-height: 1em;\n", | |
| " font-family: monospace;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " border-radius: 1em;\n", | |
| " height: 1em;\n", | |
| " width: 1em;\n", | |
| " text-decoration: none !important;\n", | |
| " margin-left: 1ex;\n", | |
| " /* unfitted */\n", | |
| " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n", | |
| " color: var(--sklearn-color-unfitted-level-1);\n", | |
| "}\n", | |
| "\n", | |
| ".sk-estimator-doc-link.fitted,\n", | |
| "a:link.sk-estimator-doc-link.fitted,\n", | |
| "a:visited.sk-estimator-doc-link.fitted {\n", | |
| " /* fitted */\n", | |
| " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n", | |
| " color: var(--sklearn-color-fitted-level-1);\n", | |
| "}\n", | |
| "\n", | |
| "/* On hover */\n", | |
| "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n", | |
| ".sk-estimator-doc-link:hover,\n", | |
| "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n", | |
| ".sk-estimator-doc-link:hover {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-3);\n", | |
| " color: var(--sklearn-color-background);\n", | |
| " text-decoration: none;\n", | |
| "}\n", | |
| "\n", | |
| "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n", | |
| ".sk-estimator-doc-link.fitted:hover,\n", | |
| "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n", | |
| ".sk-estimator-doc-link.fitted:hover {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-3);\n", | |
| " color: var(--sklearn-color-background);\n", | |
| " text-decoration: none;\n", | |
| "}\n", | |
| "\n", | |
| "/* Span, style for the box shown on hovering the info icon */\n", | |
| ".sk-estimator-doc-link span {\n", | |
| " display: none;\n", | |
| " z-index: 9999;\n", | |
| " position: relative;\n", | |
| " font-weight: normal;\n", | |
| " right: .2ex;\n", | |
| " padding: .5ex;\n", | |
| " margin: .5ex;\n", | |
| " width: min-content;\n", | |
| " min-width: 20ex;\n", | |
| " max-width: 50ex;\n", | |
| " color: var(--sklearn-color-text);\n", | |
| " box-shadow: 2pt 2pt 4pt #999;\n", | |
| " /* unfitted */\n", | |
| " background: var(--sklearn-color-unfitted-level-0);\n", | |
| " border: .5pt solid var(--sklearn-color-unfitted-level-3);\n", | |
| "}\n", | |
| "\n", | |
| ".sk-estimator-doc-link.fitted span {\n", | |
| " /* fitted */\n", | |
| " background: var(--sklearn-color-fitted-level-0);\n", | |
| " border: var(--sklearn-color-fitted-level-3);\n", | |
| "}\n", | |
| "\n", | |
| ".sk-estimator-doc-link:hover span {\n", | |
| " display: block;\n", | |
| "}\n", | |
| "\n", | |
| "/* \"?\"-specific style due to the `<a>` HTML tag */\n", | |
| "\n", | |
| "#sk-container-id-4 a.estimator_doc_link {\n", | |
| " float: right;\n", | |
| " font-size: 1rem;\n", | |
| " line-height: 1em;\n", | |
| " font-family: monospace;\n", | |
| " background-color: var(--sklearn-color-background);\n", | |
| " border-radius: 1rem;\n", | |
| " height: 1rem;\n", | |
| " width: 1rem;\n", | |
| " text-decoration: none;\n", | |
| " /* unfitted */\n", | |
| " color: var(--sklearn-color-unfitted-level-1);\n", | |
| " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 a.estimator_doc_link.fitted {\n", | |
| " /* fitted */\n", | |
| " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n", | |
| " color: var(--sklearn-color-fitted-level-1);\n", | |
| "}\n", | |
| "\n", | |
| "/* On hover */\n", | |
| "#sk-container-id-4 a.estimator_doc_link:hover {\n", | |
| " /* unfitted */\n", | |
| " background-color: var(--sklearn-color-unfitted-level-3);\n", | |
| " color: var(--sklearn-color-background);\n", | |
| " text-decoration: none;\n", | |
| "}\n", | |
| "\n", | |
| "#sk-container-id-4 a.estimator_doc_link.fitted:hover {\n", | |
| " /* fitted */\n", | |
| " background-color: var(--sklearn-color-fitted-level-3);\n", | |
| "}\n", | |
| "</style><div id=\"sk-container-id-4\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=3,\n", | |
| " estimator=Pipeline(steps=[('countvectorizer',\n", | |
| " CountVectorizer(stop_words='english')),\n", | |
| " ('decisiontreeclassifier',\n", | |
| " DecisionTreeClassifier())]),\n", | |
| " n_jobs=-1,\n", | |
| " param_grid={'countvectorizer__max_features': [100, 500, 1000],\n", | |
| " 'decisiontreeclassifier__max_depth': [3, 5, 10, None],\n", | |
| " 'decisiontreeclassifier__min_impurity_decrease': [0.0,\n", | |
| " 0.01,\n", | |
| " 0.1]},\n", | |
| " scoring='accuracy')</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-10\" type=\"checkbox\" ><label for=\"sk-estimator-id-10\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> GridSearchCV<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.model_selection.GridSearchCV.html\">?<span>Documentation for GridSearchCV</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>GridSearchCV(cv=3,\n", | |
| " estimator=Pipeline(steps=[('countvectorizer',\n", | |
| " CountVectorizer(stop_words='english')),\n", | |
| " ('decisiontreeclassifier',\n", | |
| " DecisionTreeClassifier())]),\n", | |
| " n_jobs=-1,\n", | |
| " param_grid={'countvectorizer__max_features': [100, 500, 1000],\n", | |
| " 'decisiontreeclassifier__max_depth': [3, 5, 10, None],\n", | |
| " 'decisiontreeclassifier__min_impurity_decrease': [0.0,\n", | |
| " 0.01,\n", | |
| " 0.1]},\n", | |
| " scoring='accuracy')</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-11\" type=\"checkbox\" ><label for=\"sk-estimator-id-11\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">best_estimator_: Pipeline</label><div class=\"sk-toggleable__content fitted\"><pre>Pipeline(steps=[('countvectorizer',\n", | |
| " CountVectorizer(max_features=1000, stop_words='english')),\n", | |
| " ('decisiontreeclassifier',\n", | |
| " DecisionTreeClassifier(max_depth=10))])</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-12\" type=\"checkbox\" ><label for=\"sk-estimator-id-12\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> CountVectorizer<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html\">?<span>Documentation for CountVectorizer</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>CountVectorizer(max_features=1000, stop_words='english')</pre></div> </div></div><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-13\" type=\"checkbox\" ><label for=\"sk-estimator-id-13\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> DecisionTreeClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.tree.DecisionTreeClassifier.html\">?<span>Documentation for DecisionTreeClassifier</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>DecisionTreeClassifier(max_depth=10)</pre></div> </div></div></div></div></div></div></div></div></div></div></div>" | |
| ], | |
| "text/plain": [ | |
| "GridSearchCV(cv=3,\n", | |
| " estimator=Pipeline(steps=[('countvectorizer',\n", | |
| " CountVectorizer(stop_words='english')),\n", | |
| " ('decisiontreeclassifier',\n", | |
| " DecisionTreeClassifier())]),\n", | |
| " n_jobs=-1,\n", | |
| " param_grid={'countvectorizer__max_features': [100, 500, 1000],\n", | |
| " 'decisiontreeclassifier__max_depth': [3, 5, 10, None],\n", | |
| " 'decisiontreeclassifier__min_impurity_decrease': [0.0,\n", | |
| " 0.01,\n", | |
| " 0.1]},\n", | |
| " scoring='accuracy')" | |
| ] | |
| }, | |
| "execution_count": 22, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "from sklearn.model_selection import GridSearchCV, RandomizedSearchCV\n", | |
| "\n", | |
| "gs = GridSearchCV(pipe, grid, scoring=\"accuracy\", cv=3, n_jobs=-1)\n", | |
| "\n", | |
| "# RandomizedSearchCV performs a hyperparameter search. Instead of running the entire\n", | |
| "# grid of all parameters, it randomly samples `n_iter` configurations.\n", | |
| "# gs = RandomizedSearchCV(pipe, grid, n_iter=10, scoring=\"accuracy\", cv=3, n_jobs=-1)\n", | |
| "\n", | |
| "gs.fit(X_train, y_train)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 23, | |
| "id": "184f00c3-115e-4ae6-8e63-24543bb77a5f", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{'countvectorizer__max_features': 1000,\n", | |
| " 'decisiontreeclassifier__max_depth': 10,\n", | |
| " 'decisiontreeclassifier__min_impurity_decrease': 0.0}" | |
| ] | |
| }, | |
| "execution_count": 23, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "gs.best_params_" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 24, | |
| "id": "ec8e01f5-0c62-4c87-a0f3-9a5a030ca406", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "0.71328\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# best_estimator_ has been retrained with the best_params_ config and the entire training set. \n", | |
| "# We can now measure its accuracy on the test set\n", | |
| "y_pred = gs.best_estimator_.predict(X_test)\n", | |
| "acc = accuracy_score(y_test, y_pred)\n", | |
| "print(acc)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 25, | |
| "id": "39e836a7-3483-4e17-b382-58fab371d2a4", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Text(0, 0.5, 'Accuracy')" | |
| ] | |
| }, | |
| "execution_count": 25, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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ddon0FTkOAZBMwYIAKrjdABatGiR3nvvvXO2v/fee3r11Ved2teSJUs0depUzZgxQxs3blTv3r01YsQIHT16tNL2xcXFGj58uPbv36+lS5dq165deumllyqMPXJ2n0BTwhggAKgZpwPQrFmzFB4efs721q1b64knnnBqX3PmzNGECRM0fvx4devWTQsWLFBgYKAWLlxYafuFCxfqxIkTWr58uQYNGqS4uDhdfPHF6t27d633KUlFRUXKzc2t8ADcjd1uKLtsFhhjgACgWk4HoLS0NMXHx5+zPTY2VmlpaTXeT3FxsTZs2KDk5OTyYqxWJScna82aNZW+5qOPPlJSUpImT56siIgI9ejRQ0888YRj9ena7FMqDXUhISGOR0xMTI2PA2gs8ovPyG6U/pkeIAContMBqHXr1tqyZcs523/++We1bNmyxvvJysqSzWZTREREhe0RERHKyMio9DX79u3T0qVLZbPZ9Omnn+rhhx/Wf/7zHz3++OO13qckTZs2TTk5OY7HwYMHa3wcQGOR89sAaH8fq/x9vEyuBgAaN6dngd1444268847FRQUpKFDh0qSVq1apSlTpuiGG25weYFns9vtat26tV588UV5eXkpISFBhw8f1lNPPVWnu9T7+fnJz8/PhZUCDY/xPwBQc04HoMcee0z79+/XsGHD5O1d+nK73a6xY8c6NQYoPDxcXl5eyszMrLA9MzNTkZGRlb4mKipKPj4+8vIq/7/brl27KiMjQ8XFxbXaJ9BUlE+BZwYYAJyP05fAfH19tWTJEu3atUtvvvmmli1bpr1792rhwoXy9a35F6+vr68SEhIq3D7DbrcrJSVFSUlJlb5m0KBB2rNnj+x2u2Pbr7/+qqioKPn6+tZqn0BTkX26dAA0iyACwPk53QNUpmPHjurYsWOd/vKpU6dq3Lhx6tevn/r376+5c+eqoKBA48ePlySNHTtWbdq00axZsyRJkyZN0nPPPacpU6bojjvu0O7du/XEE0/ozjvvrPE+gabKsQYQl8AA4LycDkDXXnut+vfvr/vvv7/C9tmzZ+vHH3+sdI2gqowZM0bHjh3T9OnTlZGRoT59+mjFihWOQcxpaWmyWss7qWJiYvT555/r7rvvVq9evdSmTRtNmTKlQi3n2yfQVJVdAmMMEACcn8UwDMOZF7Rq1Upff/21evbsWWH71q1blZyc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95gAlKIHCEClDMOoUbudO3cqJiZGMTExjm3dunVTaGiodu7c6dgWFxenoKAgx/OoqCinem927dolb29v9e3b17GtQ4cOCgsLq/E+ztavX78Kz/Pz83Xvvfeqa9euCg0NVfPmzbVz505HD1BN7dy585xLUoMGDapwLiSpV69ejj83a9ZMwcHB1Z4Pf39/xcXFacuWLbr88ssVHx+vX375RUOGDFGXLl0UFxfHbDTACQyCBlCpjh07ymKxuGygs4+PT4XnFotFdrvdJfsuY7WW/j/d2eGtpKSk0ra/v6x377336ssvv9TTTz+tDh06KCAgQNddd129za5y9nw0b95cklRUVCSr1aoPP/xQxcXFMgxDzZs315AhQ/TZZ5/VS61AU0QPEIBKtWjRQiNGjND8+fNVUFBwzs+zs7MlSV27dtXBgwd18OBBx8927Nih7OxsdevWzWX1dO7cWWfOnNGmTZsc2/bs2aOTJ086nrdq1UqSKozPOXtAdHW+//573XLLLbr66qvVs2dPRUZGav/+/RXa+Pr6ymazVbufrl276vvvvz9n33U9F5s3b9ZPP/0kLy8vpaSkaPPmzWrZsqXeffddbd68WS+//HKd9g94GgIQgCrNnz9fNptN/fv31/vvv6/du3dr586dmjdvnpKSkiRJycnJ6tmzp2666SZt3LhR69ev19ixY3XxxRefc5mpLrp06aLk5GRNnDhR69ev16ZNmzRx4kQFBAQ4ZmQFBARowIABjsHNq1at0kMPPVSj/Xfs2FHLli3T5s2b9fPPP+vPf/7zOT0ycXFx+vbbb3X48GFlZWVVup/77rtPixcv1vPPP6/du3drzpw5WrZsme699946HX+HDh2UnZ2tiIgIDR48WL6+vsrLy9NVV12lDh06qE2bNnXaP+BpCEAAqtSuXTtt3LhRf/jDH3TPPfeoR48eGj58uFJSUvT8889LKr108+GHHyosLExDhw5VcnKy2rVrpyVLlri8ntdee00REREaOnSorr76ak2YMEFBQUHy9/d3tFm4cKHOnDmjhIQE3XXXXXr88cdrtO85c+YoLCxMAwcO1FVXXaURI0ZUGG8kSTNnztT+/fvVvn17R2/T740ePVr//e9/9fTTT6t79+564YUXtGjRIl1yySW1Pu4yK1eu1NChQyVJq1atUlJSUq3XLwI8ncWo6UhHAGhkDh06pJiYGH311VcaNmyY2eUAcCMEIABu4+uvv1Z+fr569uyp9PR0/fOf/9Thw4f166+/njOoGACqQ98pALdRUlKiBx98UPv27VNQUJAGDhyoN998k/ADwGn0AAEAAI/DIGgAAOBxCEAAAMDjEIAAAIDHIQABAACPQwACAAAehwAEAAA8DgEIAAB4HAIQAADwOP8PJ1moBobfNYIAAAAASUVORK5CYII=", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig, ax = plt.subplots()\n", | |
| "\n", | |
| "# plotting the performance across all 36 configurations (ordered by performance)\n", | |
| "# we note that some models (the first 12) have performance equal to random guess.\n", | |
| "# The other configurations are progressively better, with two achieving peak performance.\n", | |
| "ax.plot(np.sort(gs.cv_results_[\"mean_test_score\"]))\n", | |
| "ax.axhline(acc, ls='--', c='r') # showing the test performance for reference\n", | |
| "ax.set_xlabel(\"Configuration #\")\n", | |
| "ax.set_ylabel(\"Accuracy\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 26, | |
| "id": "9785d3b4-20b3-4945-b326-483ddd222071", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([{'countvectorizer__max_features': 500, 'decisiontreeclassifier__max_depth': 5, 'decisiontreeclassifier__min_impurity_decrease': 0.1},\n", | |
| " {'countvectorizer__max_features': 1000, 'decisiontreeclassifier__max_depth': 10, 'decisiontreeclassifier__min_impurity_decrease': 0.1},\n", | |
| " {'countvectorizer__max_features': 1000, 'decisiontreeclassifier__max_depth': 5, 'decisiontreeclassifier__min_impurity_decrease': 0.1},\n", | |
| " {'countvectorizer__max_features': 1000, 'decisiontreeclassifier__max_depth': 3, 'decisiontreeclassifier__min_impurity_decrease': 0.1},\n", | |
| " {'countvectorizer__max_features': 500, 'decisiontreeclassifier__max_depth': None, 'decisiontreeclassifier__min_impurity_decrease': 0.1},\n", | |
| " {'countvectorizer__max_features': 500, 'decisiontreeclassifier__max_depth': 10, 'decisiontreeclassifier__min_impurity_decrease': 0.1},\n", | |
| " {'countvectorizer__max_features': 500, 'decisiontreeclassifier__max_depth': 3, 'decisiontreeclassifier__min_impurity_decrease': 0.1},\n", | |
| " {'countvectorizer__max_features': 100, 'decisiontreeclassifier__max_depth': None, 'decisiontreeclassifier__min_impurity_decrease': 0.1},\n", | |
| " {'countvectorizer__max_features': 1000, 'decisiontreeclassifier__max_depth': None, 'decisiontreeclassifier__min_impurity_decrease': 0.1},\n", | |
| " {'countvectorizer__max_features': 100, 'decisiontreeclassifier__max_depth': 3, 'decisiontreeclassifier__min_impurity_decrease': 0.1},\n", | |
| " {'countvectorizer__max_features': 100, 'decisiontreeclassifier__max_depth': 10, 'decisiontreeclassifier__min_impurity_decrease': 0.1},\n", | |
| " {'countvectorizer__max_features': 100, 'decisiontreeclassifier__max_depth': 5, 'decisiontreeclassifier__min_impurity_decrease': 0.1}],\n", | |
| " dtype=object)" | |
| ] | |
| }, | |
| "execution_count": 26, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# showing the worse models (worse 12). They all share the same min_impurity_decrease=0.1\n", | |
| "# (Indeed, this choice of min_impurity_decrease is too restrictive, the trees are not expanded\n", | |
| "# and the final model consists only of a root). \n", | |
| "np.array(gs.cv_results_[\"params\"])[np.argsort(gs.cv_results_[\"mean_test_score\"])][:12]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "id": "26f911aa-1666-483e-b89b-4fe439d4ca1f", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3 (ipykernel)", | |
| "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.12.4" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 5 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment