{"metadata":{"colab":{"collapsed_sections":[],"name":"ds-30.ipynb","provenance":[]},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.8.5"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"from google.colab import drive\ndrive.mount('/content/drive')","metadata":{"id":"poP-rMZwhsWR","outputId":"0ea063a1-973b-46c2-c3e7-8053a2cb1255"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Import Module**","metadata":{"id":"q1CXff8DhY3B"}},{"cell_type":"code","source":"!pip install imutils","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:05:03.43762Z","iopub.status.busy":"2022-04-26T09:05:03.437166Z","iopub.status.idle":"2022-04-26T09:05:12.131995Z","shell.execute_reply":"2022-04-26T09:05:12.131078Z","shell.execute_reply.started":"2022-04-26T09:05:03.437579Z"},"id":"m5ZS-Yv0hY3C","outputId":"b1445394-3a3f-43ff-ae2f-1b174773c0cb"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#!pip install imutils\nimport keras\nimport tensorflow\nimport os\nfrom keras.layers import Input\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom keras.layers import Flatten, Dense, Conv2D, MaxPooling2D, Dropout\nfrom tensorflow.keras.layers import Dropout\nfrom tensorflow.keras.layers import Flatten\nfrom tensorflow.keras.layers import Dense\nfrom tensorflow.keras.layers import Input\nfrom keras.layers import BatchNormalization\nfrom tensorflow.keras import Sequential\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.preprocessing.image import img_to_array\nfrom tensorflow.keras.preprocessing.image import load_img\nfrom tensorflow.keras.utils import to_categorical\nfrom sklearn.preprocessing import LabelBinarizer\nfrom sklearn.model_selection import train_test_split\nfrom imutils import paths\nimport matplotlib.pyplot as plt\nfrom keras.models import Model\nfrom sklearn.utils import shuffle\nfrom cv2 import imread\nimport numpy as np\nimport pandas as pd\nimport shutil\nimport time\nimport os\nimport seaborn as sns\nsns.set_style('darkgrid')\nfrom PIL import Image\nfrom sklearn.metrics import confusion_matrix, classification_report\nfrom IPython.core.display import display, HTML","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:05:12.134174Z","iopub.status.busy":"2022-04-26T09:05:12.133886Z","iopub.status.idle":"2022-04-26T09:05:12.148365Z","shell.execute_reply":"2022-04-26T09:05:12.147485Z","shell.execute_reply.started":"2022-04-26T09:05:12.134133Z"},"id":"BbcNarqJhY3E"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Load Data**","metadata":{"id":"mbanzfkdhY3F"}},{"cell_type":"code","source":"data = []\nlabels = []\nwidth,height=150,150\n\nimagePaths = list(paths.list_images('/content/drive/MyDrive/gaussian_filtered_images'))\ndata = []\nlabels = []\n\nfor imagePath in imagePaths:\n    label = imagePath.split(os.path.sep)[-2]\n    image = load_img(imagePath, target_size=(width, height))\n    image = img_to_array(image)\n    data.append(image)\n    labels.append(label)\n\ndata = np.array(data, dtype=\"float32\")\nlabels = np.array(labels)\n\nlb = LabelBinarizer()\nlabels = lb.fit_transform(labels)\n#labels = to_categorical(labels)\n\ndata, labels = shuffle(data, labels)\n\nprint(data.shape)\nprint(labels.shape)","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.execute_input":"2022-04-26T09:05:12.151708Z","iopub.status.busy":"2022-04-26T09:05:12.150188Z","iopub.status.idle":"2022-04-26T09:05:31.141845Z","shell.execute_reply":"2022-04-26T09:05:31.140819Z","shell.execute_reply.started":"2022-04-26T09:05:12.151624Z"},"id":"COsAXUD-hY3G","outputId":"b7f68d3a-e230-4f88-908d-aebe2269cf08"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df=pd.read_csv(\"/content/drive/MyDrive/gaussian_filtered_images/train.csv\")\ndfg=df.groupby(['diagnosis']).count()\ndfg.plot.pie(y=\"id_code\",figsize=(5,5),autopct='%1.1f%%',startangle=90)\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:05:31.144654Z","iopub.status.busy":"2022-04-26T09:05:31.144412Z","iopub.status.idle":"2022-04-26T09:05:31.368992Z","shell.execute_reply":"2022-04-26T09:05:31.368363Z","shell.execute_reply.started":"2022-04-26T09:05:31.144623Z"},"id":"A-b0b1P5hY3G","outputId":"4fbf003b-ed57-448a-fe96-d44cec687f09"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Split the data for training and testing**","metadata":{"id":"C_bErA0ahY3G"}},{"cell_type":"code","source":"test_ratio = 0.20\n\n# train is now 80% of the entire data set\nx_train, x_test, y_train, y_test = train_test_split(data, labels, test_size=test_ratio)\n\nprint(\"Train images:\",x_train.shape)\nprint(\"Test images:\",x_test.shape)\nprint(\"Train label:\",y_train.shape)\nprint(\"Test label:\",y_test.shape)","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:05:31.370856Z","iopub.status.busy":"2022-04-26T09:05:31.37014Z","iopub.status.idle":"2022-04-26T09:05:31.65833Z","shell.execute_reply":"2022-04-26T09:05:31.657454Z","shell.execute_reply.started":"2022-04-26T09:05:31.370821Z"},"id":"1wuHQV_bhY3H","outputId":"2b56fbc9-5b1b-446c-c8f9-706aa34f57f0"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# CNN-ML Model\n> *   CNN layers extracting the features and Pass 3D features to Flatten Layer.\n> *   Flatten Layer Convert 3D features to 1D features.\n> *   Pass those 1D features to Machine Learning Classifier.","metadata":{"id":"ruofjbWJhY3H"}},{"cell_type":"code","source":"INIT_LR = 1e-4\nEPOCHS = 20\nBS = 32\n\ncnn_model=Sequential()\ncnn_model.add(Conv2D(16, (3, 3),activation='relu',input_shape=(150, 150, 3)))\ncnn_model.add(MaxPooling2D(2,2))\ncnn_model.add(Conv2D(32, (3, 3),activation='relu'))\ncnn_model.add(MaxPooling2D(2,2))\ncnn_model.add(Conv2D(64, (3, 3),activation='relu'))\ncnn_model.add(MaxPooling2D(2,2))\ncnn_model.add(Conv2D(128, (3, 3), activation='relu'))\ncnn_model.add(MaxPooling2D(2,2))\ncnn_model.add(Conv2D(256, (3, 3), activation='relu'))\ncnn_model.add(MaxPooling2D(2,2))\ncnn_model.add(BatchNormalization())\ncnn_model.add(Flatten())   #Features Are Extracted From this Layer\ncnn_model.add(Dropout(0.2))\ncnn_model.add(Dense(1024, activation='relu'))\ncnn_model.add(Dense(5, activation='sigmoid'))\n\nopt = Adam(learning_rate=INIT_LR)\ncnn_model.compile(optimizer=opt, loss='binary_crossentropy', metrics=['accuracy'])\ncnn_model.summary()\n","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:05:31.65975Z","iopub.status.busy":"2022-04-26T09:05:31.659504Z","iopub.status.idle":"2022-04-26T09:05:31.809724Z","shell.execute_reply":"2022-04-26T09:05:31.808841Z","shell.execute_reply.started":"2022-04-26T09:05:31.659718Z"},"id":"lWCli6aghY3H","outputId":"ff804035-bf6d-49df-dc5c-b2cf34c985c4"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Training CNN","metadata":{"id":"fh1MsTRPhY3I"}},{"cell_type":"code","source":"# train the head of the network\nprint(\"[INFO] training head..\")\nh = cnn_model.fit(x_train,y_train,epochs=EPOCHS,validation_split=0.1,verbose=1, batch_size=32)\nprint(\"Done !!\")","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:05:31.811182Z","iopub.status.busy":"2022-04-26T09:05:31.810858Z","iopub.status.idle":"2022-04-26T09:10:27.409619Z","shell.execute_reply":"2022-04-26T09:10:27.408876Z","shell.execute_reply.started":"2022-04-26T09:05:31.811147Z"},"id":"a7aMApYfhY3I","outputId":"15a47e46-ffae-4bc1-a445-69420bfe67f7"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install scikit-plot","metadata":{"id":"2OsTTrb7r9oU","outputId":"d957df16-9eec-4b8b-8565-32816cfc49e2"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#!pip install scikit-plot\nfrom sklearn.metrics import classification_report\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport scikitplot as skplt\nfrom sklearn.metrics import accuracy_score\nimport numpy as np\nfrom sklearn import metrics\n\nprint(\"[INFO] evaluating network...\")\npredIdxs = cnn_model.predict(x_test, batch_size=BS)\npredIdxs = np.argmax(predIdxs, axis=1)\n\ntrainpredIdxs = cnn_model.predict(x_train, batch_size=BS)\ntrainpredIdxs = np.argmax(trainpredIdxs, axis=1)\n\ntrainCNNScore=accuracy_score(trainpredIdxs,np.argmax(y_train,axis=1))*100\nCNNScore=accuracy_score(predIdxs,np.argmax(y_test,axis=1))*100\n\nprint(\"\\nTrainig Accuracy Score:-\",trainCNNScore)\nprint(\"\\nTesting Accuracy Score:-\",CNNScore)\nprint(\"\\nTraning Graph:- \\n \")\n\n# plot the training loss and accuracy\nN = EPOCHS\nplt.style.use(\"ggplot\")\nplt.figure()\nplt.plot(np.arange(0, N), h.history[\"loss\"], label=\"train_loss\")\nplt.plot(np.arange(0, N), h.history[\"accuracy\"], label=\"train_acc\")\nplt.title(\"Training Loss and Accuracy\")\nplt.xlabel(\"Epoch #\")\nplt.ylabel(\"Loss/Accuracy\")\nplt.legend(loc=\"lower left\",)\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:10:27.410997Z","iopub.status.busy":"2022-04-26T09:10:27.410737Z","iopub.status.idle":"2022-04-26T09:10:34.356277Z","shell.execute_reply":"2022-04-26T09:10:34.355432Z","shell.execute_reply.started":"2022-04-26T09:10:27.410966Z"},"id":"nFSBG11HhY3J","outputId":"aee97ea8-22d5-4ece-aca0-52a2ae6e2990"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"acc =  h.history[\"accuracy\"]\nval_acc = h.history['val_accuracy']\n\nplt.plot(acc, label='Training Accuracy')\nplt.plot(val_acc, label='Validation Accuracy')\nplt.legend(loc='lower right')\nplt.ylabel('Accuracy')\nplt.xlim([0,20])\nplt.ylim([min(plt.ylim()),1])\nplt.title('Training and Validation Accuracy')\nplt.xlabel('Epoch')\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:10:34.357991Z","iopub.status.busy":"2022-04-26T09:10:34.357694Z","iopub.status.idle":"2022-04-26T09:10:34.654829Z","shell.execute_reply":"2022-04-26T09:10:34.654064Z","shell.execute_reply.started":"2022-04-26T09:10:34.357951Z"},"id":"ATQ7LmSkhY3J","outputId":"52690541-1077-4ff5-8016-21511adfe7fa"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred = cnn_model.predict(x_test)\npred = np.argmax(pred,axis=1)\ny_test_new = np.argmax(y_test,axis=1)\nprint(classification_report(y_test_new,pred))","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:10:34.657533Z","iopub.status.busy":"2022-04-26T09:10:34.657282Z","iopub.status.idle":"2022-04-26T09:10:36.180229Z","shell.execute_reply":"2022-04-26T09:10:36.179588Z","shell.execute_reply.started":"2022-04-26T09:10:34.657504Z"},"id":"S2eCYJQchY3J","outputId":"479211d9-8cff-4237-ad3a-9e602048d2c5"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import classification_report,confusion_matrix\ncm = confusion_matrix(y_test_new, pred)\ncm","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:10:36.181582Z","iopub.status.busy":"2022-04-26T09:10:36.181175Z","iopub.status.idle":"2022-04-26T09:10:36.189963Z","shell.execute_reply":"2022-04-26T09:10:36.189419Z","shell.execute_reply.started":"2022-04-26T09:10:36.181523Z"},"id":"RaABGMO8hY3K","outputId":"8d610adc-257e-4082-f613-483d4cddbff7"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Extracting Features","metadata":{"id":"AkLw_w8vhY3K"}},{"cell_type":"code","source":"extractCNN = Model(cnn_model.inputs, cnn_model.layers[-4].output)\n\n#del(data)\n#del(labels)\nfeat_trainCNN  = extractCNN.predict(x_train)  \nfeat_testCNN = extractCNN.predict(x_test)      \n\nprint(feat_trainCNN.shape)","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:10:36.19157Z","iopub.status.busy":"2022-04-26T09:10:36.191174Z","iopub.status.idle":"2022-04-26T09:10:42.761417Z","shell.execute_reply":"2022-04-26T09:10:42.760566Z","shell.execute_reply.started":"2022-04-26T09:10:36.191516Z"},"id":"3O466lNyhY3K","outputId":"e070aee4-1257-4733-a6dd-e2061c4a0b2c"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Training Machine Learning Classifier","metadata":{"id":"aPHPxhA9hY3K"}},{"cell_type":"markdown","source":"**Support Vector Machine (SVM)**","metadata":{"id":"fPHv4iaBhY3L"}},{"cell_type":"code","source":"from sklearn.svm import SVC\n\nsvm = SVC(kernel='rbf')\nsvm.fit(feat_trainCNN,np.argmax(y_train,axis=1))\n\nTrainSVMScoreCNN=svm.score(feat_trainCNN,np.argmax(y_train,axis=1))*100\nprint(\"SVM Training Accuracy Score:-\",TrainSVMScoreCNN)\n\nTestSVMScoreCNN=svm.score(feat_testCNN,np.argmax(y_test,axis=1))*100\nprint(\"\\nSVM Testing Accuracy Score:-\",TestSVMScoreCNN)\n\ny_pred = svm.predict(feat_testCNN)\n\ncm = confusion_matrix(np.argmax(y_test,axis=1), y_pred)\nprint('\\nConfusion Metrics \\n',cm)\n\nprint(classification_report(np.argmax(y_test,axis=1),y_pred))","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:10:42.7631Z","iopub.status.busy":"2022-04-26T09:10:42.762511Z","iopub.status.idle":"2022-04-26T09:10:58.986352Z","shell.execute_reply":"2022-04-26T09:10:58.98538Z","shell.execute_reply.started":"2022-04-26T09:10:42.763054Z"},"id":"c1CA7LxNhY3L","outputId":"5aa3610b-053d-465e-9f4a-f7e9324a3465"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Decision Tree**","metadata":{"id":"RJ6wTOLhhY3L"}},{"cell_type":"code","source":"from sklearn.tree import DecisionTreeClassifier\n\nclf = DecisionTreeClassifier(criterion = 'gini',random_state=0)\nclf = clf.fit(feat_trainCNN,np.argmax(y_train,axis=1))\n\nTrainDecisionScoreCNN=clf.score(feat_trainCNN,np.argmax(y_train,axis=1))*100\nprint(\"Decision Tree Training Accuracy Score:-\",TrainDecisionScoreCNN)\n\n\nTestDecisionScoreCNN=clf.score(feat_testCNN,np.argmax(y_test,axis=1))*100\nprint(\"\\nDecision Tree Testing Accuracy Score:-\",TestDecisionScoreCNN)\ny_pred = clf.predict(feat_testCNN)\n\ncm = confusion_matrix(np.argmax(y_test,axis=1), y_pred)\nprint('\\nConfusion Metrics \\n',cm)\nprint(classification_report(np.argmax(y_test,axis=1),y_pred))","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:10:58.988389Z","iopub.status.busy":"2022-04-26T09:10:58.98785Z","iopub.status.idle":"2022-04-26T09:11:00.223606Z","shell.execute_reply":"2022-04-26T09:11:00.222701Z","shell.execute_reply.started":"2022-04-26T09:10:58.988353Z"},"id":"Ctie3A6YhY3L","outputId":"ed77d535-8c52-430d-e645-a17d70de9bdf"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**K-Nearest Neighbor(KNN)**","metadata":{"id":"t_4SChU5hY3M"}},{"cell_type":"code","source":"from sklearn.neighbors import KNeighborsClassifier\n\nknn = KNeighborsClassifier(n_neighbors=5,metric = 'euclidean')\nknn.fit(feat_trainCNN,np.argmax(y_train,axis=1))\n\nTrainKNNScoreCNN=knn.score(feat_trainCNN,np.argmax(y_train,axis=1))*100\nprint(\"KNN Training Accuracy Score:-\",TrainKNNScoreCNN)\n\nTestKNNScoreCNN=knn.score(feat_testCNN,np.argmax(y_test,axis=1))*100\nprint(\"\\nKNN Testing Accuracy Score:-\",TestKNNScoreCNN)\n\ny_pred = knn.predict(feat_testCNN)\n\ncm = confusion_matrix(np.argmax(y_test,axis=1), y_pred)\nprint('\\nConfusion Metrics \\n',cm)\nprint(classification_report(np.argmax(y_test,axis=1),y_pred))","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:11:00.22513Z","iopub.status.busy":"2022-04-26T09:11:00.224848Z","iopub.status.idle":"2022-04-26T09:11:29.271037Z","shell.execute_reply":"2022-04-26T09:11:29.270266Z","shell.execute_reply.started":"2022-04-26T09:11:00.225097Z"},"id":"kE9MI-mHhY3M","outputId":"e83e23fd-369d-4c5c-b12a-6476d027fd0e"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Random Forset**","metadata":{"id":"M6FmC5VwhY3M"}},{"cell_type":"code","source":"from sklearn.ensemble import RandomForestClassifier\nclassifier = RandomForestClassifier(n_estimators = 10, criterion = 'entropy', random_state = 0)\nclassifier.fit(feat_trainCNN,np.argmax(y_train,axis=1))\nTrainRFScoreCNN=classifier.score(feat_trainCNN,np.argmax(y_train,axis=1))*100\nprint(\"random forest Training Accuracy Score:-\",TrainRFScoreCNN)\n\nTestRFScoreCNN=classifier.score(feat_testCNN,np.argmax(y_test,axis=1))*100\nprint(\"\\nrandom forestTesting Accuracy Score:-\",TestRFScoreCNN)\n\ny_pred = classifier.predict(feat_testCNN)\n\ncm = confusion_matrix(np.argmax(y_test,axis=1), y_pred)\nprint('\\nConfusion Metrics \\n',cm)\nprint(classification_report(np.argmax(y_test,axis=1),y_pred))","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:11:29.272486Z","iopub.status.busy":"2022-04-26T09:11:29.272166Z","iopub.status.idle":"2022-04-26T09:11:29.86242Z","shell.execute_reply":"2022-04-26T09:11:29.861577Z","shell.execute_reply.started":"2022-04-26T09:11:29.272455Z"},"id":"8K-Qo_XqhY3M","outputId":"21402422-5854-4e35-f088-feaa4f48fe66"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Summary","metadata":{"id":"nxvaL-92hY3N"}},{"cell_type":"markdown","source":"> CNN-svm model shows highest accuarcy followed closely by CNN-knn and CNN.","metadata":{"id":"voD1hJ27hY3N"}},{"cell_type":"code","source":"print(\"--Training Accuracy..\")\nprint(\"CNN Accuracy:- {:.2f} %\".format(trainCNNScore))\nprint(\"CNN-SVM Accuracy:- {:.2f} %\".format(TrainSVMScoreCNN))\nprint(\"CNN-DT Accuracy:- {:.2f} %\".format(TrainDecisionScoreCNN))\nprint(\"CNN-KNN Accuracy:- {:.2f} %\".format(TrainKNNScoreCNN))\nprint(\"CNN-RF Accuracy:- {:.2f} %\".format(TrainRFScoreCNN))\n\nprint(\"\\n--Testing Accuracy..\")\nprint(\"CNN Accuracy:- {:.2f} %\".format(CNNScore))\nprint(\"CNN-SVM Accuracy:- {:.2f} %\".format(TestSVMScoreCNN))\nprint(\"CNN-DT Accuracy:- {:.2f} %\".format(TestDecisionScoreCNN))\nprint(\"CNN-KNN Accuracy:- {:.2f} %\".format(TestKNNScoreCNN))\nprint(\"CNN-RF Accuracy:- {:.2f} %\".format(TestRFScoreCNN))\n","metadata":{"execution":{"iopub.execute_input":"2022-04-26T09:11:29.863769Z","iopub.status.busy":"2022-04-26T09:11:29.863552Z","iopub.status.idle":"2022-04-26T09:11:29.872286Z","shell.execute_reply":"2022-04-26T09:11:29.871487Z","shell.execute_reply.started":"2022-04-26T09:11:29.863743Z"},"id":"iM3iyG8yhY3N","outputId":"c9c7c33e-c55d-4b1b-e8d3-30cf5944f19d"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"id":"8HS_PgNus-MN"},"execution_count":null,"outputs":[]}],"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"}}