gen_train_data.ipynb 5.25 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Training Data Generation\n",
    "By Joaquín Torres, May 2024"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Set-up"
   ]
  },
  {
   "cell_type": "code",
Joaquin Torres's avatar
Joaquin Torres committed
20
   "execution_count": 1,
21 22 23 24 25 26 27
   "metadata": {},
   "outputs": [],
   "source": [
    "# Libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.model_selection import train_test_split\n",
Joaquin Torres's avatar
Joaquin Torres committed
28
    "from imblearn.combine import SMOTETomek\n",
29 30 31 32 33
    "from imblearn.under_sampling import TomekLinks"
   ]
  },
  {
   "cell_type": "code",
Joaquin Torres's avatar
Joaquin Torres committed
34
   "execution_count": 2,
35 36 37 38
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load clean datasets\n",
Joaquin Torres's avatar
Joaquin Torres committed
39 40
    "df_pre = pd.read_csv('./input/pre_dataset.csv')\n",
    "df_post = pd.read_csv('./input/post_dataset.csv')"
41 42 43 44
   ]
  },
  {
   "cell_type": "code",
Joaquin Torres's avatar
Joaquin Torres committed
45
   "execution_count": 3,
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(22861, 39)\n",
      "(10677, 39)\n",
      "(22861,)\n",
      "(10677,)\n",
      "39\n"
     ]
    }
   ],
   "source": [
    "# Creating a numpy matrix (X) without the target variable and a list with the target variable (y) \n",
    "X_pre, y_pre = df_pre.loc[:, df_pre.columns != \"Situacion_tratamiento_REDEF\"].to_numpy(), df_pre.Situacion_tratamiento_REDEF\n",
    "X_post, y_post = df_post.loc[:, df_post.columns != \"Situacion_tratamiento_REDEF\"].to_numpy(), df_post.Situacion_tratamiento_REDEF\n",
    "feat = np.delete(df_pre.columns.to_numpy(),-1) # Get labels and remove target \n",
    "\n",
    "print(X_pre.shape)\n",
    "print(X_post.shape)\n",
    "print(y_pre.shape)\n",
    "print(y_post.shape)\n",
    "print(len(feat))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Training-Test Split & Sampling"
   ]
  },
  {
   "cell_type": "code",
Joaquin Torres's avatar
Joaquin Torres committed
82
   "execution_count": 4,
83 84 85 86 87 88 89 90 91 92
   "metadata": {},
   "outputs": [],
   "source": [
    "# ORIGINAL\n",
    "X_train_pre, X_test_pre, y_train_pre, y_test_pre = train_test_split(X_pre, y_pre, test_size=0.1, random_state=42) #90-10 split\n",
    "X_train_post, X_test_post, y_train_post, y_test_post = train_test_split(X_post, y_post, test_size=0.1, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
Joaquin Torres's avatar
Joaquin Torres committed
93
   "execution_count": 5,
94 95 96 97
   "metadata": {},
   "outputs": [],
   "source": [
    "# Save test data\n",
Joaquin Torres's avatar
Joaquin Torres committed
98 99 100 101
    "np.save('./output/pre/X_test_pre.npy', X_test_pre)\n",
    "np.save('./output/pre/y_test_pre.npy', y_test_pre)\n",
    "np.save('./output/post/X_test_post.npy', X_test_post)\n",
    "np.save('./output/post/y_test_post.npy', y_test_post)"
102 103 104 105
   ]
  },
  {
   "cell_type": "code",
Joaquin Torres's avatar
Joaquin Torres committed
106
   "execution_count": 6,
107 108 109 110
   "metadata": {},
   "outputs": [],
   "source": [
    "# Save ORIGINAL training data\n",
Joaquin Torres's avatar
Joaquin Torres committed
111 112 113 114
    "np.save('./output/pre/X_train_pre.npy', X_train_pre)\n",
    "np.save('./output/pre/y_train_pre.npy', y_train_pre)\n",
    "np.save('./output/post/X_train_post.npy', X_train_post)\n",
    "np.save('./output/post/y_train_post.npy', y_train_post)"
115 116 117 118
   ]
  },
  {
   "cell_type": "code",
Joaquin Torres's avatar
Joaquin Torres committed
119
   "execution_count": 7,
120 121 122
   "metadata": {},
   "outputs": [],
   "source": [
Joaquin Torres's avatar
Joaquin Torres committed
123 124 125 126
    "# OVERSAMPLED training data\n",
    "smote_tomek = SMOTETomek()\n",
    "X_train_over_pre, y_train_over_pre = smote_tomek.fit_resample(X_train_pre, y_train_pre)\n",
    "X_train_over_post, y_train_over_post = smote_tomek.fit_resample(X_train_post, y_train_post)"
127 128 129 130
   ]
  },
  {
   "cell_type": "code",
Joaquin Torres's avatar
Joaquin Torres committed
131
   "execution_count": 9,
132 133 134 135
   "metadata": {},
   "outputs": [],
   "source": [
    "# Save oversampled training data\n",
Joaquin Torres's avatar
Joaquin Torres committed
136 137 138 139
    "np.save('./output/pre/X_train_over_pre.npy', X_train_over_pre)\n",
    "np.save('./output/pre/y_train_over_pre.npy', y_train_over_pre)\n",
    "np.save('./output/post/X_train_over_post.npy', X_train_over_post)\n",
    "np.save('./output/post/y_train_over_post.npy', y_train_over_post)"
140 141 142 143
   ]
  },
  {
   "cell_type": "code",
Joaquin Torres's avatar
Joaquin Torres committed
144
   "execution_count": 10,
145 146 147 148 149 150 151 152 153 154 155
   "metadata": {},
   "outputs": [],
   "source": [
    "# UNDERSAMPLING: TOMEK-LINKS \n",
    "tomek = TomekLinks()\n",
    "X_train_under_pre, y_train_under_pre = tomek.fit_resample(X_train_pre, y_train_pre)\n",
    "X_train_under_post, y_train_under_post = tomek.fit_resample(X_train_post, y_train_post)"
   ]
  },
  {
   "cell_type": "code",
Joaquin Torres's avatar
Joaquin Torres committed
156
   "execution_count": 14,
157 158 159 160
   "metadata": {},
   "outputs": [],
   "source": [
    "# Save undersampled training data\n",
Joaquin Torres's avatar
Joaquin Torres committed
161 162 163 164
    "np.save('./output/pre/X_train_under_pre.npy', X_train_under_pre)\n",
    "np.save('./output/pre/y_train_under_pre.npy', y_train_under_pre)\n",
    "np.save('./output/post/X_train_under_post.npy', X_train_under_post)\n",
    "np.save('./output/post/y_train_under_post.npy', y_train_under_post)"
165
   ]
166 167 168 169 170 171 172 173
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Save features\n",
Joaquin Torres's avatar
Joaquin Torres committed
174
    "np.save('./output/attributes.npy', feat)"
175
   ]
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}