{ "cells": [ { "cell_type": "code", "execution_count": 1004, "metadata": {}, "outputs": [], "source": [ "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.impute import SimpleImputer\n", "from sklearn.pipeline import Pipeline\n", "from sklearn.preprocessing import OneHotEncoder\n", "from sklearn.compose import ColumnTransformer\n", "from sklearn.model_selection import train_test_split, cross_val_score\n", "from sklearn.metrics import accuracy_score\n", "from xgboost import XGBClassifier\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from sklearn.feature_selection import mutual_info_regression\n", "from sklearn.discriminant_analysis import StandardScaler\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 1005, "metadata": {}, "outputs": [], "source": [ "def load_dataset(columns_drop) -> tuple([pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame]):\n", " train = pd.read_csv(\"C:\\\\Projects\\\\kaggle\\\\competitions\\\\identify-age-related-conditions\\\\data\\\\train.csv\")\n", " greeks = pd.read_csv(\"C:\\\\Projects\\\\kaggle\\\\competitions\\\\identify-age-related-conditions\\\\data\\\\greeks.csv\")\n", " test = pd.read_csv(\"C:\\\\Projects\\\\kaggle\\\\competitions\\\\identify-age-related-conditions\\\\data\\\\test.csv\")\n", " columns_drop = ['Id'] + columns_drop\n", " id_list = test[\"Id\"]\n", " train.drop(columns_drop, inplace=True, axis=1)\n", " test.drop(columns_drop, inplace=True, axis=1)\n", " print(len(train.columns))\n", " return (train, greeks, test, id_list)" ] }, { "cell_type": "code", "execution_count": 1006, "metadata": {}, "outputs": [], "source": [ "def split_data(df: pd.DataFrame, split)->tuple([pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame]):\n", " X = df.loc[:, df.columns != \"Class\"]\n", " y = df.loc[:, \"Class\"]\n", " return train_test_split(X, y, test_size=split, random_state=42)" ] }, { "cell_type": "code", "execution_count": 1007, "metadata": {}, "outputs": [], "source": [ "def build_pipeline(df: pd.DataFrame) -> ColumnTransformer:\n", " # Preprocessing for numerical data \n", " numerical_transformer = Pipeline(steps=[\n", " ('imputer',SimpleImputer(strategy='constant')),\n", " ('scaler', StandardScaler())])\n", " \n", " # Preprocessing for categorical data\n", " categorical_transformer = Pipeline(steps=[\n", " ('imputer', SimpleImputer(strategy='most_frequent')),\n", " ('onehot', OneHotEncoder(handle_unknown='ignore'))\n", " ])\n", "\n", " # Bundle preprocessing for numerical and categorical data\n", " numerical_cols = [cname for cname in df.columns if df[cname].dtype in [\"int64\", \"float64\"]]\n", " categorical_cols = [cname for cname in df.columns if df[cname].nunique() < 10]\n", " preprocessor = ColumnTransformer(\n", " transformers=[\n", " ('num', numerical_transformer, numerical_cols),\n", " ('cat', categorical_transformer, categorical_cols)\n", " ])\n", " print(f\"Number of columns: {len(df.columns)}\")\n", " return preprocessor" ] }, { "cell_type": "code", "execution_count": 1008, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "57\n", "dataset shape: (617, 57)\n", "X shape: (431, 56) and y shape: (431,)\n" ] } ], "source": [ "# Define model\n", "#model = RandomForestClassifier(n_estimators=100, random_state=22)\n", "model = XGBClassifier(n_estimators=500)\n", "\n", "#Splitting\n", "train, greeks, test, id_list = load_dataset(columns_drop=[])\n", "print(f\"dataset shape: {train.shape}\")\n", "X_train, X_valid, y_train, y_valid = split_data(train, 0.3)\n", "print(f\"X shape: {X_train.shape} and y shape: {y_train.shape}\")" ] }, { "cell_type": "code", "execution_count": 1009, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Columns with MI equal zero: ['DN', 'CC', 'EG', 'AB', 'FS', 'BD ', 'AY', 'AZ', 'GE', 'GB', 'DY', 'BN', 'FD ', 'CD ', 'CF', 'CU', 'DE', 'DF', 'CB'] --> total length: 19\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABREAAAUQCAYAAADTXhe6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAACsOUlEQVR4nOzde3jdVZ0v/vduUza0aVLbIikYKBBsR8pFdBDEGSi3BtuCcwABRYigZ5QOgiDTExytFWl6EI7YEcqobeMFOeCB46WOLWOFGR09gIMROLZcxglUbP0pl2xbMNKyf38w3YdQuint3gmU1+t51kO/67u+6/tJ8g/P+1nftQrlcrkcAAAAAIAtGDbUBQAAAAAAr2xCRAAAAACgKiEiAAAAAFCVEBEAAAAAqEqICAAAAABUJUQEAAAAAKoSIgIAAAAAVQkRAQAAAICqhIgAAAAAQFVCRADgVaW7uzuFQiGFQiG33377ZvfL5XLa2tpSKBRy1FFHbdM7/vEf/zGf+tSntqvOrdXb25tCoZDu7u6tGnfllVdu03v+9Kc/5UMf+lAmTJiQ4cOH5+CDD96meYbSN77xjVx99dUveq9QKAza3+yF7rjjjvzVX/1V9txzzxSLxey22245/PDDc/HFFw9JPQAA9SBEBABelUaPHp1FixZt1v/P//zP+fd///eMHj16m+f+x3/8x8ydO3d7ynvFWbhwYf7hH/4hH//4x/PjH/84X/va14a6pJetWoj405/+NB/4wAcGt6Ak3/ve9/L2t789pVIpV1xxRW699dZ8/vOfzxFHHJEbb7xx0OsBAKiXhqEuAABgW5x22mm5/vrrc80116SpqanSv2jRohx++OEplUpDWN0rz3333Zdddtklf/M3f1OzOZ9++unssssuNZtvexx22GFD8t4rrrgie++9d5YvX56Ghv/3v9ann356rrjiikGt5amnnsrIkSMH9Z0AwGuHlYgAwKvSGWeckSS54YYbKn19fX25+eabc84552w2/vbbb3/RT6Bf+DlxR0dHrrnmmiSpfDZdKBTS29tb9dPjF35O+9BDD+X9739/9ttvv4wcOTJ77LFHZs6cmXvvvXf7fvDn2fRp92233ZYPf/jDGT9+fMaNG5f/8l/+S37zm98MqO3LX/5ynn766crPs+ln+OMf/5jOzs7svffe2WmnnbLHHntk1qxZefLJJwe8a+LEiZkxY0ZuueWWvPnNb87OO++cuXPnVn6v3/jGNzJ79uxMmDAhjY2NmTlzZn7729/mD3/4Q/7rf/2vGT9+fMaPH5/3v//9Wbdu3YC5r7nmmvzlX/5lXv/612fUqFE54IADcsUVV+SZZ56pjDnqqKPyve99Lw8//PCAv8uWfv/Jc8HpSSedlNe97nXZeeedc/DBB+crX/nKgDGb6r/hhhvy8Y9/PLvvvnuamppy7LHH5v7773/Jv8Fjjz2W8ePHDwgQNxk2bPP/1f7GN76Rww8/PI2NjWlsbMzBBx+82YraxYsX56CDDsrOO++csWPH5q/+6q+ycuXKAWM6OjrS2NiYe++9N8cff3xGjx6dY445Jslzn65/5jOfyeTJk1MsFrPrrrvm/e9/f373u98NmOOHP/xhjjrqqIwbNy677LJL9txzz5x88sl56qmnXvLnBgBee4SIAMCrUlNTU0455ZQsXry40nfDDTdk2LBhOe2007Z53k984hM55ZRTkjz3ieymNmHChJc1z29+85uMGzcu8+fPz7Jly3LNNdekoaEhb3vb27YqnHo5PvCBD2TEiBH5xje+kSuuuCK33357zjzzzMr9n/70p3nnO9+ZXXbZpfLzTJ8+PeVyOe9617ty5ZVX5n3ve1++973v5aKLLspXvvKVHH300env7x/wnrvvvjuXXHJJPvKRj2TZsmU5+eSTK/cuvfTS/H//3/+X7u7uXHXVVbn99ttzxhln5OSTT05zc3NuuOGG/O3f/m2+9rWv5dJLLx0w77//+7/nPe95T772ta9l6dKlOffcc/PZz342f/3Xf10Zc+211+aII45IS0vLgL/Lltx///15+9vfnv/7f/9vFixYkFtuuSVvetOb0tHR8aIrBC+99NI8/PDD+fKXv5wvfvGLefDBBzNz5sxs3Lix6u/+8MMPzx133JGPfOQjueOOOwYEny/0yU9+Mu9973uz++67p7u7O//7f//vnH322Xn44YcrY7q6unLuuedm//33zy233JLPf/7zueeee3L44YfnwQcfHDDfn/70p5x44ok5+uij8+1vfztz587Ns88+m5NOOinz58/Pe97znnzve9/L/Pnz80//9E856qij8vTTTyd5LjyfPn16dtpppyxevDjLli3L/PnzM2rUqPzpT3+q+jMDAK9RZQCAV5ElS5aUk5Tvuuuu8m233VZOUr7vvvvK5XK5/Od//ufljo6OcrlcLu+///7lI488svLcprG33XbbgPn+4z/+o5ykvGTJkkrfrFmzyi/2v0kvNnaTJOU5c+Zsse4NGzaU//SnP5X322+/8kc/+tGtmvPF3v3Zz3620rfpd3HeeecNGHvFFVeUk5TXrFlT6Tv77LPLo0aNGjBu2bJl5STlK664YkD/jTfeWE5S/uIXv1jp22uvvcrDhw8v33///QPGbvq9zpw5c0D/hRdeWE5S/shHPjKg/13veld57NixW/w5N27cWH7mmWfKX/3qV8vDhw8vP/7445V706dPL++1114v+twLf/+nn356uVgslh955JEB40444YTyyJEjy08++eSA+t/5zncOGHfTTTeVk5R/+tOfbrHWcrlc/v3vf19+xzveUU5STlIeMWJE+e1vf3u5q6ur/Ic//KEy7le/+lV5+PDh5fe+971bnOuJJ54o77LLLpvV8sgjj5SLxWL5Pe95T6Xv7LPPLicpL168eMDYG264oZykfPPNNw/ov+uuu8pJytdee225XC6X/9f/+l/lJOWenp6qPx8AwCZWIgIAr1pHHnlk9t133yxevDj33ntv7rrrrhf9lHkobNiwIfPmzcub3vSm7LTTTmloaMhOO+2UBx98cLNPU7fXiSeeOOD6wAMPTJIBK9xezA9/+MMkz30a+3ynnnpqRo0alRUrVmw27xvf+MYXnWvGjBkDrv/sz/4sSTJ9+vTN+h9//PEBnzT//Oc/z4knnphx48Zl+PDhGTFiRM4666xs3LgxDzzwQNWfodrPdswxx6S1tXVAf0dHR5566qnNVjFu6+9w3Lhx+dGPfpS77ror8+fPz0knnZQHHnggnZ2dOeCAA/L73/8+SfJP//RP2bhxY2bNmrXFuX7605/m6aef3uzv0dramqOPPnqzv0eSAatBk2Tp0qUZM2ZMZs6cmQ0bNlTawQcfnJaWlsrn/AcffHB22mmn/Nf/+l/zla98Jb/61a+q/pwAAEJEAOBVq1Ao5P3vf3++/vWv57rrrssb3/jG/MVf/MVQl5Ukueiii/KJT3wi73rXu/Ld7343d9xxR+66664cdNBBlU9Ka2XcuHEDrovFYpK85Hsee+yxNDQ0ZNdddx3QXygU0tLSkscee2xAf7VPuseOHTvgeqeddqra/8c//jFJ8sgjj+Qv/uIv8uijj+bzn/98JZDbtC/ltv6uHnvssRetd/fdd6/cf75t/R1u8ta3vjWzZ8/ON7/5zfzmN7/JRz/60fT29lY+nd60H+Eb3vCGqjUnL/573n333TereeTIkQMOFUqS3/72t3nyySez0047ZcSIEQPa2rVrK6Hmvvvumx/84Ad5/etfn1mzZmXffffNvvvum89//vNb9fMCAK89TmcGAF7VOjo68slPfjLXXXddLr/88i2O23nnnZNks33+NoUqW2NLc7ww3EmSr3/96znrrLMyb968zd43ZsyYrX5nPY0bNy4bNmzI7373uwFBYrlcztq1a/Pnf/7nA8Y//yCTWvnWt76V9evX55Zbbslee+1V6e/p6dmueceNG5c1a9Zs1r/pwJnx48dv1/zVjBgxInPmzMnnPve53HfffUlS+f3++te/3mx15Cabgswt1f3Cml/s77HpcJ1ly5a96DtGjx5d+fdf/MVf5C/+4i+ycePG/OxnP8vf//3f58ILL8xuu+2W008/fSt+UgDgtcRKRADgVW2PPfbIJZdckpkzZ+bss8/e4riJEycmSe65554B/d/5znc2G7ulVWi77bZbdt55583m+Pa3v73ZHIVCoTLPJt/73vfy6KOPbvmHGWSbTvP9+te/PqD/5ptvzvr16yv362lTEPb831W5XM6XvvSlzcYWi8WtXhl4zDHH5Ic//OGAU6qT5Ktf/WpGjhyZww47bDuq/n9eLPBLUvlkfdPKx+OPPz7Dhw/PwoULtzjX4Ycfnl122WWzv8evf/3ryufZL2XGjBl57LHHsnHjxrz1rW/drE2aNGmzZ4YPH563ve1tldWfd99990u+BwB47bESEQB41Zs/f/5Ljmlpacmxxx6brq6uvO51r8tee+2VFStW5JZbbtls7AEHHJAk+e///b/nhBNOyPDhw3PggQdmp512yplnnpnFixdn3333zUEHHZQ777wz3/jGNzabY8aMGenu7s7kyZNz4IEH5t/+7d/y2c9+turnrIPtuOOOy7Rp0zJ79uyUSqUcccQRueeeezJnzpy8+c1vzvve975BqWGnnXbKGWeckb/927/NH//4xyxcuDBPPPHEZmMPOOCA3HLLLVm4cGHe8pa3ZNiwYXnrW9/6ovPOmTMnS5cuzdSpU/PJT34yY8eOzfXXX5/vfe97ueKKK9Lc3FyT+qdNm5Y3vOENmTlzZiZPnpxnn302PT09ueqqq9LY2JgLLrggyXMh9qWXXprLLrssTz/9dM4444w0Nzfnl7/8ZX7/+99n7ty5GTNmTD7xiU/k0ksvzVlnnZUzzjgjjz32WObOnZudd945c+bMecl6Tj/99Fx//fV55zvfmQsuuCCHHnpoRowYkV//+te57bbbctJJJ+Wv/uqvct111+WHP/xhpk+fnj333DN//OMfKyedH3vssTX53QAAOxYhIgDwmvG1r30t559/fmbPnp2NGzdm5syZueGGGzYLot7znvfkX//1X3Pttdfm05/+dMrlcv7jP/4jEydOzFVXXZUkueKKK7Ju3bocffTRWbp0aWWl4yaf//znM2LEiHR1dWXdunU55JBDcsstt+Tv/u7vBuvHfUmFQiHf+ta38qlPfSpLlizJ5ZdfnvHjx+d973tf5s2bt9lKynqYPHlybr755vzd3/1d/st/+S8ZN25c3vOe9+Siiy7KCSecMGDsBRdckP/7f/9vLr300vT19aVcLqdcLr/ovJMmTcpPfvKTXHrppZk1a1aefvrp/Nmf/VmWLFmy2cEl2+Pv/u7v8u1vfzuf+9znsmbNmvT392fChAk59thj09nZWTlgJkk+/elPZ7/99svf//3f573vfW8aGhqy33775SMf+UhlTGdnZ17/+tdnwYIFufHGG7PLLrvkqKOOyrx587Lffvu9ZD3Dhw/Pd77znXz+85/P1772tXR1daWhoSFveMMbcuSRR1YC8oMPPji33npr5syZk7Vr16axsTFTpkzJd77znRx//PE1+/0AADuOQnlL/+cFAAAAABB7IgIAAAAAL0GICAAAAABUJUQEAAAAAKoSIgIAAAAAVQkRAQAAAICqhIgAAAAAQFUNQ13A9nj22Wfzm9/8JqNHj06hUBjqcgAAAADgVaVcLucPf/hDdt999wwbtuX1hq/qEPE3v/lNWltbh7oMAAAAAHhVW716dd7whjds8f6rOkQcPXp0kud+yKampiGuBgAAAABeXUqlUlpbWys525a8qkPETZ8wNzU1CREBAAAAYBu91FaBDlYBAAAAAKoSIgIAAAAAVQkRAQAAAICqhIgAAAAAQFVCRAAAAACgKiEiAAAAAFCVEBEAAAAAqEqICAAAAABUJUQEAAAAAKoSIgIAAAAAVQkRAQAAAICqhIgAAAAAQFVCRAAAAACgKiEiAAAAAFCVEBEAAAAAqEqICAAAAABUJUQEAAAAAKoSIgIAAAAAVQkRAQAAAICqhIgAAAAAQFVCRAAAAACgKiEiAAAAAFCVEBEAAAAAqEqICAAAAABUJUQEAAAAAKoSIgIAAAAAVQkRAQAAAICqhIgAAAAAQFVCRAAAAACgKiEiAAAAAFCVEBEAAAAAqEqICAAAAABUJUQEAAAAAKoSIgIAAAAAVQkRAQAAAICqhIgAAAAAQFVCRAAAAACgKiEiAAAAAFCVEBEAAAAAqEqICAAAAABUJUQEAAAAAKoSIgIAAAAAVQkRAQAAAICqhIgAAAAAQFVCRAAAAACgKiEiAAAAAFCVEBEAAAAAqEqICAAAAABUJUQEAAAAAKoSIgIAAAAAVQkRAQAAAICqhIgAAAAAQFVCRAAAAACgqoahLqAWpsxZnmHFkUNdBgAAAAA7iN7504e6hFcUKxEBAAAAgKqEiAAAAABAVUJEAAAAAKCqmoWIHR0dKRQKKRQKGTFiRHbbbbccd9xxWbx4cZ599tnKuEKhkG9961ubPX/hhRfmqKOOqlU5AAAAAECN1HQlYnt7e9asWZPe3t58//vfz9SpU3PBBRdkxowZ2bBhQy1fBQAAAAAMkpqezlwsFtPS0pIk2WOPPXLIIYfksMMOyzHHHJPu7u584AMfqOXrAAAAAIBBUPc9EY8++ugcdNBBueWWW7Z7rv7+/pRKpQENAAAAAKivQTlYZfLkyent7d3uebq6utLc3Fxpra2t218cAAAAAFDVoISI5XI5hUJhu+fp7OxMX19fpa1evboG1QEAAAAA1dR0T8QtWblyZfbee+8kyejRo9PX17fZmCeffDLNzc1V5ykWiykWi3WpEQAAAAB4cXVfifjDH/4w9957b04++eQkz33afNdddw0YUy6X82//9m+ZNGlSvcsBAAAAAF6mmq5E7O/vz9q1a7Nx48b89re/zbJly9LV1ZUZM2bkrLPOSpJ87GMfy9lnn53Jkyfn+OOPz9NPP50vfvGL+fd///fMmjWrluUAAAAAADVQ0xBx2bJlmTBhQhoaGvK6170uBx10UBYsWJCzzz47w4Y9t+jx3e9+d8rlcq688sp8/OMfz84775w3v/nN+dGPfpS99tqrluUAAAAAADVQKJfL5aEuYluVSqXnTmm+8KYMK44c6nIAAAAA2EH0zp8+1CUMik35Wl9fX5qamrY4blBOZwYAAAAAXr0G5XTmertv7rSqSSkAAAAAsO2sRAQAAAAAqhIiAgAAAABVCREBAAAAgKp2iD0Rp8xZ7nRmAAAAYDOvlRN2od6sRAQAAAAAqhIiAgAAAABVCREBAAAAgKpqGiJ2dHSkUChU2rhx49Le3p577rlnwLilS5fmqKOOyujRozNy5Mj8+Z//ebq7u2tZCgAAAABQIzVfidje3p41a9ZkzZo1WbFiRRoaGjJjxozK/b//+7/PSSedlLe//e254447cs899+T000/Phz70oXzsYx+rdTkAAAAAwHaq+enMxWIxLS0tSZKWlpbMnj07f/mXf5nf/e53+eMf/5iLL744F154YebNm1d55uKLL85OO+2Uj3zkIzn11FPztre9rdZlAQAAAADbqK57Iq5bty7XX3992traMm7cuPyv//W/8swzz7zoisO//uu/TmNjY2644YYtztff359SqTSgAQAAAAD1VfOViEuXLk1jY2OSZP369ZkwYUKWLl2aYcOG5YEHHkhzc3MmTJiw2XM77bRT9tlnnzzwwANbnLurqytz586tdckAAAAAQBU1X4k4derU9PT0pKenJ3fccUeOP/74nHDCCXn44Ydf8tlyuZyddtppi/c7OzvT19dXaatXr65l6QAAAADAi6j5SsRRo0alra2tcv2Wt7wlzc3N+dKXvpT99tsvfX19+c1vfpPdd999wHN/+tOf8qtf/Srt7e1bnLtYLKZYLNa6ZAAAAACgirruiZgkhUIhw4YNy9NPP51TTjklDQ0NueqqqzYbd9111+Wpp57KWWedVe+SAAAAAICXoeYrEfv7+7N27dokyRNPPJEvfOELWbduXWbOnJk999wzV1xxRT72sY9l5513zvve976MGDEi3/72t3PppZfmM5/5TKZMmVLrkgAAAACA7VDzEHHZsmWVg1NGjx6dyZMn55vf/GaOOuqoJMlHP/rR7LPPPrnqqqvy+c9/PuvXr0+S3HDDDTn99NNrXQ4AAAAAsJ0K5XK5PJQFPP744znmmGPS1NSU73//+xk5cuRWP1sqldLc3JzWC2/KsOLWPwcAAAC8NvTOnz7UJcAr2qZ8ra+vL01NTVscV/c9EV/K2LFj84Mf/CDHHHNMfvrTnw51OQAAAADACwz5SsTtsbVJKQAAAACwuVfNSkQAAAAA4JVNiAgAAAAAVCVEBAAAAACqahjqAmphypzlTmcGAAAAKpzKDLVlJSIAAAAAUJUQEQAAAACoSogIAAAAAFRVtxCxo6MjhUJhs9be3p4kmThxYqVv5MiRmTJlSv7hH/6hXuUAAAAAANuorgertLe3Z8mSJQP6isVi5d+f/vSn88EPfjDr1q1Ld3d3PvShD2XMmDE57bTT6lkWAAAAAPAy1PVz5mKxmJaWlgHtda97XeX+6NGj09LSkra2tnzmM5/Jfvvtl29961v1LAkAAAAAeJnquhLx5dp5553zzDPPbPF+f39/+vv7K9elUmkwygIAAACA17S6rkRcunRpGhsbB7TLLrtss3EbNmxId3d37r333hxzzDFbnK+rqyvNzc2V1traWs/yAQAAAIAkhXK5XK7HxB0dHXn00UezcOHCAf1jx47N2LFjM3HixKxZsyYjRoxIf39/dtppp8yaNSvz58/PsGEvnm2+2ErE1tbWtF54U4YVR9bjxwAAAABehXrnTx/qEuBVoVQqpbm5OX19fWlqatriuLp+zjxq1Ki0tbVt8f4ll1ySjo6OjBw5MhMmTEihUKg6X7FYHHAwCwAAAABQf0O6J+L48eOrhowAAAAAwNCra4jY39+ftWvXDnxhQ0PGjx9fz9cCAAAAADVU1xBx2bJlmTBhwoC+SZMmZdWqVfV8LQAAAABQQ3ULEbu7u9Pd3b3F+729vfV6NQAAAABQQy9+DDIAAAAAwH8a0oNVauW+udOqHkENAAAAAGw7KxEBAAAAgKqEiAAAAABAVUJEAAAAAKCqHWJPxClzlmdYceRQlwEAAPCa1Tt/+lCXAEAdWYkIAAAAAFQlRAQAAAAAqhIiAgAAAABV1S1EXLt2bS644IK0tbVl5513zm677ZZ3vOMdue666/LUU08lSSZOnJirr766XiUAAAAAADVQl4NVfvWrX+WII47ImDFjMm/evBxwwAHZsGFDHnjggSxevDi77757TjzxxHq8GgAAAACosbqEiOedd14aGhrys5/9LKNGjar0H3DAATn55JNTLpfr8VoAAAAAoA5q/jnzY489lltvvTWzZs0aECA+X6FQqPVrAQAAAIA6qXmI+NBDD6VcLmfSpEkD+sePH5/GxsY0NjZm9uzZ2zR3f39/SqXSgAYAAAAA1FfdDlZ54WrDO++8Mz09Pdl///3T39+/TXN2dXWlubm50lpbW2tRKgAAAABQRc1DxLa2thQKhaxatWpA/z777JO2trbssssu2zx3Z2dn+vr6Km316tXbWy4AAAAA8BJqHiKOGzcuxx13XL7whS9k/fr1NZ27WCymqalpQAMAAAAA6qsupzNfe+21OeKII/LWt741n/rUp3LggQdm2LBhueuuu7Jq1aq85S1vqYx99NFH09PTM+D5PffcM2PHjq1HaQAAAADAy1Qol8vleky8Zs2azJs3L9/73vfy61//OsViMW9605ty6qmn5rzzzsvIkSMzceLEPPzww5s9u2TJknR0dLzkO0ql0nN7I154U4YVR9bhpwAAAGBr9M6fPtQlALANNuVrfX19Vb/6rVuIOBiEiAAAAK8MQkSAV6etDRHrdjozAAAAALBjECICAAAAAFXV5WCVwXbf3GlOagYAAACAOrESEQAAAACoSogIAAAAAFQlRAQAAAAAqtoh9kScMmd5hhVHDnUZAAAArwi986cPdQkA7GCsRAQAAAAAqhIiAgAAAABV1TxEXLt2bS644IK0tbVl5513zm677ZZ3vOMdue666/LUU08lSSZOnJirr756s2c/9alP5eCDD651SQAAAADAdqjpnoi/+tWvcsQRR2TMmDGZN29eDjjggGzYsCEPPPBAFi9enN133z0nnnhiLV8JAAAAANRZTUPE8847Lw0NDfnZz36WUaNGVfoPOOCAnHzyySmXy7V8HQAAAAAwCGr2OfNjjz2WW2+9NbNmzRoQID5foVCo1esAAAAAgEFSsxDxoYceSrlczqRJkwb0jx8/Po2NjWlsbMzs2bMr/bNnz670b2rz5s2r+o7+/v6USqUBDQAAAACor5ofrPLC1YZ33nlnenp6sv/++6e/v7/Sf8kll6Snp2dA+9CHPlR17q6urjQ3N1daa2trrcsHAAAAAF6gZnsitrW1pVAoZNWqVQP699lnnyTJLrvsMqB//PjxaWtrG9A3duzYqu/o7OzMRRddVLkulUqCRAAAAACos5qtRBw3blyOO+64fOELX8j69etrNe0AxWIxTU1NAxoAAAAAUF81/Zz52muvzYYNG/LWt741N954Y1auXJn7778/X//617Nq1aoMHz68lq8DAAAAAAZBzT5nTpJ99903P//5zzNv3rx0dnbm17/+dYrFYt70pjflYx/7WM4777xavg4AAAAAGASFcrlc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AAAAgFevunzOPNjumzutalIKAAAAAGw7KxEBAAAAgKqEiAAAAABAVUJEAAAAAKCqHWJPxClzljudGQBeQZy0DAAAOxYrEQEAAACAqoSIAAAAAEBVQkQAAAAAoKq6hIhr167N+eefn3322SfFYjGtra2ZOXNmVqxYkSSZOHFiCoVCCoVCdtlll0yePDmf/exnUy6X61EOAAAAALAdan6wSm9vb4444oiMGTMmV1xxRQ488MA888wzWb58eWbNmpVVq1YlST796U/ngx/8YP74xz/mBz/4QT784Q+nqakpf/3Xf13rkgAAAACA7VDzEPG8885LoVDInXfemVGjRlX6999//5xzzjmV69GjR6elpSVJ8oEPfCALFy7MrbfeKkQEAAAAgFeYmn7O/Pjjj2fZsmWZNWvWgABxkzFjxmzWVy6Xc/vtt2flypUZMWJE1fn7+/tTKpUGNAAAAACgvmoaIj700EMpl8uZPHnyS46dPXt2GhsbUywWM3Xq1JTL5XzkIx+p+kxXV1eam5srrbW1tValAwAAAABbUNMQcdPBKIVC4SXHXnLJJenp6ck///M/Z+rUqfn4xz+et7/97VWf6ezsTF9fX6WtXr26JnUDAAAAAFtW0z0R99tvvxQKhaxcuTLvete7qo4dP3582tra0tbWlptvvjltbW057LDDcuyxx27xmWKxmGKxWMuSAQAAAICXUNOViGPHjs20adNyzTXXZP369Zvdf/LJJ1/0ude97nU5//zz87GPfayymhEAAAAAeGWoaYiYJNdee202btyYQw89NDfffHMefPDBrFy5MgsWLMjhhx++xedmzZqV+++/PzfffHOtSwIAAAAAtkPNQ8S99947d999d6ZOnZqLL744U6ZMyXHHHZcVK1Zk4cKFW3xu1113zfve97586lOfyrPPPlvrsgAAAACAbVQov4q/Hy6VSs+d0nzhTRlWHDnU5QAA/6l3/vShLgEAANgKm/K1vr6+NDU1bXFczVciAgAAAAA7lpqezjxU7ps7rWpSCgAAAABsOysRAQAAAICqhIgAAAAAQFVCRAAAAACgqh1iT8Qpc5Y7nRkAqnBaMgAAsD2sRAQAAAAAqhIiAgAAAABVCREBAAAAgKrqGiJ2dHSkUChs1h566KEt3mtvb69nSQAAAADAy1T3g1Xa29uzZMmSAX277rrrFu8Vi8V6lwQAAAAAvAx1DxGLxWJaWlpe9j0AAAAA4JWh7iFiLfX396e/v79yXSqVhrAaAAAAAHhtqPvBKkuXLk1jY2OlnXrqqVu819jYmMsuu2yLc3V1daW5ubnSWltb610+AAAAALzm1X0l4tSpU7Nw4cLK9ahRo7Z4L0nGjh27xbk6Oztz0UUXVa5LpZIgEQAAAADqrO4h4qhRo9LW1vay772YYrHo4BUAAAAAGGR1/5wZAAAAAHh1G9KDVfr7+7N27doBfQ0NDRk/fvwQVQQAAAAAvNCQhojLli3LhAkTBvRNmjQpq1atGqKKAAAAAIAXKpTL5fJQF7GtSqXSc6c0X3hThhVHDnU5APCK1Tt/+lCXAAAAvAJtytf6+vrS1NS0xXH2RAQAAAAAqhrSz5lr5b6506ompQAAAADAtrMSEQAAAACoSogIAAAAAFQlRAQAAAAAqtoh9kScMme505kBXkOcNAwAADC4rEQEAAAAAKoSIgIAAAAAVQkRAQAAAICq6hoi/uQnP8nw4cPT3t4+oL+3tzeFQmGzduaZZ9azHAAAAABgG9T1YJXFixfn/PPPz5e//OU88sgj2XPPPQfc/8EPfpD999+/cr3LLrvUsxwAAAAAYBvULURcv359brrpptx1111Zu3Zturu788lPfnLAmHHjxqWlpaVeJQAAAAAANVC3z5lvvPHGTJo0KZMmTcqZZ56ZJUuWpFwub9ec/f39KZVKAxoAAAAAUF91CxEXLVpU2eOwvb0969aty4oVKwaMefvb357GxsZK+/nPf151zq6urjQ3N1daa2trvcoHAAAAAP5TXULE+++/P3feeWdOP/30JElDQ0NOO+20LF68eMC4G2+8MT09PZX2pje9qeq8nZ2d6evrq7TVq1fXo3wAAAAA4HnqsifiokWLsmHDhuyxxx6VvnK5nBEjRuSJJ56o9LW2tqatrW2r5y0WiykWizWtFQAAAACoruYrETds2JCvfvWrueqqqwasMvzFL36RvfbaK9dff32tXwkAAAAA1FHNVyIuXbo0TzzxRM4999w0NzcPuHfKKadk0aJFmTFjRq1fCwAAAADUSc1XIi5atCjHHnvsZgFikpx88snp6enJ448/XuvXAgAAAAB1UvOViN/97ne3eO+QQw5JuVxOksp/AQAAAIBXtrqczgwAAAAA7DjqcjrzYLtv7rQ0NTUNdRkAAAAAsEOyEhEAAAAAqEqICAAAAABUJUQEAAAAAKraIfZEnDJneYYVRw51GQD8p97504e6BAAAAGrISkQAAAAAoCohIgAAAABQlRARAAAAAKiqpiFiR0dHCoVCCoVCRowYkd122y3HHXdcFi9enGeffTb/9m//lkKhkB//+Mcv+vy0adNy4okn1rIkAAAAAGA71XwlYnt7e9asWZPe3t58//vfz9SpU3PBBRdkxowZOeigg3LQQQdlyZIlmz23evXq/OAHP8i5555b65IAAAAAgO1Q89OZi8ViWlpakiR77LFHDjnkkBx22GE55phj0t3dnXPPPTeXXnppFixYkFGjRlWe6+7uzq677prp053oCQAAAACvJIOyJ+LRRx+dgw46KLfcckve+9735plnnsk3v/nNyv1yuZzu7u6cffbZaWioea4JAAAAAGyHQTtYZfLkyent7c3YsWPzrne9a8Anzbfffnt+9atf5Zxzzqk6R39/f0ql0oAGAAAAANTXoIWI5XI5hUIhSXLuuefmX/7lX/LQQw8lSRYvXpwjjjgikyZNqjpHV1dXmpubK621tbXudQMAAADAa92ghYgrV67M3nvvnSQ59thjs9dee6W7uzulUim33HLLVh2o0tnZmb6+vkpbvXp1vcsGAAAAgNe8QdmA8Ic//GHuvffefPSjH02SFAqFvP/978+Xv/zlvOENb8iwYcPy7ne/+yXnKRaLKRaL9S4XAAAAAHiemq9E7O/vz9q1a/Poo4/m7rvvzrx583LSSSdlxowZOeussyrj3v/+9+c3v/lNLr300px++ukDTmoGAAAAAF45ar4ScdmyZZkwYUIaGhryute9LgcddFAWLFiQs88+O8OG/b/Mcs8998yxxx6bW2+99SUPVAEAAAAAhk6hXC6Xh7qIbVUqlZ47YOXCmzKsOHKoywHgP/XOnz7UJQAAALAVNuVrfX19aWpq2uK4QTtYBQAAAAB4dRIiAgAAAABVDcrpzPV239xpVZdbAgAAAADbzkpEAAAAAKAqISIAAAAAUJUQEQAAAACoaofYE3HKnOUZVhw51GUAvKb0zp8+1CUAAAAwSKxEBAAAAACqEiICAAAAAFXVLUTs6OhIoVDYrD300ENJkrVr1+b888/PPvvsk2KxmNbW1sycOTMrVqyoV0kAAAAAwDao656I7e3tWbJkyYC+XXfdNb29vTniiCMyZsyYXHHFFTnwwAPzzDPPZPny5Zk1a1ZWrVpVz7IAAAAAgJehriFisVhMS0vLZv3nnXdeCoVC7rzzzowaNarSv//+++ecc86pZ0kAAAAAwMs06HsiPv7441m2bFlmzZo1IEDcZMyYMYNdEgAAAABQRV1DxKVLl6axsbHSTj311Dz00EMpl8uZPHnyy56vv78/pVJpQAMAAAAA6quunzNPnTo1CxcurFyPGjUqjzzySJKkUCi87Pm6uroyd+7cmtUHAAAAALy0uq5EHDVqVNra2iptwoQJ2W+//VIoFLJy5cqXPV9nZ2f6+voqbfXq1XWoGgAAAAB4vkHfE3Hs2LGZNm1arrnmmqxfv36z+08++eQWny0Wi2lqahrQAAAAAID6GvQQMUmuvfbabNy4MYceemhuvvnmPPjgg1m5cmUWLFiQww8/fChKAgAAAAC2oK57Im7J3nvvnbvvvjuXX355Lr744qxZsya77rpr3vKWtwzYQxEAAAAAGHqFcrlcHuoitlWpVEpzc3NaL7wpw4ojh7ocgNeU3vnTh7oEAAAAttOmfK2vr6/q1oFD8jkzAAAAAPDqIUQEAAAAAKoakj0Ra+2+udOc1AwAAAAAdWIlIgAAAABQlRARAAAAAKhKiAgAAAAAVLVD7Ik4Zc7yDCuOHOoyAHYovfOnD3UJAAAAvEJYiQgAAAAAVCVEBAAAAACqetkh4tq1a3P++ednn332SbFYTGtra2bOnJkVK1YkSU4//fSccMIJA575/ve/n0KhkE984hMD+i+77LLsvvvu21E+AAAAAFBvL2tPxN7e3hxxxBEZM2ZMrrjiihx44IF55plnsnz58syaNSurVq3K1KlT87GPfSwbNmxIQ8Nz099+++1pbW3NbbfdNmC+22+/PVOnTq3dTwMAAAAA1NzLChHPO++8FAqF3HnnnRk1alSlf//9988555yTJJk6dWrWrVuXn/3sZznssMOSPBcW/rf/9t/y0Y9+NE899VRGjhyZP/3pT/npT3+aBQsW1PDHAQAAAABqbas/Z3788cezbNmyzJo1a0CAuMmYMWOSJG984xuz++67V1Yd/uEPf8jdd9+dU089Nfvuu2/+9V//NUnyf/7P/8nTTz9tJSIAAAAAvMJtdYj40EMPpVwuZ/LkyS859qijjsrtt9+eJPnRj36UN77xjdl1111z5JFHVvo3feK87777bnWx/f39KZVKAxoAAAAAUF9bHSKWy+UkSaFQeMmxU6dOzb/+67/mmWeeye23356jjjoqSTYLEY8++uiXVWxXV1eam5srrbW19WU9DwAAAAC8fFsdIu63334pFApZuXLlS46dOnVq1q9fn7vuuiu33XZbjjzyyCTPhYh33XVXHn/88fz0pz992Z8yd3Z2pq+vr9JWr179sp4HAAAAAF6+rQ4Rx44dm2nTpuWaa67J+vXrN7v/5JNPVv697777prW1Nd/5znfS09NTCREnTJiQiRMn5qqrrsof//jHlx0iFovFNDU1DWgAAAAAQH1tdYiYJNdee202btyYQw89NDfffHMefPDBrFy5MgsWLMjhhx8+YOzUqVNz7bXXpq2tLbvttlul/8gjj8zf//3fZ5999smee+5Zm58CAAAAAKiblxUi7r333rn77rszderUXHzxxZkyZUqOO+64rFixIgsXLhwwdurUqfnDH/5Q2Q9xkyOPPDJ/+MMfnMoMAAAAAK8ShfKmE1NehUql0nMHrFx4U4YVRw51OQA7lN7504e6BAAAAOpsU77W19dXdevAl7USEQAAAAB47REiAgAAAABVNQx1AbVw39xpTmoGAAAAgDqxEhEAAAAAqEqICAAAAABUJUQEAAAAAKraIfZEnDJneYYVRw51GQCvar3zpw91CQAAALxCWYkIAAAAAFQlRAQAAAAAqqpbiLh27dqcf/752WeffVIsFtPa2pqZM2dmxYoVSZKf//znmTFjRl7/+tdn5513zsSJE3Paaafl97//fb1KAgAAAAC2QV32ROzt7c0RRxyRMWPG5IorrsiBBx6YZ555JsuXL8+sWbPyL//yLzn22GMzc+bMLF++PGPGjMl//Md/5Dvf+U6eeuqpepQEAAAAAGyjQrlcLtd60ne+85255557cv/992fUqFED7j355JO5/fbbc+qpp+bpp59OQ8O255ilUinNzc1pvfAmB6sAbCcHqwAAALz2bMrX+vr60tTUtMVxNf+c+fHHH8+yZcsya9aszQLEJBkzZkxaWlqyYcOG/O///b9ThwwTAAAAAKihmoeIDz30UMrlciZPnrzFMYcddlguvfTSvOc978n48eNzwgkn5LOf/Wx++9vfVp27v78/pVJpQAMAAAAA6qvmIeKmlYWFQqHquMsvvzxr167Nddddlze96U25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/Md//EdWr16d73//+y85b39/f2X1YpKUSqV6lA8AAAAAPE9dViIuWrQoZ555ZpKkvb0969aty4oVKwaMOfroo3PKKafkpptuyoIFCzJ+/PiXnLerqyvNzc2V1traWo/yAQAAAIDnqXmIeP/99+fOO+/M6aefniRpaGjIaaedlsWLFw8Y95vf/CbLli3LyJEj86Mf/Wir5u7s7ExfX1+lrV69utblAwAAAAAvUPPPmRctWpQNGzZkjz32qPSVy+WMGDEiTzzxRF73utclST7wgQ/koIMOyty5c3PMMcfklFNOyZFHHll17mKxmGKxWOuSAQAAAIAqaroSccOGDfnqV7+aq666Kj09PZX2i1/8InvttVeuv/76JMmXv/zl/OhHP8qSJUty5JFH5m/+5m9yzjnnZP369bUsBwAAAACogZqGiEuXLs0TTzyRc889N1OmTBnQTjnllCxatCiPPPJILr744lx55ZXZe++9kyTz5s3LsGHD8t/+23+rZTkAAAAAQA3UNERctGhRjj322DQ3N2927+STT05PT086Ojpy2GGH5a//+q8r90aOHJklS5Zk4cKF+ed//udalgQAAAAAbKea7on43e9+d4v3DjnkkJTL5S3ef8c73pENGzbUshwAAAAAoAZqfjozAAAAALBjqfnpzEPhvrnT0tTUNNRlAAAAAMAOyUpEAAAAAKAqISIAAAAAUJUQEQAAAACoaofYE3HKnOUZVhw51GUAbFHv/OlDXQIAAABsMysRAQAAAICqhIgAAAAAQFVCRAAAAACgqkELEdeuXZsLLrggbW1t2XnnnbPbbrvlHe94R6677ro89dRTSZKJEyfm6quvHqySAAAAAICtMCgHq/zqV7/KEUcckTFjxmTevHk54IADsmHDhjzwwANZvHhxdt9995x44omDUQoAAAAA8DINSoh43nnnpaGhIT/72c8yatSoSv8BBxyQk08+OeVyeTDKAAAAAAC2Qd1DxMceeyy33npr5s2bNyBAfL5CobBVc/X396e/v79yXSqValIjAAAAALBldd8T8aGHHkq5XM6kSZMG9I8fPz6NjY1pbGzM7Nmzt2qurq6uNDc3V1pra2s9SgYAAAAAnmfQDlZ54WrDO++8Mz09Pdl///0HrC6sprOzM319fZW2evXqepQKAAAAADxP3T9nbmtrS6FQyKpVqwb077PPPkmS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HH300TF27Ng49dRT48gjj4xZs2alVRIAAAAA0AOphYiv5YgjjojJkyfHHXfcEXfeeWd873vfi49+9KNx7LHHxiOPPBKPPPJIX5YDAAAAAHRDn4aIERGTJk2Khx9+OCIivvWtb8U+++wT999/f9x2222x6667lry2UChEoVAoHufz+VRrBQAAAAD6YXfmJEkik8lERMSuu+4aH//4x+Otb31rfOADH3jda5uamiKXyxVbbW1t2uUCAAAAwL+8Pg8RW1paYty4ccXjioqKqKjo3oLIxsbG6OjoKLZ169alVSYAAAAA8P/r09eZ77333li9enWcc845Pbo+m81GNpstc1UAAAAAQCmphYiFQiHa29tj8+bN8cwzz0Rzc3M0NTVFQ0NDnHzyyWndFgAAAAAos9RCxObm5qipqYmKiorYaaedYvLkybFgwYI45ZRTYsCAPn+LGgAAAADooUySJEl/F9FT+Xw+crlcdHR0RFVVVX+XAwAAAABvKt3N1ywJBAAAAABKEiICAAAAACUJEQEAAACAkoSIAAAAAEBJQkQAAAAAoCQhIgAAAABQkhARAAAAAChJiAgAAAAAlCREBAAAAABKKnuI2N7eHnPmzIm6uroYMmRIjBo1Kg477LD4xje+ES+88EJERIwdOzYymUxkMpkYOHBg7LbbbnHqqafGhg0byl0OAAAAANBLFeUc7Mknn4xDDz00hg8fHvPnz4999903Ojs74/HHH4/FixfHbrvtFu9973sjIuKSSy6J008/PTZv3hyPP/54fPzjH49Pf/rT8e1vf7ucJQEAAAAAvVTWEPGMM86IioqKeOCBB6KysrJ4ft99941jjz02kiQpnhs2bFhUV1dHRMTo0aPj5JNPjptuuqmc5QAAAAAAZVC215mfffbZuOeee2L27NldAsR/lMlkXvP8n//851i2bFkcdNBB5SoHAAAAACiTsoWIa9eujSRJYuLEiV3Ojxw5MoYOHRpDhw6NuXPnFs/PnTs3hg4dGjvssEPsvvvukclk4utf/3rJexQKhcjn810aAAAAAJCusm+s8s+rDVeuXBmrVq2KvffeOwqFQvH8+eefH6tWrYqHH344li9fHhERxxxzTGzevHmrYzc1NUUulyu22tracpcPAAAAAPyTsoWIdXV1kclk4rHHHutyfvz48VFXVxc77LBDl/MjR46Murq6mDBh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AAAAlCREBAAAAABK2qZCxIULF8a4ceNiyJAhMWXKlLj//vtL9v/5z38eU6ZMiSFDhsT48ePjG9/4xhZ9br/99thrr70im83GXnvtFd/73vfSKp9tQLnn0O9///s49thjY+zYsZHJZOLKK69MsXq2BeWeQ9ddd128853vjJ122il22mmnmD59eqxcuTLNR6CflXsO3XHHHXHAAQfE8OHDo7KyMvbbb7/49re/neYj0M/S+PfQq2666abIZDLx/ve/v8xVsy0p9xxaunRpZDKZLdr//M//pPkY9KM0/g4999xzMXv27KipqYkhQ4bEW9/61rjzzjvTegT6Wbnn0OGHH/6af4eOOeaYNB+DfpTG36Err7wyJk6cGDvssEPU1tbGOeec43/L3qhkG3HTTTclgwYNSq677rrk0UcfTebMmZNUVlYmTz311Gv2f/LJJ5Mdd9wxmTNnTvLoo48m1113XTJo0KDktttuK/ZZsWJFMnDgwGT+/PlJS0tLMn/+/KSioiL51a9+1VePRR9KYw6tXLky+cxnPpN897vfTaqrq5N///d/76OnoT+kMYc+9KEPJddcc03y0EMPJS0tLclHP/rRJJfLJX/605/66rHoQ2nMoZ/97GfJHXfckTz66KPJ2rVrkyuvvDIZOHBg0tzc3FePRR9KYw69qrW1NRk9enTyzne+M3nf+96X8pPQX9KYQ0uWLEmqqqqStra2Lo3tUxpzqFAoJAcccEDynve8J/nlL3+ZtLa2Jvfff3+yatWqvnos+lAac+jZZ5/t8vfnkUceSQYOHJgsWbKkj56KvpTGHPrOd76TZLPZ5MYbb0z++Mc/JnfffXdSU1OTnH322X31WNuFbSZEPPDAA5NPfvKTXc5NmjQp+dznPvea/T/72c8mkyZN6nLuE5/4RDJ16tTi8fHHH5/U19d36TNjxozkxBNPLFPVbEvSmEP/aMyYMULE7VzacyhJkqSzszMZNmxY8p//+Z+9L5htTl/MoSRJkre//e3JF7/4xd4VyzYprTnU2dmZHHroocn111+fnHLKKULE7Vgac2jJkiVJLpcre61sm9KYQ9dee20yfvz45KWXXip/wWxz+uLfQ//+7/+eDBs2LNm4cWPvC2abk8Ycmj17dnLEEUd06XPuuecmhx12WJmq/tewTbzO/NJLL8Vvf/vbOProo7ucP/roo2PFihWv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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#get the mutual information of features\n", "def make_mi_scores(X: pd.DataFrame, y: pd.DataFrame, discrete_features: list):\n", " mi_scores = mutual_info_regression(X, y, discrete_features=discrete_features)\n", " mi_scores = pd.Series(mi_scores, name=\"MI Scores\", index=X.columns)\n", " mi_scores = mi_scores.sort_values(ascending=False)\n", " return mi_scores\n", "\n", "def plot_mi_scores(scores):\n", " scores = scores.sort_values(ascending=True)\n", " width = np.arange(len(scores))\n", " ticks = list(scores.index)\n", " plt.figure(dpi=100, figsize=(16, 16))\n", " plt.barh(width, scores)\n", " plt.yticks(width, ticks)\n", " plt.title(\"Mutual Information Scores\")\n", "\n", "\n", "\n", "cols = list(X_train.columns)\n", "cols.append(\"1\")\n", "X_transformed = X_train.fillna(0)\n", "X_transformed[\"EJ\"].replace(['A', 'B'], [0, 1], inplace=True)\n", "discrete_features = X_transformed.dtypes == int\n", "mi_scores = make_mi_scores(X_transformed, y_train, discrete_features)\n", "bad_scores = list(mi_scores.index[i] for i, score in zip(range(len(mi_scores)),mi_scores) if score < 0.01)\n", "plot_mi_scores(mi_scores)\n", "print(f\" Columns with MI equal zero: {bad_scores} --> total length: {len(bad_scores)}\")\n", "#--> dropping the unecessary columns" ] }, { "cell_type": "code", "execution_count": 1010, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "38\n", "dataset shape: (617, 38)\n", "Number of columns: 37\n", "Accuracy of [0.92105263 0.91891892 0.89189189 0.97297297 0.86486486]\n" ] } ], "source": [ "# Building Pipeline\n", "train, greeks, test, id_list = load_dataset(columns_drop=bad_scores)\n", "print(f\"dataset shape: {train.shape}\")\n", "X_train, X_valid, y_train, y_valid = split_data(train, 0.3)\n", "preprocessor = build_pipeline(X_train)\n", "pipeline = Pipeline(steps=[('preprocessor', preprocessor),\n", " ('model', model)\n", " ])\n", "\n", "#Fit the Model and make preds\n", "pipeline.fit(X_train, y_train)\n", "preds = pipeline.predict(X_valid)\n", "score = cross_val_score(pipeline, X_valid, y_valid, cv=5, scoring='accuracy')\n", "print(f\"Accuracy of {score}\")" ] } ], "metadata": { "kernelspec": { "display_name": "base", "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" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }