{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":3004,"databundleVersionId":861823,"sourceType":"competition"}],"dockerImageVersionId":30235,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# Importa la librería pandas para manejo de datos.\nimport pandas as pd\n# Importa la librería numpy para operaciones numéricas.\nimport numpy as np\n# Importa la librería scikit-learn para aprendizaje automático.\nimport sklearn as sk\n# Importa la librería warnings para gestionar advertencias.\nimport warnings\n# Ignora las advertencias para mantener el código limpio.\nwarnings.filterwarnings(\"ignore\") ","metadata":{"execution":{"iopub.status.busy":"2025-03-27T13:39:32.546245Z","iopub.execute_input":"2025-03-27T13:39:32.546909Z","iopub.status.idle":"2025-03-27T13:39:33.956806Z","shell.execute_reply.started":"2025-03-27T13:39:32.546769Z","shell.execute_reply":"2025-03-27T13:39:33.955546Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Carga el conjunto de entrenamiento desde un archivo CSV.\ntrain = pd.read_csv('../input/digit-recognizer/train.csv')\n# Carga el conjunto de prueba desde un archivo CSV.\ntest = pd.read_csv('../input/digit-recognizer/test.csv') ","metadata":{"execution":{"iopub.status.busy":"2025-03-27T13:41:41.337161Z","iopub.execute_input":"2025-03-27T13:41:41.339171Z","iopub.status.idle":"2025-03-27T13:41:47.529692Z","shell.execute_reply.started":"2025-03-27T13:41:41.339059Z","shell.execute_reply":"2025-03-27T13:41:47.528439Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Separa las características (pixeles) del conjunto de entrenamiento.\nfeatures = train.drop(['label'], axis = 1) \n# Separa la etiqueta (dígito) del conjunto de entrenamiento.\ntarget = train.label ","metadata":{"execution":{"iopub.status.busy":"2025-03-27T13:41:47.989740Z","iopub.execute_input":"2025-03-27T13:41:47.990225Z","iopub.status.idle":"2025-03-27T13:41:48.194681Z","shell.execute_reply.started":"2025-03-27T13:41:47.990188Z","shell.execute_reply":"2025-03-27T13:41:48.193160Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Importa la función para dividir datos.\nfrom sklearn.model_selection import train_test_split \n# Divide los datos en conjuntos de entrenamiento y prueba.\nX_train, X_test, y_train, y_test = train_test_split(features, target, test_size = 0.2) ","metadata":{"execution":{"iopub.status.busy":"2025-03-27T13:43:33.247999Z","iopub.execute_input":"2025-03-27T13:43:33.249225Z","iopub.status.idle":"2025-03-27T13:43:33.539171Z","shell.execute_reply.started":"2025-03-27T13:43:33.249164Z","shell.execute_reply":"2025-03-27T13:43:33.537902Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Importa el modelo de regresión logística.\nfrom sklearn.linear_model import LogisticRegression \n# Importa el modelo de análisis discriminante lineal.\nfrom sklearn.discriminant_analysis import LinearDiscriminantAnalysis \n# Importa el modelo de k-vecinos más cercanos.\nfrom sklearn.neighbors import KNeighborsClassifier \n# Importa el modelo de árbol de decisión.\nfrom sklearn.tree import DecisionTreeClassifier \n# Importa el modelo de Naive Bayes gaussiano.\nfrom sklearn.naive_bayes import GaussianNB \n# Importa el modelo de bosque aleatorio.\nfrom sklearn.ensemble import RandomForestClassifier ","metadata":{"execution":{"iopub.status.busy":"2025-03-27T13:43:27.425112Z","iopub.execute_input":"2025-03-27T13:43:27.425675Z","iopub.status.idle":"2025-03-27T13:43:27.900517Z","shell.execute_reply.started":"2025-03-27T13:43:27.425638Z","shell.execute_reply":"2025-03-27T13:43:27.899357Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Inicializa una lista para almacenar los modelos.\nmodels = [] \n# Añade regresión logística a la lista.\nmodels.append(('LR', LogisticRegression())) \n# Añade análisis discriminante lineal a la lista.\nmodels.append(('LDA', LinearDiscriminantAnalysis())) \n# Añade k-vecinos más cercanos a la lista.\nmodels.append(('KNN', KNeighborsClassifier())) \n# Añade árbol de decisión a la lista.\nmodels.append(('DTC', DecisionTreeClassifier())) \n# Añade Naive Bayes gaussiano a la lista.\nmodels.append(('NB', GaussianNB())) \n# Añade bosque aleatorio a la lista.\nmodels.append(('RFC', RandomForestClassifier())) ","metadata":{"execution":{"iopub.status.busy":"2025-03-26T19:35:29.978155Z","iopub.execute_input":"2025-03-26T19:35:29.978550Z","iopub.status.idle":"2025-03-26T19:35:29.986470Z","shell.execute_reply.started":"2025-03-26T19:35:29.978518Z","shell.execute_reply":"2025-03-26T19:35:29.984296Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Itera sobre cada modelo en la lista.\nfor name, model in models: \n    # Entrena el modelo con los datos de entrenamiento.\n    model.fit(X_train, y_train) \n    # Calcula la precisión del modelo en los datos de prueba.\n    score = model.score(X_test, y_test) \n    # Imprime el nombre del modelo y su precisión.\n    print (name, ': ', str(score)) \n# Imprime la precision de cada modelo.","metadata":{"execution":{"iopub.status.busy":"2025-03-26T19:35:29.990080Z","iopub.execute_input":"2025-03-26T19:35:29.991092Z","iopub.status.idle":"2025-03-26T19:36:43.456599Z","shell.execute_reply.started":"2025-03-26T19:35:29.991058Z","shell.execute_reply":"2025-03-26T19:36:43.455518Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Crea una instancia del modelo de bosque aleatorio.\nmodel = RandomForestClassifier() \n# Entrena el modelo con todos los datos de entrenamiento.\nmodel.fit(features, target) \n# Calcula la precisión del modelo en los datos de entrenamiento.\nmodel.score(features, target) \n# Imprime 1.0, lo que significa que el modelo se ajustó perfectamente al entrenamiento.","metadata":{"execution":{"iopub.status.busy":"2025-03-26T19:36:43.458097Z","iopub.execute_input":"2025-03-26T19:36:43.459136Z","iopub.status.idle":"2025-03-26T19:37:14.180728Z","shell.execute_reply.started":"2025-03-26T19:36:43.459090Z","shell.execute_reply":"2025-03-26T19:37:14.179554Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Realiza predicciones en el conjunto de prueba.\nypred = model.predict(test) ","metadata":{"execution":{"iopub.status.busy":"2025-03-26T19:37:14.181892Z","iopub.execute_input":"2025-03-26T19:37:14.182194Z","iopub.status.idle":"2025-03-26T19:37:15.363705Z","shell.execute_reply.started":"2025-03-26T19:37:14.182168Z","shell.execute_reply":"2025-03-26T19:37:15.362720Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Carga el archivo de ejemplo de envío.\nsubmission = pd.read_csv('../input/digit-recognizer/sample_submission.csv') \n# Crea un DataFrame con las predicciones.\nsubmission = pd.DataFrame({\"ImageId\": submission.ImageId, \"Label\": ypred}) \n# Asegura que las etiquetas sean enteros.\nsubmission['Label'] = submission['Label'].astype('int') \n# Guarda las predicciones en un archivo CSV.\nsubmission.to_csv('submission.csv', index = False) ","metadata":{"execution":{"iopub.status.busy":"2025-03-26T19:37:15.365078Z","iopub.execute_input":"2025-03-26T19:37:15.365523Z","iopub.status.idle":"2025-03-26T19:37:15.420128Z","shell.execute_reply.started":"2025-03-26T19:37:15.365483Z","shell.execute_reply":"2025-03-26T19:37:15.419172Z"},"trusted":true},"outputs":[],"execution_count":null}]}