{"cells":[{"metadata":{"_uuid":"66d42c40153bfa1b96ee37d3009eaeaac64cd48b"},"cell_type":"markdown","source":"1. Ref: https://www.kaggle.com/iafoss/similarity-densenet121-0-805lb-kernel-time-limit\n2. Ref: https://www.kaggle.com/ateplyuk/ensemble-lb-0-833\n3. Ref: https://www.kaggle.com/axel81/siamese-ensemble-of-ensemble-lb-0-824\n4. Ref: https://www.kaggle.com/frkhit/triplet-loss-from-pretrained-siamese-net-0-76\n5. Ref: https://www.kaggle.com/seesee/siamese-pretrained-0-822\n6. Ref: https://www.kaggle.com/monuwio/ensemble-of-many-good-submissions"},{"metadata":{"trusted":true,"_uuid":"48f0c89a21f5927fea69a25637ffa1953284037e"},"cell_type":"code","source":"import os\nprint(os.listdir(\"../input\"))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport csv","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"69ca4d8d87bd3719ee9dc9b320cb8048d5d9feae"},"cell_type":"code","source":"sub_files = [\n                 \"../input/ensemble-0842/sub_simi_800.csv\",             \n                 \"../input/ensemble-0842/sub_simi_805.csv\",\n                 \"../input/ensemble-0842/sub_ens_833.csv\",\n                 \"../input/ensemble-0842/sub_ens_824.csv\",\n                 \"../input/ensemble-0842/sub_tri_760.csv\",\n                 \"../input/ensemble-0842/sub_siam_822.csv\",\n            ]\n\nsub_weight = [\n                0.800**2,            \n                0.805**2,\n                0.833**2,\n                0.824**2,\n                0.76**2,\n                0.822**2,\n            ]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"454bc1f45a5a9f5cac8eb0b4fcfd583a5468231b"},"cell_type":"code","source":"Hlabel = 'Image' \nHtarget = 'Id'\nnpt = 6\nplace_weights = {}\nfor i in range(npt):\n    place_weights[i] = ( 1 / (i + 1) )\n    \nprint(place_weights)\n\nlg = len(sub_files)\nsub = [None]*lg\nfor i, file in enumerate( sub_files ):\n   \n    print(\"Reading {}: w={} - {}\". format(i, sub_weight[i], file))\n    reader = csv.DictReader(open(file,\"r\"))\n    sub[i] = sorted(reader, key=lambda d: str(d[Hlabel]))\n\nout = open(\"submission_1.csv\", \"w\", newline='')\nwriter = csv.writer(out)\nwriter.writerow([Hlabel,Htarget])\n\nfor p, row in enumerate(sub[0]):\n    target_weight = {}\n    for s in range(lg):\n        row1 = sub[s][p]\n        for ind, trgt in enumerate(row1[Htarget].split(' ')):\n            target_weight[trgt] = target_weight.get(trgt,0) + (place_weights[ind]*sub_weight[s])\n    tops_trgt = sorted(target_weight, key=target_weight.get, reverse=True)[:npt]\n    writer.writerow([row1[Hlabel], \" \".join(tops_trgt)])\nout.close()","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}