{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport cv2\nimport os\nimport numpy\nfrom matplotlib import pyplot, cm\nfrom IPython.display import Image\nimport glob","metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"filename = []\nimg_list = []\ni = 1","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#image = cv2.imread('../input/siim-isic-melanoma-classification/jpeg/train/ISIC_0015719.jpg')\n#cv2.imshow(\"Image\", image)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)\n#cv2.imshow(\"Gray\", gray)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for filepath in glob.iglob('../input/siim-isic-melanoma-classification/jpeg/train/*.jpg'):\n    src = cv2.imread(filepath, cv2.IMREAD_UNCHANGED)\n\n    #percent by which the image is resized\n    scale_percent = 5\n\n    #calculate the 50 percent of original dimensions\n    #width = int(src.shape[1] * scale_percent / 100)\n    #height = int(src.shape[0] * scale_percent / 100)\n    width = 40\n    height = 30\n\n    # dsize\n    dsize = (width, height)\n\n    # resize image\n    output = cv2.resize(src, dsize)\n\n    #cv2.imwrite('temp_img.png',output)\n    \n    #temp_im = cv2.imread('temp_img.png')\n    temp_im = cv2.cvtColor(output, cv2.COLOR_BGR2HSV)\n    v = numpy.vstack(temp_im)\n    b = v.flatten()\n    filename.append(os.path.basename(filepath))\n    img_list.append(b)\n    print (i, os.path.basename(filepath))\n    i = i + 1","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.DataFrame(list(zip(filename, img_list)), \n               columns =['FileNames', \"Img_List\"])\nprint (df.head())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df3 = pd.DataFrame(df['Img_List'].to_list())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df4 = pd.concat([df, df3], axis=1)\nprint (df4.head())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df5 = df4.drop(\"Img_List\", axis = 1)\ndf5.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df6 = df5.drop(\"FileNames\", axis = 1)\ndf6.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df7 = df6 #/ 255\ndf7.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df7[\"FileNames\"] = df5[\"FileNames\"]\ndf7.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('../input/siim-isic-melanoma-classification/train.csv')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_com = train.copy()\ntrain_com.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_com.loc[train_com['sex'] == 'female', 'sex'] = 0\ntrain_com.loc[train_com['sex'] == 'male', 'sex'] = 1\ntrain_com.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_com['sex'].value_counts()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"null_columns=train_com.columns[train_com.isnull().any()]\ntrain_com[null_columns].isnull().sum()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_com['sex'] = train_com['sex'].fillna(1)\ntrain_com['sex'].value_counts()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_com.loc[train_com['age_approx'] == 0.0, 'age_approx'] = train_com['age_approx'].mean()\ntrain_com['age_approx'] = train_com['age_approx'].fillna(train_com['age_approx'].mean())\ntrain_com['age_approx'].value_counts()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_com.loc[train_com['anatom_site_general_challenge'] == 'torso', 'anatom_site_general_challenge'] = 0\ntrain_com.loc[train_com['anatom_site_general_challenge'] == 'lower extremity', 'anatom_site_general_challenge'] = 1\ntrain_com.loc[train_com['anatom_site_general_challenge'] == 'upper extremity', 'anatom_site_general_challenge'] = 2\ntrain_com.loc[train_com['anatom_site_general_challenge'] == 'head/neck', 'anatom_site_general_challenge'] = 3\ntrain_com.loc[train_com['anatom_site_general_challenge'] == 'palms/soles', 'anatom_site_general_challenge'] = 4\ntrain_com.loc[train_com['anatom_site_general_challenge'] == 'oral/genital', 'anatom_site_general_challenge'] = 5\ntrain_com['anatom_site_general_challenge'] = train_com['anatom_site_general_challenge'].fillna(0)\ntrain_com['anatom_site_general_challenge'].value_counts()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df7[\"image_name\"] = df5[\"FileNames\"]\ndf7.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for l in range(len(df7)):\n    df7[\"image_name\"][l]= df7[\"image_name\"][l].replace(\".jpg\", \"\")\ndf7.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_com_1 = train_com.merge(df7, on='image_name', how='left')\ntrain_com_1.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"null_columns1=train_com_1.columns[train_com_1.isnull().any()]\ntrain_com_1[null_columns1].isnull().sum()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_com_1.drop(['image_name', 'patient_id', 'diagnosis', 'benign_malignant'], axis=1, inplace=True)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_com_1.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#train_com_1.to_csv(\"m1_train.csv\", index= False)\n#del df\n#del df3\n#del df4\n#del df5\n#del df6\n#del df7\n#del train_com\n#del v\n#del b","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_features = train_com_1.loc[:, train_com_1.columns != 'target']\ntrain_features.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_features['sex'] = train_features['sex'].astype('bool')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def normalize(x):\n  return ((x - min(x)) / (max(x) - min(x)))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#train_features.age_approx = normalize(train_features.age_approx)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_labels = train_com_1.loc[:, train_com_1.columns == 'target']\ntrain_labels.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import imblearn\nimport collections\ncounter = collections.Counter(train_labels)\nprint(counter)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_labels[['target']].sum(axis = 0, skipna = True) / 33126","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#from imblearn.over_sampling import SMOTE\n#oversample = SMOTE()\n#train_features, train_labels = oversample.fit_sample(train_features, train_labels)\n#from imblearn.under_sampling import NearMiss\n#nr = NearMiss()\n#train_features, train_labels = nr.fit_sample(train_features, train_labels)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_labels[['target']].sum(axis = 0, skipna = True) / 33126","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_train, X_val, y_train, y_val = train_test_split(train_features, train_labels, test_size=0.5, random_state= 0, stratify=train_labels)\nprint (X_train.shape, y_train.shape)\nprint (X_val.shape, y_val.shape)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.linear_model import LogisticRegression\nfrom sklearn import metrics","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#logreg = LogisticRegression()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#logreg.fit(X_train, y_train)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#y_pred = logreg.predict(X_val)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import confusion_matrix\n#confusion_matrix = confusion_matrix(y_val, y_pred)\n#print(confusion_matrix)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"filename = []\nimg_list = []\ni = 1\nfor filepath in glob.iglob('../input/siim-isic-melanoma-classification/jpeg/test/*.jpg'):\n    src = cv2.imread(filepath, cv2.IMREAD_UNCHANGED)\n\n    #percent by which the image is resized\n    scale_percent = 5\n\n    #calculate the 50 percent of original dimensions\n    #width = int(src.shape[1] * scale_percent / 100)\n    #height = int(src.shape[0] * scale_percent / 100)\n    width = 40\n    height = 30\n\n    # dsize\n    dsize = (width, height)\n\n    # resize image\n    output = cv2.resize(src, dsize)\n\n    #cv2.imwrite('temp_img.png',output)\n    \n    #temp_im = cv2.imread('temp_img.png')\n    temp_im = cv2.cvtColor(output, cv2.COLOR_BGR2HSV)\n    v = numpy.vstack(temp_im)\n    b = v.flatten()\n    filename.append(os.path.basename(filepath))\n    img_list.append(b)\n    print (i, os.path.basename(filepath))\n    i = i + 1","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.DataFrame(list(zip(filename, img_list)), \n               columns =['FileNames', \"Img_List\"])\nprint (df.head())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df3 = pd.DataFrame(df['Img_List'].to_list())\ndf4 = pd.concat([df, df3], axis=1)\nprint (df4.head())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df5 = df4.drop(\"Img_List\", axis = 1)\ndf6 = df5.drop(\"FileNames\", axis = 1)\ndf7 = df6 #/ 255\ndf7[\"image_name\"] = df5[\"FileNames\"]\ndf7.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test = pd.read_csv('../input/siim-isic-melanoma-classification/test.csv')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for l in range(len(df7)):\n    df7[\"image_name\"][l]= str(df7[\"image_name\"][l]).replace(\".jpg\", \"\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_com_1 = test.merge(df7, on='image_name', how='left')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_com_1.loc[test_com_1['sex'] == 'female', 'sex'] = 0\ntest_com_1.loc[test_com_1['sex'] == 'male', 'sex'] = 1\n\nnull_columns=test_com_1.columns[test_com_1.isnull().any()]\ntest_com_1[null_columns].isnull().sum()\n\ntest_com_1.loc[test_com_1['anatom_site_general_challenge'] == 'torso', 'anatom_site_general_challenge'] = 0\ntest_com_1.loc[test_com_1['anatom_site_general_challenge'] == 'lower extremity', 'anatom_site_general_challenge'] = 1\ntest_com_1.loc[test_com_1['anatom_site_general_challenge'] == 'upper extremity', 'anatom_site_general_challenge'] = 2\ntest_com_1.loc[test_com_1['anatom_site_general_challenge'] == 'head/neck', 'anatom_site_general_challenge'] = 3\ntest_com_1.loc[test_com_1['anatom_site_general_challenge'] == 'palms/soles', 'anatom_site_general_challenge'] = 4\ntest_com_1.loc[test_com_1['anatom_site_general_challenge'] == 'oral/genital', 'anatom_site_general_challenge'] = 5\ntest_com_1['anatom_site_general_challenge'] = test_com_1['anatom_site_general_challenge'].fillna(0)\ntest_com_1['anatom_site_general_challenge'].value_counts()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_com_1.drop(['image_name', 'patient_id'], axis=1, inplace=True)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#tpredictions = logreg.predict(test_com_1)\n\n#yy = list(tpredictions)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n#sdf = pd.DataFrame(list(zip(test['image_name'], yy)), columns =['image_name', 'target']) \n#sdf.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#sdf.to_csv(\"Mahesh_LR_Sub_1.csv\", index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# df\n#del df3\n#del df4\n#del df5\n#del df6\n#del df7\n#del logreg\n#del sdf\n#del yy\n#del filename\n#del img_list\n#del v\n#del b","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#from sklearn.tree import DecisionTreeClassifier\n#from sklearn.metrics import confusion_matrix\n#from sklearn.tree import export_graphviz\n#from IPython.display import Image \n#from pydot import graph_from_dot_data","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#dt = DecisionTreeClassifier()\n#dt.fit(X_train, y_train)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#y_pred = dt.predict(X_val)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#from sklearn.metrics import confusion_matrix\n#confusion_matrix = confusion_matrix(y_val, y_pred)\n#print(confusion_matrix)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#tpredictions = dt.predict(test_com_1)\n#yy = list(tpredictions)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#sdf = pd.DataFrame(list(zip(test['image_name'], yy)), columns =['image_name', 'target']) \n#sdf.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#sdf.to_csv(\"Mahesh_DT_Sub_1.csv\", index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#from sklearn.model_selection import GridSearchCV","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#param_grid = {\n#    'random_state' : list(range(1,5)),\n#    'max_features' : list(range(1,5)),\n#    'criterion' : ['entropy','gini'],\n#    'min_samples_split' : [2,3,4,5],\n#    'min_impurity_decrease' : [0.0009, 0.001, 0.0011],\n#    'max_leaf_nodes' : [2,3,4,5],\n#    'max_features' : list(range(1,5)),\n#}","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#from sklearn.model_selection import RandomizedSearchCV\n#rsearch = RandomizedSearchCV(estimator=dt, param_distributions=param_grid, n_iter=20)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#rsearch.fit(X_train, y_train)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#print (rsearch.best_params_)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#dt = DecisionTreeClassifier(random_state = 1,\n#                            min_samples_split = 4,\n#                            min_impurity_decrease = 0.0011,\n#                            max_leaf_nodes = 3,\n#                            max_features = 4,\n#                            criterion = 'entropy')\n#dt.fit(X_train, y_train)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#y_pred1 = dt.predict(X_val)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#from sklearn.metrics import confusion_matrix\n#confusion_matrix = confusion_matrix(y_val, y_pred)\n#print(confusion_matrix)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#tpredictions = dt.predict(test_com_1)\n#yy = list(tpredictions)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#sdf = pd.DataFrame(list(zip(test['image_name'], yy)), columns =['image_name', 'target']) \n#sdf.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#sdf.to_csv(\"Mahesh_DT_Sub_2.csv\", index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Gradient Boosting","metadata":{}},{"cell_type":"code","source":"from sklearn.ensemble import GradientBoostingClassifier  #GBM algorithm\nfrom sklearn.model_selection import GridSearchCV   #Perforing grid search\nfrom sklearn.metrics import precision_score\nfrom sklearn.metrics import recall_score\nfrom sklearn.metrics import f1_score\nfrom sklearn.metrics import confusion_matrix\nfrom sklearn.metrics import accuracy_score\nfrom xgboost.sklearn import XGBClassifier","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#X_train.drop('FileNames', axis=1, inplace=True)\nX_train.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train.loc[X_train['sex'] == False, 'sex'] = 0\nX_train.loc[X_train['sex'] == True, 'sex'] = 1","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_val.drop('FileNames', axis=1, inplace=True)\nX_val.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"gbm0 = GradientBoostingClassifier()\ngbm0.fit(X_train, y_train)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred = gbm0.predict(X_val)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"precision = precision_score(y_val, y_pred)\nprint('Precision: %f' % precision)\n# recall: tp / (tp + fn)\nrecall = recall_score(y_val, y_pred)\nprint('Recall: %f' % recall)\n# f1: 2 tp / (2 tp + fp + fn)\nf1 = f1_score(y_val, y_pred)\nprint('F1 score: %f' % f1)\nfrom sklearn.metrics import accuracy_score\nacc = accuracy_score(y_val, y_pred)\nprint('Accuracy: %f' % acc)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#X_train.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#test_com_1.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#test_com_1.sex = test_com_1.sex.value_counts()\ntest_com_1['sex'] = test_com_1['sex'].astype('bool')\ntest_com_1.age_approx = normalize(test_com_1.age_approx)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_com_1.sex.value_counts()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tpredictions = gbm0.predict(test_com_1)\nyy = list(tpredictions)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sdf = pd.DataFrame(list(zip(test['image_name'], yy)), columns =['image_name', 'target']) \nsdf.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sdf.to_csv(\"Mahesh_GB_Sub_2.csv\", index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#param_test1 = {'n_estimators':range(1,5)}\n#gsearch1 = GridSearchCV(estimator = GradientBoostingClassifier(learning_rate=0.1, \n#                                                               min_samples_split=500,\n#                                                               min_samples_leaf=50,\n#                                                               max_depth=8,\n#                                                               max_features='sqrt',\n#                                                               subsample=0.8,\n#                                                               random_state=10), \n#param_grid = param_test1, scoring='roc_auc',n_jobs=4,iid=False, cv=5)\n#gsearch1.fit(X_train, y_train)\n#gsearch1.best_params_","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}