{"cells":[{"metadata":{},"cell_type":"markdown","source":"# MNIST sample\n\nThis is my first notebook on kaggle, so please bear with me :-)"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nfrom sklearn.model_selection import train_test_split\nimport matplotlib.pyplot as plt\nimport sklearn\nfrom sklearn import svm, metrics\n\ntrain_df = pd.read_csv(\"/kaggle/input/digit-recognizer/train.csv\", dtype=np.float32)\ntest_df = pd.read_csv(\"/kaggle/input/digit-recognizer/test.csv\", dtype=np.float32)\nsample_sub = pd.read_csv(\"/kaggle/input/digit-recognizer/sample_submission.csv\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Shaping training data as numpy tensors\n\nExtract label and pixel values from the `train_df` data frame."},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"y = train_df.label.values\nX = train_df.loc[:, train_df.columns != 'label'].values/255\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train.shape, X_test.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def evaluate(classifier, verbose=False):\n    \"\"\" Print evaluation data for the classifier \"\"\"\n    predicted = classifier.predict(X_test)\n    if verbose:\n        print(f\"Classification report for classifier {classifier}:\")\n        print(f\"{metrics.classification_report(y_test, predicted)}\")\n        print(f\"Confusion matrix:\\n{metrics.confusion_matrix(y_test, predicted)}\")\n    \n    return metrics.f1_score(y_test, predicted, average=\"weighted\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Train a classifier"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.neural_network import MLPClassifier\n\nclassifiers = [ MLPClassifier() ]\nscores = {}\n\nfor classifier in classifiers:\n    print(f\"Training: {classifier.__class__.__name__}\")\n    classifier.fit(X_train, y_train)\n    scores[classifier] = evaluate(classifier)\n    \nfor (c, score) in sorted(scores.items(), key=lambda p: p[1], reverse=True):\n    print(f\"{c.__class__.__name__:25s}: {score:.3f}\")\n\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Predict labels for test set"},{"metadata":{"trusted":true},"cell_type":"code","source":"X = test_df.loc[:].values/255\n\nX.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"classifier = classifiers[0]\n\npredicted = classifier.predict(X).astype(int)\n\npredicted","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Write results"},{"metadata":{"trusted":true},"cell_type":"code","source":"sample_sub['Label'] = predicted\nsample_sub.to_csv(\"submission.csv\", index=False)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":""}],"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":4,"nbformat_minor":1}