{"cells":[{"metadata":{},"cell_type":"markdown","source":"![](https://pbs.twimg.com/profile_images/1023997768577179648/WeOL7-oq_400x400.jpg)\nAs the leading healthcare organization for informatics in medical imaging, the Society for Imaging Informatics in Medicine (SIIM)'s mission is to advance medical imaging informatics through education, research, and innovation in a multi-disciplinary community. SIIM is joined by the International Skin Imaging Collaboration (ISIC), an international effort to improve melanoma diagnosis. The ISIC Archive contains the largest publicly available collection of quality-controlled dermoscopic images of skin lesions.\n\nIn this competition, you’ll identify melanoma in images of skin lesions. In particular, you’ll use images within the same patient and determine which are likely to represent a melanoma. Using patient-level contextual information may help the development of image analysis tools, which could better support clinical dermatologists.","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"Thanks to my team for their constant efforts made to this competition, that paid off with a silver medal.\n\n1. Rohit Agarwal (https://www.kaggle.com/rohitagarwal)\n2. Vladmir (https://www.kaggle.com/vladimirsydor)\n3. Ashish Gupta (https://www.kaggle.com/roydatascience)\n4. Mukharbek Organokov (https://www.kaggle.com/muhakabartay)","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"In this kernel, I used top 14 models, our team built - using Pseudo Labelling approach.","execution_count":null},{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.execute_input":"2020-08-13T00:58:49.015326Z","iopub.status.busy":"2020-08-13T00:58:49.014642Z","iopub.status.idle":"2020-08-13T00:58:50.024782Z","shell.execute_reply":"2020-08-13T00:58:50.023851Z"},"papermill":{"duration":1.024039,"end_time":"2020-08-13T00:58:50.024948","exception":false,"start_time":"2020-08-13T00:58:49.000909","status":"completed"},"tags":[],"trusted":true,"_kg_hide-output":true},"cell_type":"code","source":"import os\nimport numpy as np \nimport pandas as pd \nimport matplotlib.pyplot as plt\nimport seaborn as sns\n%matplotlib inline\nfrom subprocess import check_output\nprint(check_output([\"ls\", \"../input/\"]).decode(\"utf8\"))","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-08-13T00:58:50.0475Z","iopub.status.busy":"2020-08-13T00:58:50.046819Z","iopub.status.idle":"2020-08-13T00:58:50.052928Z","shell.execute_reply":"2020-08-13T00:58:50.052278Z"},"papermill":{"duration":0.018507,"end_time":"2020-08-13T00:58:50.053053","exception":false,"start_time":"2020-08-13T00:58:50.034546","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"from scipy.stats import rankdata\nimport glob\nLABELS = [\"target\"]\nall_files = glob.glob(\"../input/pseudolabelmodels/*.csv\")","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-08-13T00:58:50.076499Z","iopub.status.busy":"2020-08-13T00:58:50.075616Z","iopub.status.idle":"2020-08-13T00:58:51.115165Z","shell.execute_reply":"2020-08-13T00:58:51.114514Z"},"papermill":{"duration":1.056112,"end_time":"2020-08-13T00:58:51.11529","exception":false,"start_time":"2020-08-13T00:58:50.059178","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"outs = [pd.read_csv(f, index_col=0) for f in all_files]\nconcat_sub = pd.concat(outs, axis=1)\ncols = list(map(lambda x: \"m\" + str(x), range(len(concat_sub.columns))))\nconcat_sub.columns = cols\nconcat_sub.reset_index(inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-08-13T00:58:51.149386Z","iopub.status.busy":"2020-08-13T00:58:51.148696Z","iopub.status.idle":"2020-08-13T00:58:51.432312Z","shell.execute_reply":"2020-08-13T00:58:51.431583Z"},"papermill":{"duration":0.310669,"end_time":"2020-08-13T00:58:51.432427","exception":false,"start_time":"2020-08-13T00:58:51.121758","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"import warnings\nwarnings.filterwarnings(\"ignore\")\nrank = np.tril(concat_sub.iloc[:,1:].corr().values,-1)\nm = (rank>0).sum()\nm_gmean, s = 0, 0\nfor n in range(min(rank.shape[0],m)):\n    mx = np.unravel_index(rank.argmin(), rank.shape)\n    w = (m-n)/(m+n/10)\n    #print(w)\n    m_gmean += w*(np.log(concat_sub.iloc[:,mx[0]+1])+np.log(concat_sub.iloc[:,mx[1]+1]))/2\n    s += w\n    rank[mx] = 1\nm_gmean = np.exp(m_gmean/s).clip(0.0,1.0)","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-08-13T00:58:51.461935Z","iopub.status.busy":"2020-08-13T00:58:51.460978Z","iopub.status.idle":"2020-08-13T00:58:51.726468Z","shell.execute_reply":"2020-08-13T00:58:51.725883Z"},"papermill":{"duration":0.287762,"end_time":"2020-08-13T00:58:51.726582","exception":false,"start_time":"2020-08-13T00:58:51.43882","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"predict_list = []\npredict_list.append(pd.read_csv('../input/pseudolabelmodels/submission-9350-pseudo-rohit.csv')[LABELS].values)\npredict_list.append(pd.read_csv('../input/pseudolabelmodels/submission-9351-pseudo-rohit.csv')[LABELS].values)\npredict_list.append(pd.read_csv('../input/pseudolabelmodels/submission-9373-pseudo-vova.csv')[LABELS].values)\npredict_list.append(pd.read_csv('../input/pseudolabelmodels/submission-9376-pseudo-rohit.csv')[LABELS].values)\npredict_list.append(pd.read_csv('../input/pseudolabelmodels/submission-9379-pseudo-rohit.csv')[LABELS].values)\npredict_list.append(pd.read_csv('../input/pseudolabelmodels/submission-9432-pseudo-vova.csv')[LABELS].values)\npredict_list.append(pd.read_csv('../input/pseudolabelmodels/submission-9474-pseudo-rohit.csv')[LABELS].values)\n\n\npredict_list_2 = []\npredict_list_2.append(pd.read_csv('../input/pseudolabelmodels/submission-9477-pseudo-ashish.csv')[LABELS].values)\npredict_list_2.append(pd.read_csv('../input/pseudolabelmodels/submission-9491-pseudo-rohit.csv')[LABELS].values)\npredict_list_2.append(pd.read_csv('../input/pseudolabelmodels/submission-94981-pseudo-ashish.csv')[LABELS].values)\npredict_list_2.append(pd.read_csv('../input/pseudolabelmodels/submission-94982-pseudo-ashish.csv')[LABELS].values)\npredict_list_2.append(pd.read_csv('../input/pseudolabelmodels/submission-9508-pseudo-rohit.csv')[LABELS].values)\npredict_list_2.append(pd.read_csv('../input/pseudolabelmodels/submission-9513-pseudo-ashish.csv')[LABELS].values)\npredict_list_2.append(pd.read_csv('../input/pseudolabelmodels/submission-9547-pseudo-rohit.csv')[LABELS].values)","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-08-13T00:58:51.791812Z","iopub.status.busy":"2020-08-13T00:58:51.791066Z","iopub.status.idle":"2020-08-13T00:58:51.808706Z","shell.execute_reply":"2020-08-13T00:58:51.808075Z"},"papermill":{"duration":0.030749,"end_time":"2020-08-13T00:58:51.808821","exception":false,"start_time":"2020-08-13T00:58:51.778072","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"import warnings\nwarnings.filterwarnings(\"ignore\")\nprint(\"Rank averaging on \", len(predict_list), \" files\")\npredictions = np.zeros_like(predict_list[0])\nfor predict in predict_list:\n    for i in range(1):\n        predictions[:, i] = np.add(predictions[:, i], rankdata(predict[:, i])/predictions.shape[0])  \n\npredictions = predictions /len(predict_list)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import warnings\nwarnings.filterwarnings(\"ignore\")\nprint(\"Rank averaging on \", len(predict_list_2), \" files\")\npredictions_2 = np.zeros_like(predict_list_2[0])\nfor predict_2 in predict_list_2:\n    for i in range(1):\n        predictions_2[:, i] = np.add(predictions_2[:, i], rankdata(predict_2[:, i])/predictions_2.shape[0])  \n\npredictions_2 = predictions_2 /len(predict_list_2)","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-08-13T00:58:51.830293Z","iopub.status.busy":"2020-08-13T00:58:51.829385Z","iopub.status.idle":"2020-08-13T00:58:51.982144Z","shell.execute_reply":"2020-08-13T00:58:51.981519Z"},"papermill":{"duration":0.166252,"end_time":"2020-08-13T00:58:51.982276","exception":false,"start_time":"2020-08-13T00:58:51.816024","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"submission_1 = pd.read_csv('../input/siim-isic-melanoma-classification/sample_submission.csv')\nsubmission_1[LABELS] = predictions\n\nsubmission_2 = pd.read_csv('../input/siim-isic-melanoma-classification/sample_submission.csv')\nsubmission_2[LABELS] = predictions_2\n\nsubmission = pd.read_csv('../input/siim-isic-melanoma-classification/sample_submission.csv')\nsubmission[LABELS] = submission_2[LABELS]*.55 + submission_1[LABELS]*.45\n\n\nsubmission.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]}],"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}