{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example: Automated feature scaling\n", "------------------------------------\n", "\n", "This example shows how ATOM handles models that require automated feature scaling.\n", "\n", "Import the breast cancer dataset from [sklearn.datasets](https://scikit-learn.org/stable/datasets/index.html#wine-dataset). This is a small and easy to train dataset whose goal is to predict whether a patient has breast cancer or not." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load the data" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Import packages\n", "from sklearn.datasets import load_breast_cancer\n", "from atom import ATOMClassifier" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Load the data\n", "X, y = load_breast_cancer(return_X_y=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Run the pipeline" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "<< ================== ATOM ================== >>\n", "Algorithm task: binary classification.\n", "\n", "Dataset stats ==================== >>\n", "Shape: (569, 31)\n", "Train set size: 456\n", "Test set size: 113\n", "-------------------------------------\n", "Memory: 141.24 kB\n", "Scaled: False\n", "Outlier values: 167 (1.2%)\n", "\n" ] } ], "source": [ "atom = ATOMClassifier(X, y, verbose=2, random_state=1)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
acronymmodelneeds_scaling
0AdaBAdaBoostFalse
1BagBaggingFalse
2BNBBernoulliNBFalse
3CatBCatBoostTrue
4CatNBCategoricalNBFalse
5CNBComplementNBFalse
6TreeDecisionTreeFalse
7DummyDummyFalse
8ETreeExtraTreeFalse
9ETExtraTreesFalse
10GNBGaussianNBFalse
11GPGaussianProcessFalse
12GBMGradientBoostingFalse
13hGBMHistGradientBoostingFalse
14KNNKNearestNeighborsTrue
15LGBLightGBMTrue
16LDALinearDiscriminantAnalysisFalse
17lSVMLinearSVMTrue
18LRLogisticRegressionTrue
19MLPMultiLayerPerceptronTrue
20MNBMultinomialNBFalse
21PAPassiveAggressiveTrue
22PercPerceptronTrue
23QDAQuadraticDiscriminantAnalysisFalse
24RNNRadiusNearestNeighborsTrue
25RFRandomForestFalse
26RidgeRidgeTrue
27SGDStochasticGradientDescentTrue
28SVMSupportVectorMachineTrue
29XGBXGBoostTrue
\n", "
" ], "text/plain": [ " acronym model needs_scaling\n", "0 AdaB AdaBoost False\n", "1 Bag Bagging False\n", "2 BNB BernoulliNB False\n", "3 CatB CatBoost True\n", "4 CatNB CategoricalNB False\n", "5 CNB ComplementNB False\n", "6 Tree DecisionTree False\n", "7 Dummy Dummy False\n", "8 ETree ExtraTree False\n", "9 ET ExtraTrees False\n", "10 GNB GaussianNB False\n", "11 GP GaussianProcess False\n", "12 GBM GradientBoosting False\n", "13 hGBM HistGradientBoosting False\n", "14 KNN KNearestNeighbors True\n", "15 LGB LightGBM True\n", "16 LDA LinearDiscriminantAnalysis False\n", "17 lSVM LinearSVM True\n", "18 LR LogisticRegression True\n", "19 MLP MultiLayerPerceptron True\n", "20 MNB MultinomialNB False\n", "21 PA PassiveAggressive True\n", "22 Perc Perceptron True\n", "23 QDA QuadraticDiscriminantAnalysis False\n", "24 RNN RadiusNearestNeighbors True\n", "25 RF RandomForest False\n", "26 Ridge Ridge True\n", "27 SGD StochasticGradientDescent True\n", "28 SVM SupportVectorMachine True\n", "29 XGB XGBoost True" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check which models require feature scaling\n", "atom.available_models()[[\"acronym\", \"model\", \"needs_scaling\"]]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Training ========================= >>\n", "Models: LR, Bag\n", "Metric: f1\n", "\n", "\n", "Results for LogisticRegression:\n", "Fit ---------------------------------------------\n", "Train evaluation --> f1: 0.9913\n", "Test evaluation --> f1: 0.9861\n", "Time elapsed: 0.182s\n", "-------------------------------------------------\n", "Total time: 0.182s\n", "\n", "\n", "Results for Bagging:\n", "Fit ---------------------------------------------\n", "Train evaluation --> f1: 0.9982\n", "Test evaluation --> f1: 0.9444\n", "Time elapsed: 0.378s\n", "-------------------------------------------------\n", "Total time: 0.378s\n", "\n", "\n", "Final results ==================== >>\n", "Total time: 0.572s\n", "-------------------------------------\n", "LogisticRegression --> f1: 0.9861 !\n", "Bagging --> f1: 0.9444\n" ] } ], "source": [ "# We fit two models: LR needs scaling and Bag doesn't\n", "atom.run([\"LR\", \"Bag\"])" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "New branch scaling successfully created.\n" ] } ], "source": [ "# Now, we create a new branch and scale the features before fitting the model\n", "atom.branch = \"scaling\"" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fitting Scaler...\n", "Scaling features...\n" ] } ], "source": [ "atom.scale()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Training ========================= >>\n", "Models: LR2\n", "Metric: f1\n", "\n", "\n", "Results for LogisticRegression:\n", "Fit ---------------------------------------------\n", "Train evaluation --> f1: 0.9913\n", "Test evaluation --> f1: 0.9861\n", "Time elapsed: 0.123s\n", "-------------------------------------------------\n", "Total time: 0.123s\n", "\n", "\n", "Final results ==================== >>\n", "Total time: 0.133s\n", "-------------------------------------\n", "LogisticRegression --> f1: 0.9861\n" ] } ], "source": [ "atom.run(\"LR2\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analyze the results" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Scaler()\n", "None\n", "None\n" ] } ], "source": [ "# Let's compare the differences between the models\n", "print(atom.lr.scaler)\n", "print(atom.bag.scaler)\n", "print(atom.lr2.scaler)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " x0 x1 x2\n", "0 -0.181875 0.356669 -0.147122\n", "1 1.162216 0.300578 1.159704\n", "2 1.056470 1.212060 0.933833\n", "3 0.277287 2.457753 0.188054\n", "4 -1.442482 -0.825921 -1.343434\n", "-----------------------------\n", " x0 x1 x2\n", "0 13.48 20.82 88.40\n", "1 18.31 20.58 120.80\n", "2 17.93 24.48 115.20\n", "3 15.13 29.81 96.71\n", "4 8.95 15.76 58.74\n", "-----------------------------\n", "True\n" ] } ], "source": [ "# And the data they use is different\n", "print(atom.lr.X.iloc[:5, :3])\n", "print(\"-----------------------------\")\n", "print(atom.bag.X.iloc[:5, :3])\n", "print(\"-----------------------------\")\n", "print(atom.lr2.X_train.equals(atom.lr.X_train))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 Scaler()\n", "dtype: object\n", "-----------------------------\n", "Series([], Name: master, dtype: object)\n", "-----------------------------\n", "0 Scaler(verbose=2)\n", "dtype: object\n" ] } ], "source": [ "# Note that the scaler is included in the model's pipeline\n", "print(atom.lr.pipeline)\n", "print(\"-----------------------------\")\n", "print(atom.bag.pipeline)\n", "print(\"-----------------------------\")\n", "print(atom.lr2.pipeline)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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GILEOByKDAkxuZqORQgCAAAAwLJ8r4hbrTcCrMnt8aiwslKSNYM/QhAAAAAAlmXl3giwpsLKStUZhiRrHvOEIAAAAAAsy3eXDCteFYf1WLkfiEQIAgCWZRiGXn75ZaWnpysyMlIJCQkaM2aMnnzyyTZ9nc8//1w2m03bt29v0+cFAKAtmHFCeNNNN+m8885r19eYNGmSrrvuulaPnz9/vj777LMm9+3evVs2m02ffPJJq5/HZrN5/xcREaERI0boT3/6U6sfHyhsNptefvlls8s4LU2O+ShCEACwlH3lZaqtqzO7DFMsWLBAP/vZz5SZmamsrCy9/PLLmjJlit577z2zSwMA4IztKi2V0TDl/0QaTwhtklIiItq5qo7zxz/+Ub/+9a9bPb6lEKRr165atWqVxowZc0qvPXfuXK1atUpLlizR6NGjddttt+lvf/vbKT2Hv1u1apUyMjLMLuO0+M5+smIfnGCzCwAAM32+b7/e3blT944apTGpqWaX06Gef/553XHHHXr00Ue991122WWt+sBohqqqKoWHh5tdBgAgQDyf7ZLb49E954xSr5iY447LragPQZIiIhRit3dUee1u6NChZ/wcoaGhGjdu3Ck/rl+/ft7HTZ06VWvWrNFrr72mG2644YxrOpmO+rxwOv8u/sLqfXCYCQLA8vaWl+nOZZ/poRUrlO/zR6GzO3jwoFJSUprdb7PZmny9fft2XXHFFYqLi1NUVJTOPfdcrVy5UpJUXl6u2267Tf3791d4eLgGDx6sefPmnTRIKSoq0o9+9CMlJSUpPDxcU6ZM0caNG73fb5x++8Ybb+iHP/yhoqOjddttt7XBTw0AsJI1eXm69oP39cK6bFW53c2+f9TtVkn1UUn+0xuhoqJCt956q/dv5MSJE/XNN980GbN161ZdcMEFCgsL0/Dhw/XZZ5+pR48eTS5sHLscZv369Zo+fbq6dOmi6OhojRw5UosWLZIk9enTR3v27NFvfvMb71KW3bt3t7gcpqKiQnfeeae6d++usLAwDRkyRC+99NJxfx6bzabhw4dr//79Te7//PPPNWHCBIWHhys5OVl33XWXqqurm4x58sknlZKSopiYGM2ZM0cLFy5s8jmlccntJ598ounTpysiIkJPP/10q55/7969uvzyy5WYmKiIiAgNHjxYzz77rPf7X375pcaPH6/o6Gh1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cnJydN999+mqq65Sv379VFBQoOeee05Tpkzxjhk0aJCWLl2qmTNnKjIyUiNHjmz2PBdddJEmT56sK6+8Uo8++qiGDx+uHTt26ODBg/rVr3513J/1Jz/5iZ544gk988wzevXVV/X000/rwgsvlGEYyszMVHh4uHbu3KmsrCwtWrRIMTExuvfee3X99derb9++mjx5sv7xj3/o4MGDrZolerLnNwxDM2bM0A033KCBAweqoqJCv/3tbzVs2DAlJyfrvffe06uvvqrMzEz17NlTu3fv1uuvv64f/OAHLb7esGHDTvp78xdNl8PQEwQAOo06j8c7EyQyJETDElpeQ3qsoQkJ+vk5ozTkNJqFBZqHH35YixcvVlZWlkpKStStWzdNmTJFjzzyiHeGRkpKipYvX66f//znmjNnjgzD0IgRI7w7ttx2223aunWrHn/8cdlsNl1//fWaPn26br/99uO+blhYmJYtW6Zf/vKXmjt3roqKipSSkqLzzjtPaWlpHfGjAwAs6MLevfX/0p1KbpjxcdTtVkl1fS8GM3ojbNmypdlJdWRkpHJzc/Xzn/9cDzzwgI4cOaLRo0fr008/9c5OCAoK0jvvvKMf//jHuuaaa9SnTx8999xz+uEPf6iYmJgWXyslJUWJiYl6/PHHlZubq/j4eF1yySVNdi154oknNGfOHF188cWqqqrSrl27mj2PzWbTkiVL9MADD+iJJ55QaWmp+vXrp3vvvfeEP2tERIT++7//W0888YR++9vf6oILLtBnn32mRx55RFdffbUkqW/fvpo1a5bCw8MlSdddd5327t2r+fPna+HChbriiit0++2363e/+91J/21P9vwej0fDhg3Ts88+q3379ik6OlqTJk3yLu8dMGCADMPQAw88oMLCQqWmpur666/X448/ftzXfPXVV0/4e/MX9ASRbIbR0BoWADqRTcXF+tFH9VuxTezRQ0+df0GL417btEl/XJftXfoys19/BR1zheGTvXv08MqVkqT/dp6tqwcPbt/i0WnlHzmizCVZkqQpPXsxEwQA2lHjTJDGpS/H7va2u7RUV7//niRpRp8+euTc8WaU2SZcLpfOPvvsJlvXdkYZGRk6dOiQli9fbnYpAeuyJVnKO3JEMQ6HPrziSrPLMQUzQQB0Sr5LYcaeoCGVzSZd5rP0BQAAdA4RISG6I93pXfpyLN8r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htFsTITDoYuGD1em06lLR45UQlSUCZUCAND5+YYgVjwhhPVYPfgjBAE6EcMwvP1Awux2pTFjwC8YhqFv9uzxBh8bDhxocVxyTIxmpaUp0+nU1CFDFO5wdHClAABYT5NdMix4QgjrsXoIwr6ZAeqmm26SzWaTzWaT3W5X79699eMf/1gFx2me2NG2b98um82mzz///JQe9+ijj+rbb79tn6IsYPvhwyo+elSSdHZKihx2u8kVWVeN262PNmzQz15/XT3vu0+jH39cT7z7brMA5KyUFN03Y4ZWPPCADs6bp5dvukkz09IIQIB24K6rk7uFLaWtwDAMvfzyy0pPT1dkZKQSEhI0ZswYPfnkk236Op9//rlsNpu2b9/eps8LnI7qhun+J+N7Qti7g3qC3HTTTTrvvPPa9TUmTZqk6667rtXj58+fr88++6zJfbt375bNZtMnn3zS6udpPEex2WyKiIjQiBEj9Kc//anVjw8UNptNL7/8stllnBYrb48rMRMkoI0cOVIvvvii6urqlJ2drQcffFA7d+5s9uYVSH7961+rR48eOvvss80uJSD57gozjqUwHa6sqkofrF+vxS6X3l+/XmVVVS2OG9uvn7e/x+CuXS3XjAowS0llpS6cN0/PX3utJpx1ltnldKgFCxboF7/4hebOnavzzjtP5eXlWrNmjd577z3NnTvX7PKAdnHzq6/q7F69dOe0aQo5we5pjSFIYlSUosLCOqq8dvfHP/5RoaGhrR4/f/58XXfddZoyZYr3vq5du2rVqlUaOnToKb323LlzNXv2bFVUVGjRokW67bbbFBERoRtuuOGUnsefrVq1Sv379ze7jNNi9ZkghCABLDo6WuPGjZMkTZgwQUeOHNH999+vAwcOqHv37iZXBzOs9u0HQlPUDnGgpERLsrOVlZ2tzzZvVm0LV5kdwcGaOmSIMtLTNSstTd3i4kyoFIAkrdu3T+c99ZRuHD9eT195pVJiY80uqUM8//zzuuOOO/Too49677vssstktNCTyB9UVVUpnN3NcIbKjx7VfW++qT+vWKGF116rKUOGNBtT63Zrf0mJpM53MniqwUVLQkNDvecbp6Jfv37ex02dOlVr1qzRa6+91iEhSEe9f5zOv4u/sPoSMJbDdCIjRoyQJO3fv99735///GeNGzdOsbGxSk1N1VVXXaX8/Hzv9x988EGNGTPG+/WmTZtks9l0yy23eO/75z//qcjISLnd7uO+9kcffaQhQ4YoPDxcU6dO1e7du5uNefrpp5Wenq6oqCj17NlTc+bMUbnPFqCNV8N/8pOfeKfQSVJ5ebluu+029e/fX+Hh4Ro8eLDmzZvntx/czFLldiunsFCS1DUyUj0ttt93RzEMQxv279dv3n1XY554Qj1+/nPd/vrr+nDDhiYBSGx4uK4dN07/vPVWFc2fr/fvuktzJk0iAAH8xF//8x8NeughPffpp5ZYInPw4EGlpKQ0u//YmWjbt2/XFVdcobi4OEVFRencc8/VypUrJZ3+3+OioiL96Ec/UlJSksLDwzVlyhRt3LjR+/3G6fZvvPGGfvjDHyo6Olq33XZbG/zUQL3Nubma+vvf6+oXX9SBhsCj0f6SEm+Dcn9ZFlBRUaFbb73V+9/MxIkT9c033zQZs3XrVl1wwQUKCwvT8OHD9dlnn6lHjx5Ngs5jl8OsX79e06dPV5cuXRQdHa2RI0dq0aJFkqQ+ffpoz549+s1vfuP9HL579+4Wl8NUVFTozjvvVPfu3RUWFqYhQ4bopZdeOu7PY7PZNHz48CbnKFL98rkJEyYoPDxcycnJuuuuu1RdXd1kzJNPPqmUlBTFxMRozpw5WrhwYZP3rcYleJ988ommT5+uiIgIPf300616/r179+ryyy9XYmKiIiIiNHjwYD377LPe73/55ZcaP368oqOj1aVLF40ePbrJv8Oxy2Fa83uz2Wx64YUXdOeddyouLk7du3fXY4891uHnNY0zQSIcDiVasPk+M0E6kX379slms6lXr15N7pszZ4769u2rkpIS/f73v9f06dOVnZ0tm82mCRMm6He/+50qKysVERGhlStXKiwsTCtWrPA+x8qVKzV27FgFH2ca4d69e5WRkaGpU6fqmWeeUXZ2dpMQpVFeXp7uu+8+9ejRQwcPHtQTTzyha6+9VkuWLJFUP6Xs3HPP9U6fa3TkyBGFhIRo3rx5iouLU05Ojh5++GHZbDbdc889bfXPF/C+zc9XrccjqX5XGJZYtJ06j0f/2b5di10uZWVna8dxeu/0jI9XRnq6Mp1OXTBw4Amn3gIwX2lVlf570SK9snx5p18ik56ermeffVY9evTQxRdfrC5dujQbk5eXpwkTJigxMVELFy5UcnKy1qxZ4z1xOZ2/x9XV1Zo6daqqq6v1hz/8QV26dNGzzz6radOmafv27YqMjPSOveuuu3Tttddq8eLFzAJBu/jHV1/p3XXr9Mjs2d4lMv54Rfymm27Sp59+qqefflpdu3bVvHnzNGXKFG3btk3JycnyeDyaNWuW7Ha7Fi1apMrKSt16660qKys74fPOnj1bw4YN09///neFhIRo48aNOnz4sCTp7bff1iWXXKIZM2Zozpw5kuqXwuT6LLWWJI/Ho5kzZ2rdunX69a9/rWHDhmnbtm06cJym74327dunPn36eL9evny5LrzwQl1zzTV6+OGHdeDAAT3wwAOqq6vTc889J0l6/fXX9eCDD+r+++/X5MmT9cYbb+ipp55q8flvueUWzZkzR3PnzlWXLl1a9fw33nijjh49qldeeUUxMTHaunWrt79iWVmZZs2apcsuu0yPPfaY3G63XC6XDh06dNyf8WS/t0a//e1vNXPmTL3xxhtatmyZHnnkETmdTs2aNeuE/4ZtxTAM7Wk47vskJlrynIFP6AHO7XZ7e4I8+eSTuuWWW9TVpxfEI4884r1dV1enc845R71799Y333yjUaNGafz48aqrq9Pq1as1ZcoUrVy5UjfeeKNeeuklFRQUKDk5WStXrtQll1xy3BoaP9T8+9//lsPh0MUXX6yioiI988wzTcb5Jqt1dXXq0aOHJk6cqMLCQiUlJXmnlPlOn5Ok1NRULViwQFL9f7QTJkxQaWmp/vznP3eeECQpSTF9+ygotote/vrr03qKr33W9kXWebRsy5a2qs6yDlVU6L2cHL2zbp2KKipaHJPWs6c3+Ejv1cuSf0iAQHfsEpnOaOHChcrIyNA111wjm82mtLQ0XXXVVbr77ru9PQOeeeYZVVdXa/ny5YqPj5ckXXjhhd7nOJ2/x6+99pq2bdum7777Tj179pRUf3W6b9++eumll3TXXXd5x06dOlW///3v2+PHB7wqqqubLJHZ42chyIYNG/TWW2/pzTff1JUN70dTpkxR7969NW/ePD399NN65513tHXrVm3atElDGpb4xMXFaebMmcd93qKiIu3evVtLlizxzh6fNm2a9/tOp1OhoaHq3r37CZd5LF26VF988YU++eQTTZ06VZK8/+/L4/HI7XaroqJCr7/+utauXasPP/zQ+/25c+fqoosu0l//+lfvfbGxsbr22mv1y1/+UikpKZo3b56uuuoqb/Bx0UUXafTo0S0GLjfccIMeeugh79fnnXfeSZ//66+/1t///ndv+DB58mTv2K1bt6qsrEzPPfecohtmV8+YMeO4/y6t+b01GjZsmF544QVJ0vTp0/Xuu+9q8eLFHRaC5JeV6WhD02B/mf3U0SwTgjT+x3KylDKQrFy5UiEhId6v09LS9PzzzzcZs27dOt1///36+uuvmySX27dv16hRoxQXF6ehQ4dq+fLlmjJlilasWKE//OEPWrFihZYvX66LLrpI69at029+85vj1rF27VrNmDFDDp/dLGbNmtUsBPniiy/0y1/+Ujk5OU2S6h07dijpJFu5vvjii1qwYIF27NjhncZ2Ko2e/Nnr336rHj+/V7ag+tVpr2zfdkbPZ3g8uuvPf1adBaZ3m8URHKzwkBCFhYSoqKJCr6xYoVd8Zk8B8E91DbPljuev//mPFrtcLfb2CXTp6enasmWLli5dqg8//FAff/yx5s6dq6ysLK1YsUJ2u11ffPGFLr30Um8A0pJT/Xv86aefaty4ceratat3Wa3D4dC4ceOaTRO/+OKL2+An9V+DHnqIoLyDHa6sPO73GpfIDOvWzXufP5wQfvPNN7Lb7crMzPTeFxkZqUsuuURfN1wo++abb9SvXz9vACLVn6DbT7ArYHx8vHr27KnbbrtNd955p6ZMmaKE0/h5v/jiC3Xr1q3F4MPXnDlzvDNKJOmpp57yhgyVlZVatWqVXnnllSbL7SdNmqSamhpt2LBBCQkJysnJaRawzpw5U2vXrm32er7vH615/pSUFKWnp2vu3LkqKSnRtGnT1M3nWOjfv7+ioqJ07bXX6qc//akmTpzoDUNa0prfWyPf8EmShgwZ0qHnqFZviipZKATpjNLS0vTyyy+rpqZGH330kR577DE98MAD3hkXpaWlmjFjhgYMGKAXX3xR3bt39165OdqwjapUn5SuWLFC+fn52rVrlyZMmKAJEyZoxYoV6tKlizwej84999zj1pGfn6+xY8c2ue/YUGPXrl265JJLNG3aNL322mtKSUnRvn379IMf/KBJLS355z//qVtvvVX33Xefpk2bpri4OP373/8+7nS4QLPzcIk3AGkLhw8dIgBpZzVut2rcbpUeZ/cXAIGrtKpK9jZ8T/Yn4eHhuuyyy3TZZZdJkh577DE98sgjeuedd5SZmani4mKdf/75x3386fw9Lioq0rJly5pctGk0ceLEJl/7ThfvjA42LDuAf9llwva4J5Kbm6u4uLhmy9AbZy5IUkFBQbMAw263K+4EfceCgoL04Ycf6sEHH9SNN96ompoaTZkyRQsXLtTAgQNbXV9xcXGTWefH88tf/lIZGRkqLi7WU089pYceekjTpk3TOeeco5KSEnk8Ht188826+eabmz123759KioqksfjafZzJh7npN33/aM1zy9Jb7zxhh544AHdcccdKisr09ixY7VgwQKNGTNGcXFx+vDDD/XII4/o8ssvl81m0+zZs/Xcc88pNTW12XO25vfW6NjliA6H46TnQ22JEIQQJKBFRUVp1KhRkqTx48ersLBQzz//vO655x717NlTq1evVl5entasWePtE7Jz585mzzNhwgT93//9n7744gsNGzZMXbp00Xnnnac//OEPiouL04gRIxQTE3PcOlJSUlTY0JCz0bFff/TRR6qrq9Obb77pnTFy5MiRVv2cb7/9tiZPnqz/+Z//8d73zjvvtOqxgeAX51+g//1//09B3btLQUFyOJp/UGyturo6Hc4v6FTbu5nJJinEbldYSAhX74BOoM7jUV5p6XG/3y8pSX+4+mr914sv6sgxzfk6o7vvvluPPPKIvvvuO0lSQkJCs/X/vk7n73F8fLwmTJig+fPnN/vesVdVO/v7bLcuXTr9z+hvDldWHve/5RC7XT+/6CJ9uXWrVm7fLsk/Tgi7du2qkpISud3uJifU+fn53vAhOTlZRT4nslL9Z8CSY5q+HmvIkCF6++23VV1drWXLlunee+/V1Vdf3WxW1omc7H2iUe/evZucp5x11ll66KGHtHTpUnVp+G/hySefbHFGSZ8+fdSlSxcFBQU1+zmP/bqR739brXl+Serevbtee+011dXV6T//+Y/mzp2rWbNm6eDBg7Lb7Ro/frw+/vhjHTlyRB988IHuvPNO/exnP9Nbb73V7Dlb83vzF0364PhB8GcGy4Qg3bt37/Rbx/7qV7/Sn//8Z82fP1/z5s1TVcNVat9lKv/85z+bPe68885TRUWFFi5cqPPOO89738033yyHw+G973hGjRqlRYsWqaamxvtax34oqqqqUnBwcJNpei3VEhIS0qwrdFVVVZOfwePx6F//+tcJawokYSEh0nvvaV/D8bn9mM7ZAIC2UVhermSfHhSNwkJCNPeSS/SLiy+uf0/uhBr7fPna3nDi13j/5MmT9ac//UklJSUtXlE+nb/HU6ZM0cMPP6wBAwa02IzVSr77zW+4SNHBZi1YoHfXrWt2//Rhw7Tgmms0KDVVve+7T5KUGBXlF7+fUaNGqa6uTllZWbriiisk1S/veP/99/XjH/9YknTOOefo8ccf1+bNm71LYpYuXdrqmcChoaGaMWOGtm3bpvvvv997v8PhaPY5/FiNQeiyZcua9NA4kejoaM2dO1d33XWX1q9frxEjRmjs2LHavn17k9c/1siRI/X+++832Vb33XffPenrRUZGtur5G9ntdp1//vm6//77NXv2bBUXFzd5v4yMjNSVV16pVatW6YMPPmjxOVrze/MXzASxUAhiBSkpKbr55pv18ssv65FHHtG4ceMUERGhOXPm6I477tC3336rV199tdnj+vbtq27dumn58uW69dZbvfelpKRo1apVuuOOO074uv/93/+t559/Xpdffrl+9rOfKTs7u9mHokmTJnk7V1911VX69NNP9dFHHzV7rkGDBumtt95Senq6QkNDNWrUKE2ZMkV333235s+fr8GDB+vFF19U5QnWeAIA0Fqz09M1/7/+S31P0psq0I0YMUKXXXaZpk+frsTERG3dulVPPvmkunXr5l0ec/fdd+svf/mLJk6cqLlz5yopKUlr165V3759ddVVV53W3+Mbb7xRL7zwgiZNmqR77rlHvXv3VkFBgZYvX64xY8Y02b4TaG894+M1/7/+S5edfbZsNptq3W7tb5g9YcbJYHFxcbPPzMHBwbriiiv005/+VCUlJUpNTdW8efNUW1vr7Y8xa9YsDRw4UFdccYWeeOIJVVVV6de//rWio6MVdJzlfDk5Obrvvvt01VVXqV+/fiooKNBzzz2nKVOmeMcMGjRIS5cu1cyZMxUZGamRI0c2e56LLrpIkydP1pVXXqlHH31Uw4cP144dO3Tw4EH96le/Ou7P+pOf/ERPPPGEnnnmGb366qt6+umndeGFF8owDGVmZio8PFw7d+5UVlaWFi1apJiYGN177726/vrr1bdvX02ePFn/+Mc/dPDgwVbNqDrZ8xuGoRkzZuiGG27QwIEDVVFRod/+9rcaNmyYkpOT9d577+nVV19VZmamevbsqd27d+v111/XD37wgxZfb9iwYSf9vfkLf9wRqcMZFtG9e3dDktG9e/cOeVx7u/HGG40JEyY0u3/nzp1GcHCwMW/ePMMwDGPx4sXGWWedZYSFhRkXXHCBsX79ekOS8eqrrzZ53A9+8ANDkrFnz55m9+3du/ek9XzwwQfGwIEDjdDQUGPixInGRx99ZEgyli1b5h3z4osvGj179jQiIiKMWbNmGV9++WWzMZ999pkxfPhww+FwGI2HZ01NjfGzn/3MiI+PNxISEoy77rrL+OMf/2j42+F7JseKvx5nANCZFJSVGbrlFkO33GL0u/9+493s7BbHRd52m6FbbjGGP/xwB1fYfp577jlj6tSpRmpqqhEaGmr07dvX+NGPftTsb/zWrVuN2bNnG9HR0UZUVJRx7rnnGitXrjQMo3V/j5ctW2ZIMrZt2+a979ChQ8btt99udOvWzXA4HEbPnj2Nq6++2sjJyTEMwzB27dplSDI+/vjjDviX6FjTfv977zFXXlVldjmWM/MPfzB0yy1GyE9+Yjz41ltGxdGjTb6/s6DA+/u58vnnO7S2G2+80ZDU7H+RkZFGWVmZ8dOf/tRISEgwwsLCjPPPP9/4+uuvmzz+u+++M84//3wjNDTUGDRokLF06VIjJibGePbZZ71jJk6caFx77bWGYRhGXl6ecc011xh9+vQxQkNDja5duxo/+tGPjKKiIu/47OxsY+zYsUZ4eLghydi1a1eL/32Wl5cbP/vZz4zk5GQjNDTUGDJkiPHyyy97vy/JeOmll5r9zI899pjhcDiMgwcPGoZhGCtWrDCmTp1qREVFGVFRUcaIESOMBx980KipqfE+5je/+Y2RlJRkREVFGTfeeKPxxBNPGLGxsd7vt/Se0+hEz3/06FHjRz/6kfc8KSkpyfjBD35g7Nq1yzAMw9iyZYtx+eWXG927dzccDofRq1cv49577zUqKyuP+3O25vfW0r/Ntddea0ycOLFZ/e1l0IMPGrrlFiPi1lsNj8fTYa/rT2yGYRgdlriYqEePHt7lMPtPYbnB6T4O1nMmxwrHGQC0v8LycvW6776TLn2Juv12Hamu1vDu3bX+scc6uEp0JhfOm6dPNm2SJJU//7xfLLewklkLFqjG7dZz11yjgS00s1y2ZYum/O53kqSfX3SRfvfDH3Z0iW3G5XLp7LPPbrJ1bWeUkZGhQ4cOafny5WaXEpAMw1DEbbfpaG2thnbrpo2PP252SaZgOQwAALCEqNBQbXr88U6/9AVAvaevvFJDunY97vKJQO6N8Pzzzys8PFz9+vXT7t279dhjj2no0KGaNGmS2aW1mQMHDmjBggW64IILZLfbtWTJEi1ZskSLFi0yu7SAlV9WpqO1tZKs2xRVIgQBAAAWEe5wEIAAFjK0W7cTfr9JCBJgJ4TBwcF66qmntHfvXoWGhmrq1KmaP39+k00IAl1YWJhcLpdefvlllZeXq2/fvnrhhRd09dVXm11awArk4K8tEYIAAAAAsJxAbhA5Z84czZkzx+wy2lVCQkKLGyng9BGC1Gu5fTAAAAAAdGK+J4S9A2wmCHA6mgR/Fj7mCUEAAAAAWE5jCJIYFUXTWlgCM0HqEYIAAAAAsJRat1v7S0okWftkENYSyEvA2hIhCAAAAABL2V9SIo9hSLL2sgBYS+NMkAiHQ4lRUSZXYx5CEAAAAACWwhVxWI1hGNrTcNz3SUw87tbRVkAIAgAAAMBS6I0Aq8kvK9PR2lpJzH4iBAEAAABgKU1CEIufEMIaCP6+RwgCAAAAwFJYDgOrIQT5HiEIAAAAAEvxPSHszUwQWECT4M/ixzwhCAAAAABLaQxBEqOiFBUWZnI1QPtjJsj3CEEAAAAAWEat2639JSWSOBmEdbAE7HuEIAAAAAAsY39JiTyGIYllAbCOxpkgEQ6HEqOiTK7GXIQgAAAAACyDK+KwGsMwtKfhuO+TmCibzWZyReYiBAEAAABgGfRGgNXkl5XpaG2tJGY/SYQgAAAAACykSQjCCSEsgOCvKUIQAAAAAJbBchhYDSFIU4QgAAAAACzD94SwNzNBYAFNgj+OeUIQAAAAANbRGIIkRkUpKizM5GqA9sdMkKYIQQAAAABYQq3brf0lJZI4GYR1sASsKUIQAAAAAJawv6REHsOQxLIAWEfjTJAIh0OJUVEmV2M+QhAAAIAWGA0nSsDp4hjyP1wRh9UYhqE9Dcd9n8RE2Ww2kysyHyEIAACAj+Cg+o9HtXV1JleCQOd7DAXb7SZWgkb0RoDV5JeV6WhtrSRmPzUiBAEAAPAREx4uSSqtqjK5EgS6xmMoxG5XaHCwydVAOiYE4YQQFkDw1xwhCAAAgI/U2FhJUmF5uWrcbpOrQSA70NCAMzU2linofoLlMLAaQpDmCEEAAAB89Gv4kOgxDG0vKDC5GgSqQxUVKqqokCT1S0oyuRo08j0h7M1MEFhAk+CPY14SIQgAAEATI3r08N7+Zvdu8wpBQPtmzx7v7RHdu5tYCXw1hiCJUVGKCgszuRqg/TETpDlCEAAAAB/n9u/vvf3Zli0mVoJA5nvs+B5TME+t2639DUuUOBmEVbAErDlCEAAAAB/jBwxQZGioJGlJdjZ9QXDKDMPQW998I0my2WyaNnSoyRVBkvaXlMjTsG0xywJgFY0zQSIcDiVGRZlcjX8gBAEAAPARFhKi2enpkqRDR47ozbVrzS0IAeezzZu1LT9fkjRp0CAlx8SYXBEkrojDegzD0J6G475PYiINmhsQggAAABxjzsSJ3tu/XrJE1bW1JlaDQOLxePTQ2297v7510iTzikET9EaA1eSXlelow98vZj99jxAEAADgGBcMHKgLBg6UJG3Lz9fd//iHjIZp9MCJPP7OO1qzc6ckaUjXrrrinHNMrgiNmoQgnBDCAgj+WhZsdgEAAAD+xmazaeG112rU44+rxu3WC59/rkNHjui2yZMV4XCYXR78ULXbrddWrdL/fvGFpPpj6IXrr5c9iGuO/sJ3OUxpVZW+3rXLxGqA9rfMp0EzIcj3LBeC5ObmqofP1netGX86j4P1nMmx0vhYAID/GNGjh1668Ubd+MorkqQ3vv5ab3z9tclVIVA8feWVmjhokNllwIfvVfFrX3rJxEqAjsfsp+9ZJgSJjo6WVL9O88CBA6f8+NN9HKznTI6VxuMUAOAfbhg/XuEhIZrzt7+ppLLS7HIQACIcDj37X/+ln/r0lYF/CAsJMbsEwBRBNpvO7t3b7DL8hs2wyALXf/3rX3r44YdVXl5+So+rqqpSeXm5oqOjFR4e3k7VoTM402MlOjpajz/+uK688sp2qA4AcCYOV1bqX2vXauPBg6rzeMwuB34oyGbTWSkp+sGoUewG46d2FRbqf7/8Ukeqq80uBegwNkkXDhummWlpZpfiNywTggAAAAAAAGujUxMAAAAAALAEQhAAAAAAAGAJhCAAAAAAAMASCEEAAAAAAIAlEIIAAAAAAABLIAQBAAAAAACWQAgCAAAAAAAsgRAEAAAAAABYAiEIAAAAAACwBEIQAAAAAABgCYQgAAAAAADAEghBAAAAAACAJRCCAAAAAAAASyAEAQAAAAAAlkAIAgAAAAAALIEQBAAAAAAAWAIhCAAAAAAAsARCEAAAAAAAYAmEIAAAAAAAwBIIQQAAAAAAgCUQggAAAAAAAEsgBAEAAAAAAJZACAIAAAAAACyBEAQAAAAAAFjC/weGzM3XZyXiVQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "atom.plot_pipeline()" ] } ], "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.10.9" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }