{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":16017,"databundleVersionId":708189,"sourceType":"competition"}],"dockerImageVersionId":30699,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport lightgbm as lgb\nfrom catboost import CatBoostClassifier\nfrom sklearn.metrics import accuracy_score\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix\nimport seaborn as sns","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-04-26T02:17:41.287444Z","iopub.execute_input":"2024-04-26T02:17:41.288216Z","iopub.status.idle":"2024-04-26T02:17:44.088445Z","shell.execute_reply.started":"2024-04-26T02:17:41.288185Z","shell.execute_reply":"2024-04-26T02:17:44.087608Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Load datasets\ntrain = pd.read_csv('/kaggle/input/Kannada-MNIST/train.csv')\ntest = pd.read_csv('/kaggle/input/Kannada-MNIST/test.csv')","metadata":{"execution":{"iopub.status.busy":"2024-04-26T02:17:44.090018Z","iopub.execute_input":"2024-04-26T02:17:44.090311Z","iopub.status.idle":"2024-04-26T02:17:48.205987Z","shell.execute_reply.started":"2024-04-26T02:17:44.090286Z","shell.execute_reply":"2024-04-26T02:17:48.205140Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"import pandas as pd\nimport numpy as np\nfrom catboost import CatBoostClassifier\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix, accuracy_score\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\n# Data loading and preparation (assuming the 'train' and 'test' are already loaded)\nX = train.drop('label', axis=1).values / 255.0\ny = train['label'].values\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\nX_test = test.drop(test.columns[0], axis=1).values / 255.0\n\n# Initialize and train CatBoost Classifier\nmodel = CatBoostClassifier(\n    iterations=1000,\n    learning_rate=0.1,\n    depth=10,\n    loss_function='MultiClass',\n    eval_metric='Accuracy',\n    verbose=200\n)\n\n# Train the model with validation set for early stopping\nmodel.fit(X_train, y_train, eval_set=(X_val, y_val), use_best_model=True, early_stopping_rounds=50)\n\n# Evaluating model performance\ntrain_accuracy = model.score(X_train, y_train)\nval_accuracy = model.score(X_val, y_val)\nprint(f\"Training Accuracy: {train_accuracy:.4f}\")\nprint(f\"Validation Accuracy: {val_accuracy:.4f}\")\n\n# Predictions for validation set\nval_pred = model.predict(X_val)\n\n# Confusion Matrix\ncm = confusion_matrix(y_val, val_pred)\nplt.figure(figsize=(10, 8))\nsns.heatmap(cm, annot=True, fmt=\"d\", cmap='Blues')\nplt.title('Confusion Matrix')\nplt.ylabel('Actual Labels')\nplt.xlabel('Predicted Labels')\nplt.show()\n\n# Loss and accuracy plots\nresults = model.get_evals_result()\nplt.figure(figsize=(12, 5))\n\n# Plotting accuracy\nplt.subplot(1, 2, 1)\nplt.plot(results['learn']['Accuracy'], label='Train Accuracy')\nplt.plot(results['validation']['Accuracy'], label='Validation Accuracy')\nplt.title('Model Accuracy')\nplt.xlabel('Epoch')\nplt.ylabel('Accuracy')\nplt.legend()\n\n# Assuming 'Logloss' is used for loss plotting; modify accordingly\nplt.subplot(1, 2, 2)\nplt.plot(results['learn']['MultiClass'], label='Train Loss')\nplt.plot(results['validation']['MultiClass'], label='Validation Loss')\nplt.title('Model Loss')\nplt.xlabel('Epoch')\nplt.ylabel('Loss')\nplt.legend()\n\nplt.show()\n\n# Make predictions on the test set and prepare submission\ntest_pred = model.predict(X_test)\nsubmission_df = pd.DataFrame({\n    'id': test['id'],  \n    'label': test_pred\n})\nsubmission_filename = 'submission.csv'\nsubmission_df.to_csv(submission_filename, index=False)\nprint(\"Submission file created:\", submission_filename)\nprint(submission_df.head())\n","metadata":{"execution":{"iopub.status.busy":"2024-04-26T01:48:09.879351Z","iopub.execute_input":"2024-04-26T01:48:09.879690Z","iopub.status.idle":"2024-04-26T01:56:59.215682Z","shell.execute_reply.started":"2024-04-26T01:48:09.879663Z","shell.execute_reply":"2024-04-26T01:56:59.214345Z"}}},{"cell_type":"code","source":"# Data loading and preparation\nX = train.drop('label', axis=1).values / 255.0\ny = train['label'].values\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\nX_test = test.drop(test.columns[0], axis=1).values / 255.0\n\n# Initialize CatBoost Classifier\nmodel = CatBoostClassifier(\n    iterations=500,  # reduced from 1000 to speed up\n    learning_rate=0.15,  # increased from 0.1 to speed up convergence\n    depth=10,  # reduced depth for faster computation\n    task_type='GPU',  # use GPU for faster training if available\n    loss_function='MultiClass',\n    early_stopping_rounds=50,  # stop early to save time\n    verbose=200\n)\n\nmodel.fit(X_train, y_train, eval_set=(X_val, y_val), use_best_model=True)\n\n# Validation accuracy\nval_accuracy = model.score(X_val, y_val)\nprint(f\"Validation Accuracy: {val_accuracy:.4f}\")\n\n# Predict on the test set\ntest_pred = model.predict(X_test)\ntest_pred = np.argmax(test_pred, axis=1)  # Adjusting prediction shape if necessary\n\n# Create and save the submission file\nsubmission_df = pd.DataFrame({\n    'id': test['id'],  # Ensuring this is the correct ID column from your test DataFrame\n    'label': test_pred\n})\nsubmission_filename = 'submission.csv'\nsubmission_df.to_csv(submission_filename, index=False)\nprint(\"Submission file created:\", submission_filename)\nprint(submission_df.head())\n","metadata":{"execution":{"iopub.status.busy":"2024-04-26T02:17:48.207804Z","iopub.execute_input":"2024-04-26T02:17:48.208606Z","iopub.status.idle":"2024-04-26T02:19:37.853893Z","shell.execute_reply.started":"2024-04-26T02:17:48.208569Z","shell.execute_reply":"2024-04-26T02:19:37.852399Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}