{"cells":[{"metadata":{"trusted":false,"_uuid":"833cf07c6b03d634b891738d6a269ba5d355e2b6"},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt, matplotlib.image as mpimg\nfrom scipy.sparse import lil_matrix\nfrom sklearn import svm\nfrom sklearn.decomposition import PCA\nimport sklearn.discriminant_analysis","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d492326c28bc12fed0c71f625abaf61a33121104"},"cell_type":"markdown","source":"# First Attempt"},{"metadata":{"trusted":false,"_uuid":"3843550bd7a068b636b6f2f8583f151240c20c84"},"cell_type":"code","source":"data = pd.read_csv(\"../input/train.csv\")\ndata.shape","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"1a2b45423466aa6ab48030a50c2750706d1fb9e8"},"cell_type":"markdown","source":"Seeing the images:"},{"metadata":{"trusted":false,"_uuid":"c90ec81674086769f795eec57c842a9d8155e1f7"},"cell_type":"code","source":"i = 6\nimage = np.array(data.iloc[i,1:])\nimage = image.reshape([28, 28])\nplt.imshow(image, cmap='gray')\nplt.title(data.iloc[i,0])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"afa9767a59fcb3e49144e430ba24ac33fda2a4a9"},"cell_type":"code","source":"train_n = 5000\ntrain_labels = np.array(data.iloc[:train_n,0])\ntrain = lil_matrix(np.array(data.iloc[:train_n, 1:]), dtype = 'int32')\ntrain_labels.shape, train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"81afaf36b9f2e5b63328c6791d8ffbcf24612643"},"cell_type":"code","source":"test_n = 10000\ntest_labels = np.array(data.iloc[train_n : train_n + test_n, 0])\ntest = lil_matrix(np.array(data.iloc[train_n : train_n + test_n, 1:]), dtype = 'int32')\ntest_labels.shape, test.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"e61882884a5802b2d87087ac527ea0432542fb11"},"cell_type":"code","source":"clf = svm.SVC(gamma='scale')\nclf.fit(train, train_labels)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"94ce521047172eecd0b597aaaa6de234904ae003"},"cell_type":"code","source":"clf.score(test, test_labels)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8cce40366a7b2baf51e9223e9a69fb0ab9819371"},"cell_type":"markdown","source":"The first score was 15.3%"},{"metadata":{"_uuid":"69f2afc44def70c59c1f52b9987873edca6ddf76"},"cell_type":"markdown","source":"# Now let's convert the pixels to binary"},{"metadata":{"trusted":false,"_uuid":"fde2588efca8b1cf22a130bb3ff5db095c24f1d3"},"cell_type":"code","source":"data_simple = (np.array(data)[:,1:] >= 120).astype(int)\ndata_simple.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"453a63ff86240a3f887d22c201dbd91dc415d9c0"},"cell_type":"code","source":"i = 3\nimage = data_simple[i,:]\nimage = image.reshape([28, 28])\nplt.imshow(image, cmap='gray')\nplt.title(data.iloc[i,0])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"acdd25df504523fbe58d768fe1d6817af32e1f35"},"cell_type":"code","source":"train_n = 32000\ntrain_labels = np.array(data.iloc[:train_n,0])\ntrain = data_simple[:train_n]\ntrain_labels.shape, train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"b89e7d2bcac6e063f5666be5af6a34051e8d993f"},"cell_type":"code","source":"test_n = 10000\ntest_labels = np.array(data.iloc[train_n : train_n + test_n, 0])\ntest = data_simple[train_n : train_n + test_n]\ntest_labels.shape, test.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"d09fd0aca57ca939aa4b2cbb54d7c341cf9092ac"},"cell_type":"code","source":"clf2 = svm.SVC(gamma='scale')\nclf2.fit(train, train_labels)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"80314eb38d91f57289d2d0a99c3f1215125f9cdc"},"cell_type":"code","source":"clf2.score(test, test_labels)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"60461d1d4025ce8f841c08fd4ebf2ec61265b66d"},"cell_type":"markdown","source":"With a pixel treshold of 120 the score jumped to 92.28%!!!\n\nWith threshold in 0 the score is 92.26%\n\nWith threshold in 200 it decreases to 90%"},{"metadata":{"_uuid":"04373c84707221bc815db0922782c02c3be128c1"},"cell_type":"markdown","source":"# Now let's try by applying pca previously"},{"metadata":{"trusted":false,"_uuid":"6723c18d65379f9f00b4087636c32df58134ef3e"},"cell_type":"code","source":"pca = PCA(0.65)\npca.fit(train)\npca.n_components_","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"b36325dc0d0e7c595d1f4d4f9890bee225e50c28"},"cell_type":"code","source":"train_pca = pca.transform(train)\ntest_pca = pca.transform(test)\ntrain_pca.shape, test_pca.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"fc3d19ddc796848a0835fad96e8cc9fbaf64fe55"},"cell_type":"code","source":"clf3 = svm.SVC(gamma='scale')\nclf3.fit(train_pca, train_labels)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"c5be9b42d842fba7b059c50a99e74bd8ad8259c2"},"cell_type":"code","source":"clf3.score(test_pca, test_labels)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"bfcdaef513c2a52f9ea9b67a2bf0292a5795c1f4"},"cell_type":"markdown","source":"With pca at 95% we obtain a score of 93.66%!!!\n\nAt 90% confidence it goes up to 94.09%\n\nAt 80% confidence it goes up to 94.99%!!!\n\nAt 60% confidence we get a score of 95.41%!!!!!\n\nIt starts going down after that...\n\nWith 65% confidence and with the 32000 entries on the training set the accuracy goes up to **97.86%**"},{"metadata":{"_uuid":"b275b3309676c38325d793364e422e7e1a438dda"},"cell_type":"markdown","source":"# Time to prepare a submission"},{"metadata":{"trusted":false,"_uuid":"302b7272c755fd43afcaaff032fb910c1615057e"},"cell_type":"code","source":"train = data_simple\ntrain_labels = np.array(data.iloc[:,0])\ntest = (pd.read_csv('../input/test.csv') >= 120).astype(int)\ntrain.shape, train_labels.shape, test.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"ac6c3313c3d5841d502d86af040e3bbfa79695ed"},"cell_type":"code","source":"pca = PCA(0.65)\npca.fit(train)\npca.n_components_","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"241b92ba07aed849e5b1826ca60ee23ad06ce94c"},"cell_type":"code","source":"train_pca = pca.transform(train)\ntest_pca = pca.transform(test)\ntrain_pca.shape, test_pca.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"3372bc6d324c5ec797ed550718d5896953f2d3be"},"cell_type":"code","source":"clf4 = svm.SVC(gamma='scale')\nclf4.fit(train_pca, train_labels)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"03cf986a16aac395aa3ec54e1b54119307114531"},"cell_type":"code","source":"pred = clf4.predict(test_pca)\npred.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"448ed215922632544460feb510e6cf5645c0dcf5"},"cell_type":"code","source":"r = np.array([range(1,28001), pred], dtype = int).transpose()\nr = pd.DataFrame(r)\nr.columns = [\"ImageId\", \"Label\"]\nr","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"bfe4775599da70df259bb0d79e22f2ac273c388a"},"cell_type":"code","source":"r.to_csv(\"submit.csv\", index = False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"3127747a870a0237bc11f261d70bdd4b798955e5"},"cell_type":"code","source":"help(r.to_csv)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"5b857cf81f2ff4655b4cbbc2d8a978b660d3fae7"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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.7.2"}},"nbformat":4,"nbformat_minor":1}