{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"markdown","source":"# SIIM-ISIC Melanoma Classification"},{"metadata":{},"cell_type":"markdown","source":"# Importing Libraries"},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport cv2\nimport pydicom as dicom\nimport pandas as pd\nimport numpy as np\nfrom sklearn.metrics import accuracy_score, confusion_matrix\nfrom sklearn.metrics import mean_squared_error, r2_score","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Analysing Patient Records"},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"df = pd.read_csv('/kaggle/input/siim-isic-melanoma-classification/train.csv')\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = df.rename(columns = {'anatom_site_general_challenge':'site'})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.isnull().sum()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = df.dropna(axis=0, how = 'any')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.isnull().sum()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.countplot(x = 'sex', data = df, hue = 'target')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.distplot(df['age_approx'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"age = []\nsex = []\nfor i in range(df.shape[0]):\n    try: \n        if df['target'][i] == 1:\n            age.append(df['age_approx'][i]) \n            sex.append(df['sex'][i])\n    except:\n        pass","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(15,5))\n\nplt.subplot(1,2,1)\nsns.distplot(age)\nplt.title('Distribution of age of people having malignant cancer')\n\nplt.subplot(1,2,2)\nsns.countplot(y = age)\nplt.ylabel('Age')\nplt.title('Count plot of age of people having malignant cancer')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.countplot(x='site', data=df, hue='target')\nplt.xticks(rotation='90')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"site = []\nfor i in range(df.shape[0]):\n    try: \n        if df['target'][i] == 1:\n            site.append(df['site'][i]) \n    except:\n        pass\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.countplot(y = site,palette=\"rocket\")\nplt.title('Graph showing count of patients having cancer and the site it is located in')\nplt.ylabel('Site')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"diagnosis = []\nfor i in range(df.shape[0]):\n    try: \n        if df['target'][i] == 1:\n            diagnosis.append(df['diagnosis'][i]) \n    except:\n        pass\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.countplot(y = diagnosis)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.sex.unique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.site.unique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.diagnosis.unique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = pd.get_dummies(df, columns = ['sex'],drop_first=True)\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = pd.get_dummies(df, columns = ['site'],drop_first=True)\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = pd.get_dummies(df, columns = ['diagnosis'],drop_first=True)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = df.drop('diagnosis_unknown', axis = 1)\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = df.drop(['benign_malignant', 'patient_id'], axis = 1)\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize = (10,10))\nsns.heatmap(df.corr()[['target']].sort_values('target').tail(16), annot = True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(15,20))\n\nplt.subplot(4,2,1)\nsns.lineplot(df['diagnosis_melanoma'], df['target'])\nplt.subplot(4,2,2)\nsns.lineplot(df['age_approx'], df['target'])\nplt.subplot(4,2,3)\nsns.lineplot(df['site_torso'], df['target'])\nplt.subplot(4,2,4)\nsns.lineplot(df['diagnosis_nevus'], df['target'])\nplt.subplot(4,2,5)\nsns.lineplot(df['sex_male'], df['target'])\nplt.subplot(4,2,6)\nsns.lineplot(df['site_upper extremity'], df['target'])\nplt.subplot(4,2,7)\nsns.lineplot(df['site_lower extremity'], df['target'])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"> # Training and Testing the Model"},{"metadata":{"trusted":true},"cell_type":"code","source":"X = df[['diagnosis_melanoma','site_torso','diagnosis_nevus','site_lower extremity','site_upper extremity', 'sex_male', 'age_approx']]\ny = df['target']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 1)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Logistic Regression"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.linear_model import LogisticRegression\nclassifier_lr = LogisticRegression()\nclassifier_lr.fit(X_train,y_train)\n\ny_pred_lr = classifier_lr.predict(X_test)\nprint('Accuracy Score: ',accuracy_score(y_test,y_pred_lr))\nprint('Confusion Matrix: \\n',confusion_matrix(y_test,y_pred_lr))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Support Vector Machine"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn import svm\n\nclassifier_svm = svm.SVC()\nclassifier_svm.fit(X_train,y_train)\n\ny_pred_svm = classifier_svm.predict(X_test)\nprint('Accuracy Score: ',accuracy_score(y_test,y_pred_svm))\nprint('Confusion Matrix: \\n',confusion_matrix(y_test,y_pred_svm))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Decision Tree"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.tree import DecisionTreeClassifier\n\nclassifier_dt = DecisionTreeClassifier()\nclassifier_dt.fit(X_train,y_train)\n\ny_pred_dt = classifier_dt.predict(X_test)\nprint('Accuracy Score: ',accuracy_score(y_test,y_pred_dt))\nprint('Confusion Matrix: \\n',confusion_matrix(y_test,y_pred_dt))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Random Forest"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.ensemble import RandomForestClassifier\n\nclassifier_rf = RandomForestClassifier()\nclassifier_rf.fit(X_train,y_train)\n\ny_pred_rf = classifier_rf.predict(X_test)\nprint('Accuracy Score: ',accuracy_score(y_test,y_pred_rf))\nprint('Confusion Matrix: \\n',confusion_matrix(y_test,y_pred_rf))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Gradient Boosting"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.ensemble import GradientBoostingClassifier\n\nclassifier_gb = GradientBoostingClassifier()\nclassifier_gb.fit(X_train,y_train)\n\ny_pred_gb = classifier_gb.predict(X_test)\nprint('Accuracy Score: ',accuracy_score(y_test,y_pred_gb))\nprint('Confusion Matrix: \\n',confusion_matrix(y_test,y_pred_gb))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Adaptive Boosting"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.ensemble import AdaBoostClassifier\n\nclassifier_ab = AdaBoostClassifier()\nclassifier_ab.fit(X_train,y_train)\n\ny_pred_ab = classifier_ab.predict(X_test)\nprint('Accuracy Score: ',accuracy_score(y_test,y_pred_ab))\nprint('Confusion Matrix: \\n',confusion_matrix(y_test,y_pred_ab))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_l = ['Logistic Regression', 'Support Vector Machine', 'Decison Tree', 'Random Forest', 'Adaptive Boosting', 'Gradient Boosting']\ny_l = [1.0, 0.98, 1.0, 1.0, 1.0, 1.0]\n\nsns.barplot(y_l, x_l,palette=\"Reds\")\nplt.xlim([0.9, 1.003])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train1 = svm.SVC()\ntrain1.fit(X_train,y_train)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Analysing Images"},{"metadata":{"trusted":true},"cell_type":"code","source":"image = '/kaggle/input/siim-isic-melanoma-classification/train/' + df['image_name'][91] +'.dcm'\nds = dicom.dcmread(image)\n\nplt.imshow(ds.pixel_array)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"s0 = df.target[df.target.eq(0)].sample(50, random_state=1).index\ns1 = df.target[df.target.eq(1)].sample(60,random_state=1).index \n\ndf = df.loc[s0.union(s1)]\ndf['target'].value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"images = []\nfor x in df['image_name']:\n    image = '/kaggle/input/siim-isic-melanoma-classification/train/' + x +'.dcm'\n    ds = dicom.dcmread(image)\n    pixels = ds.pixel_array\n    images.append(pixels.flatten())\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import tensorflow as tf\nimages = tf.keras.preprocessing.sequence.pad_sequences(\n  images,\n  maxlen = 720,\n  dtype = \"int32\",\n  padding = \"pre\",\n  truncating = \"pre\",\n  value = 0\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"markdown","source":"# Training the Model"},{"metadata":{},"cell_type":"markdown","source":"## Logistic Regression"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.linear_model import LogisticRegression\nX = images\ny = np.array(df['target'])\nclassifier_lr = LogisticRegression()\nclassifier_lr.fit(X,y)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Support Vector Machine"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn import svm\nX = images\ny = np.array(df['target'])\nclassifier_svm = svm.SVC()\nclassifier_svm.fit(X,y)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Decision Tree"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.tree import DecisionTreeClassifier\nX = images\ny = np.array(df['target'])\nclassifier_dt = DecisionTreeClassifier()\nclassifier_dt.fit(X,y)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Random Forest"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.ensemble import RandomForestClassifier\nX = images\ny = np.array(df['target'])\nclassifier_rf = RandomForestClassifier()\nclassifier_rf.fit(X,y)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Adaptive Boosting "},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.ensemble import AdaBoostClassifier\nX = images\ny = np.array(df['target'])\nclassifier_ab = AdaBoostClassifier()\nclassifier_ab.fit(X,y)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Gradient Boosting"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.ensemble import GradientBoostingClassifier\nX = images\ny = np.array(df['target'])\nclassifier_gb = GradientBoostingClassifier()\nclassifier_gb.fit(X,y)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"markdown","source":"# Testing the Model"},{"metadata":{"trusted":true},"cell_type":"code","source":"test = df.tail(50)\ntest.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_images = []\nfor x in test['image_name']:\n    image = '/kaggle/input/siim-isic-melanoma-classification/train/' + x +'.dcm'\n    ds = dicom.dcmread(image)\n    pixels = ds.pixel_array\n    \n    test_images.append(pixels.flatten())\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_images = tf.keras.preprocessing.sequence.pad_sequences(\n  test_images,\n  maxlen = 720,\n  dtype = \"int32\",\n  padding = \"pre\",\n  truncating = \"pre\",\n  value = 0\n)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Logistic Regression"},{"metadata":{"trusted":true},"cell_type":"code","source":"X_test = test_images\ny_test = np.array(test['target'])\ny_pred_lr = classifier_lr.predict(X_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print('Accuracy Score: ',accuracy_score(y_test,y_pred_lr))\nprint('Confusion Matrix: \\n',confusion_matrix(y_test,y_pred_lr))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Support Vector Machine"},{"metadata":{"trusted":true},"cell_type":"code","source":"X_test = test_images\ny_test = np.array(test['target'])\ny_pred_svm = classifier_svm.predict(X_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print('Accuracy Score: ',accuracy_score(y_test,y_pred_svm))\nprint('Confusion Matrix: \\n',confusion_matrix(y_test,y_pred_svm))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Decision Tree"},{"metadata":{"trusted":true},"cell_type":"code","source":"X_test = test_images\ny_test = np.array(test['target'])\ny_pred_dt = classifier_dt.predict(X_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print('Accuracy Score: ',accuracy_score(y_test,y_pred_dt))\nprint('Confusion Matrix: \\n',confusion_matrix(y_test,y_pred_dt))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Random Forest"},{"metadata":{"trusted":true},"cell_type":"code","source":"X_test = test_images\ny_test = np.array(test['target'])\ny_pred_rf = classifier_rf.predict(X_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print('Accuracy Score: ',accuracy_score(y_test,y_pred_rf))\nprint('Confusion Matrix: \\n',confusion_matrix(y_test,y_pred_rf))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Adaptive Boosting"},{"metadata":{"trusted":true},"cell_type":"code","source":"X_test = test_images\ny_test = np.array(test['target'])\ny_pred_ab = classifier_ab.predict(X_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print('Accuracy Score: ',accuracy_score(y_test,y_pred_ab))\nprint('Confusion Matrix: \\n',confusion_matrix(y_test,y_pred_ab))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Gradient Boosting"},{"metadata":{"trusted":true},"cell_type":"code","source":"X_test = test_images\ny_test = np.array(test['target'])\ny_pred_gb = classifier_gb.predict(X_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print('Accuracy Score: ',accuracy_score(y_test,y_pred_gb))\nprint('Confusion Matrix: \\n',confusion_matrix(y_test,y_pred_gb))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_l = ['Logistic Regression', 'Support Vector Machine', 'Decison Tree', 'Random Forest', 'Adaptive Boosting', 'Gradient Boosting']\ny_l = [0.96, 0.68, 1.0, 1.0, 1.0, 1.0]\n\nsns.barplot(y_l, x_l,palette=\"mako\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train2 = LogisticRegression()\ntrain2.fit(X,y)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Final Testing"},{"metadata":{"trusted":true},"cell_type":"code","source":"image_path = '/kaggle/input/siim-isic-melanoma-classification/train/ISIC_0149568.dcm'\ndetails = [[55,0,0,0,1,1,0]]\nimage_to_test = []\nds = dicom.dcmread(image_path)\npixels = ds.pixel_array\nplt.imshow(pixels)\nimage_to_test.append(pixels.flatten())\n\nimage_to_test = tf.keras.preprocessing.sequence.pad_sequences(\n  image_to_test,\n  maxlen = 720,\n  dtype = \"int32\",\n  padding = \"pre\",\n  truncating = \"pre\",\n  value = 0\n)\n\nif train1.predict(details) == [1]:\n    \n    result1 = 'Malignant'\nelse:\n    result1 = 'Benign'\n\nif train2.predict(image_to_test) == [1]:\n    result2 = 'Malignant'\nelse:\n    result2 = 'Benign'\n\n\nprint('Result from patient details: ', result1)\nprint('Result from patient image: ', result2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"markdown","source":"## END"}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}