{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Imports:","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nfrom sklearn.compose import ColumnTransformer\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.metrics import classification_report","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import InputLayer, Dense, Dropout\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.losses import CategoricalCrossentropy\nfrom tensorflow.keras.metrics import CategoricalAccuracy, AUC\nfrom tensorflow.keras.utils import to_categorical\nfrom tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Data Processing:","metadata":{}},{"cell_type":"code","source":"data = pd.read_csv(\"/kaggle/input/digit-recognizer/train.csv\")\nfeatures_test_set = pd.read_csv(\"/kaggle/input/digit-recognizer/test.csv\")\nsub = pd.read_csv(\"/kaggle/input/digit-recognizer/sample_submission.csv\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data.head(7)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"features = data.drop(['label'], axis=1)\nlabels = data.label","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"features_train, features_test, labels_train, labels_test = train_test_split(\n    features, labels,\n    test_size=0.2,\n    stratify=labels,\n    random_state=42\n)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"columnTransformer = ColumnTransformer([('scale', StandardScaler(), features_train.columns)])\ncolumnTransformerForTest = ColumnTransformer([('scale', StandardScaler(), features_train.columns)])\n\n\nfeatures_train = pd.DataFrame(columnTransformer.fit_transform(features_train))\nfeatures_test = pd.DataFrame(columnTransformer.transform(features_test))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels_train = to_categorical(labels_train)\nlabels_test = to_categorical(labels_test)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model Design:","metadata":{}},{"cell_type":"code","source":"model = Sequential(name=\"MNIST_model\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.add(InputLayer(input_shape=(features_train.shape[1],)))\nmodel.add(Dense(128, activation='relu'))\nmodel.add(Dropout(0.05))\nmodel.add(Dense(128, activation='relu'))\nmodel.add(Dropout(0.05))\nmodel.add(Dense(64, activation='relu'))\nmodel.add(Dense(10, activation='softmax'))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(\n    optimizer=Adam(),\n    loss=CategoricalCrossentropy(),\n    metrics=[CategoricalAccuracy(), AUC()]\n)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Train:","metadata":{}},{"cell_type":"code","source":"earlyStopping = EarlyStopping(monitor='val_loss', patience=6)\nreduceLROnPlateau = ReduceLROnPlateau(patience=5)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(\n    features_train,\n    labels_train,\n    batch_size=4,\n    epochs=100,\n    validation_split=0.15,\n    verbose=0,\n    callbacks=[earlyStopping, reduceLROnPlateau]\n)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Prediction:","metadata":{}},{"cell_type":"code","source":"features_test_set = pd.DataFrame(columnTransformerForTest.fit_transform(features_test_set))\nlabels_pred = np.argmax(model.predict(features_test_set), axis=1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub.Label = labels_pred","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub.to_csv('/kaggle/working/submission.csv',index=False)","metadata":{},"execution_count":null,"outputs":[]}]}