{"cells":[{"metadata":{"_cell_guid":"00b63778-674d-0a2d-e5b0-8956c5ce1770","_uuid":"c9cdbd8f89675540d45fcc005068ea8b4207e60c"},"cell_type":"markdown","source":"## Introduction\nEstá basado en el tutorial [A Beginner's Approach to Classification](https://www.kaggle.com/archaeocharlie/a-beginner-s-approach-to-classification)\nSe utiliza Gradient Boot Classifier porque se obtiene un resultado de 0.914% en comparación con SVC utilizado en el tutorial."},{"metadata":{"_cell_guid":"d0abbfc5-e04e-98d3-8c5c-37d114daa804","_uuid":"fc54e5ff7244195f76fbca4ae903be277cb9717f","trusted":true,"collapsed":true},"cell_type":"code","source":"import pandas as pd\nimport matplotlib.pyplot as plt, matplotlib.image as mpimg\nfrom sklearn.model_selection import train_test_split\n\nfrom sklearn.ensemble import GradientBoostingClassifier\n\n%matplotlib inline","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"11f567ca-77d0-2c41-bbc9-a60396caacea","_uuid":"5876445b04e887b863a30edf5991454c0a8df2a6"},"cell_type":"markdown","source":"> ## Cargando datos\n> - Utilizamos [read_csv][1] de panda para leer train.csv dentro de un [dataframe][2].\n> - Luego separamos nuestras imagenes y etiquetas para aprendizaje supervisado. \n> - También hacemos un [train_test_split][3] para dividir nuestros datos en dos secciones, uno para entrenamiento y otro para prueba. Esto nos permite medir qué tan bien se entrenó nuestro modelo ingresando posteriormente algunos datos de prueba conocidos.\n\n  [1]: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html\n  [2]: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html#pandas.DataFrame\n  [3]: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html"},{"metadata":{"_cell_guid":"e8c0e206-f504-253f-8ac6-2c50eff06b58","_uuid":"ac24be7ee14413afeffae51e621d169edd53509b","trusted":true,"collapsed":true},"cell_type":"code","source":"labeled_images = pd.read_csv('../input/train.csv')\n\nimages = labeled_images.iloc[0:,1:]\nlabels = labeled_images.iloc[0:,:1]\ntrain_images, test_images,train_labels, test_labels = train_test_split(images, labels, train_size=0.8, random_state=2)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"caa9e676-3656-5509-0aa4-a503437f727f","_uuid":"a43ab781e74843d382bc7e0dd783689cd73ac77c"},"cell_type":"markdown","source":"> ## Viendo una imagen\n> - Dado que la imagen es actualmente de una dimensión, la cargamos en una [matriz numpy] [1] y [remodelemos] [2] de modo que sea bidimensional (28x28 píxeles)\n> - Entonces, trazamos la imagen y la etiqueta con matplotlib\n> \n> ### Puede cambiar el valor de la variable <i> i </i> para ver otras imágenes y etiquetas.\n> \n\n  [1]: https://docs.scipy.org/doc/numpy/reference/generated/numpy.array.html\n  [2]: https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html"},{"metadata":{"_cell_guid":"dc43b65b-d3d9-8208-e7a2-88c2535b506f","_uuid":"cc0140d42370f64cef8396ae81398c7521934cd4","trusted":true,"collapsed":true},"cell_type":"code","source":"i=2\nimg=train_images.iloc[i].as_matrix()\nimg=img.reshape((28,28))\nplt.imshow(img,cmap='gray')\nplt.title(train_labels.iloc[i,0])","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"42a5a5bd-83be-7116-7cd5-20cbc8336417","_uuid":"dfe3ee6bb5279f80392dee435a296feff40633b9"},"cell_type":"markdown","source":"> ## Examinando los valores de píxel\n> ### Tenga en cuenta que estas imágenes no son en realidad en blanco y negro (0,1). Son de escala de grises (0-255).\n> - Un [histograma] [1] de los valores de píxel de esta imagen que muestra el rango.\n\n\n  [1]: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist"},{"metadata":{"_cell_guid":"b6143ae2-eb4e-a4af-aad3-37fa85b657b7","_uuid":"fb50755c781a1ff3141cf40d742efe64b1eb1814","trusted":true,"collapsed":true},"cell_type":"code","source":"plt.hist(train_images.iloc[i])","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"36da223970180c955fb01adabab11c37e9114aa4"},"cell_type":"markdown","source":"## Normalizar\nRealizamos una normalización en escala de grises para reducir el efecto de las diferencias de iluminación."},{"metadata":{"_cell_guid":"b5f3a212-b832-55af-d228-9b1931dcbc32","_uuid":"05b365c02e02b684768ce57054a77fefb1ae9f0a","trusted":true,"collapsed":true},"cell_type":"code","source":"#score= 0.905 5000\n#test_images=test_images/255.0\n#train_images=train_images/255.0\n\n#score= 0.914 5000rows\n#score= 0.9421428571428572 todo\ntest_images[test_images>0]=1\ntrain_images[train_images>0]=1\n\n\nimg=train_images.iloc[i].as_matrix().reshape((28,28))\nplt.imshow(img,cmap='binary')\nplt.title(train_labels.iloc[i])","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"edbe1d68-3224-1bf4-b571-a3bd845c3de5","_uuid":"121fbb8483d3e6e944252cf6dc01150b7dcd4f0b","trusted":true,"collapsed":true},"cell_type":"code","source":"plt.hist(train_images.iloc[i])","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"4fc27bb1aa555abd5b0a588ef48c453fa5a7b36f"},"cell_type":"markdown","source":"> ## Entrenando nuestro modelo\n> - Primero, usamos el módulo [sklearn.ensemble] [1] para crear un [GradientBoostingClassifier] [2].\n> - Luego, pasamos nuestras imágenes y etiquetas de entrenamiento al método [fit] [3] del clasificador, que entrena nuestro modelo.\n> - Finalmente, las imágenes de prueba y las etiquetas se pasan al método [score] [4] para ver qué tan bien hemos entrenado a nuestro modelo. Fit devolverá un flotador entre 0 y 1, lo que indica nuestra precisión en el conjunto de datos de prueba\n\n  [1]: http://scikit-learn.org/stable/modules/ensemble.html#gradient-tree-boosting\n  [2]: http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html#sklearn.ensemble.GradientBoostingClassifier\n  [3]: http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html#sklearn.ensemble.GradientBoostingClassifier.fit\n  [4]: http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html#sklearn.ensemble.GradientBoostingClassifier.score"},{"metadata":{"_uuid":"ad56047a291658de39428402aba3e8c639bbbd40"},"cell_type":"markdown","source":"## Gradient Boosting Classifier"},{"metadata":{"trusted":true,"_uuid":"9be16e3016cf5c224f371e768135cb326cd9ceac","collapsed":true},"cell_type":"code","source":"gbc=GradientBoostingClassifier()\ngbc.fit(train_images, train_labels.values.ravel())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ee7477f540938fd7aee96ee765c40936fd3fc811","collapsed":true},"cell_type":"code","source":"gbc.score(test_images,test_labels)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"7ca53ece-d50a-efe5-d242-dea8d089244b","_uuid":"52bf20ad1a483d754ffa0e32688600c28b2de2e9"},"cell_type":"markdown","source":"> ## Etiquetar los datos de prueba\n> ### Ahora, para aquellos que realizan presentaciones de competencia, podemos cargar y predecir los datos sin etiqueta de test.csv. A continuación, enviamos estos datos a un results.csv para el envío de la competencia."},{"metadata":{"_cell_guid":"8fa0b0aa-1bf3-dcd3-6ef2-fae5ccda55b3","_uuid":"c1c6230c9970efc5799b73409b722320aef1a9fd","trusted":true,"collapsed":true},"cell_type":"code","source":"test_data=pd.read_csv('../input/test.csv')\ntest_data[test_data>0]=1\nresults=gbc.predict(test_data)\nresults.size","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"28ec8d56-d3f6-573d-2230-bc5a410868c6","_uuid":"1ab6f96a33faef4bc62db7dc4536deaffd28a6a9","trusted":true,"collapsed":true},"cell_type":"code","source":"df = pd.DataFrame(results)\ndf.index+=1\ndf.index.name='ImageId'\ndf.columns=['Label']\ndf.to_csv('results.csv', header=True)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"097e0f0a-246c-2f96-cd2d-b5cd75f26a65","_uuid":"9b882610d5a2946cc3f8770ff7a81f762f71a5c8","trusted":true,"collapsed":true},"cell_type":"code","source":"import os\nos.listdir(\"./\")","execution_count":null,"outputs":[]}],"metadata":{"_change_revision":0,"_is_fork":false,"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}