{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":20270,"databundleVersionId":1222630,"sourceType":"competition"}],"dockerImageVersionId":30804,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# Importing necessary libraries\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.metrics import classification_report, confusion_matrix, accuracy_score\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.preprocessing import StandardScaler\n\n# Load the dataset\ndata = pd.read_csv('../input/siim-isic-melanoma-classification/train.csv')  \n\n# Check for missing values\nprint(\"Missing values:\\n\", data.isnull().sum())\n\n# Data Preprocessing\n# Encode categorical variables\nle = LabelEncoder()\ncategorical_columns = ['sex', 'anatom_site_general_challenge', 'diagnosis', 'benign_malignant']\n\nfor col in categorical_columns:\n    # Fill NaNs with a placeholder before encoding\n    data[col] = data[col].fillna('unknown')\n    data[col] = le.fit_transform(data[col])\n\n# Prepare features and target\nX = data.drop(columns=['image_name', 'patient_id', 'target', 'benign_malignant'])\ny = data['target']\n\n# Create a pipeline with imputation, scaling, and classification\npipeline = Pipeline([\n    ('imputer', SimpleImputer(strategy='median')),  # Handle any remaining NaNs\n    ('scaler', StandardScaler()),  # Standardize features\n    ('classifier', RandomForestClassifier(random_state=42, n_estimators=100))\n])\n\n# Train-test split\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# Fit the pipeline\npipeline.fit(X_train, y_train)\n\n# Predictions on the test set\ny_pred = pipeline.predict(X_test)\n\n# Performance metrics\nprint(\"\\nClassification Report:\")\nprint(classification_report(y_test, y_pred))\n\nprint(\"\\nConfusion Matrix:\")\nprint(confusion_matrix(y_test, y_pred))\n\nprint(f\"\\nAccuracy Score: {accuracy_score(y_test, y_pred):.2f}\")\n\n# Feature importance\n# Note: We need to access the classifier from the pipeline\nclf = pipeline.named_steps['classifier']\nfeature_importance = pd.DataFrame({\n    'feature': X.columns,\n    'importance': clf.feature_importances_\n}).sort_values('importance', ascending=False)\n\nprint(\"\\nFeature Importance:\")\nprint(feature_importance)\n\n# Visualize feature importance\nplt.figure(figsize=(10, 6))\nsns.barplot(x='importance', y='feature', data=feature_importance)\nplt.title('Feature Importance in Melanoma Classification')\nplt.tight_layout()\nplt.show()","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-03T12:53:30.633516Z","iopub.execute_input":"2024-12-03T12:53:30.634002Z","iopub.status.idle":"2024-12-03T12:53:31.638765Z","shell.execute_reply.started":"2024-12-03T12:53:30.633965Z","shell.execute_reply":"2024-12-03T12:53:31.637735Z"}},"outputs":[],"execution_count":null}]}