{ "cells": [ { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from utils import *\n", "\n", "fd_collection = getCollection(\"team_5_mwdb_phase_2\", \"fd_collection\")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Applying svd on the fc_fd space to get 5 latent semantics.\n" ] } ], "source": [ "selected_feature_model = \"fc_fd\"\n", "\n", "k = int(input(\"Enter value of k: \"))\n", "if k < 1:\n", " raise ValueError(\"k should be a positive integer\")\n", "\n", "\n", "label_mean_vectors = []\n", "\n", "\n", "\n", "latent_semantics = extract_latent_semantics_from_feature_model(\n", " fd_collection,\n", " k,\n", " selected_feature_model,\n", ")\n", "\n", "U = np.array(latent_semantics[\"image-semantic\"])\n", "S = np.array(latent_semantics[\"semantics-core\"])\n", "if len(S.shape) == 1:\n", " S = np.diag(S)\n", "V = np.transpose(np.array(latent_semantics[\"semantic-feature\"]))\n", "comparison_feature_space = np.matmul(U,S)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "true_positives = {}\n", "false_negatives = {}\n", "false_positives = {}\n", "true_negatives = {}\n", "for image_id in range(NUM_IMAGES):\n", " image = fd_collection.find_one({\"image_id\": (image_id*2+1)})\n", " comparison_vector = np.matmul(np.matmul(np.array(image[selected_feature_model]).flatten(), V), S)\n", "\n", " distances = []\n", " for i in range(NUM_LABELS):\n", " distances.append(\n", " {\n", " \"image_id\": image_id*2 + 1,\n", " \"label\": i,\n", " \"distance\": math.dist(\n", " comparison_vector, comparison_feature_space[i]\n", " ),\n", " }\n", " )\n", " distances = sorted(distances, key=lambda x: x[\"distance\"], reverse=False)\n", " # print(f\"Similar Labels for image {(image_id*2+1)}\")\n", " if distances[0][\"label\"] == image[\"true_label\"]:\n", " true_positives[image[\"true_label\"]] = true_positives.get(image[\"true_label\"], 0) + 1\n", " else:\n", " false_negatives[image[\"true_label\"]] = false_negatives.get(image[\"true_label\"], 0) + 1\n", " false_positives[distances[0][\"label\"]] = false_positives.get(distances[0][\"label\"], 0) + 1\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Precision for Label 0: 0.6772151898734177\n", "Recall for Label 0: 0.4930875576036866\n", "F1 Score for Label 0: 0.5706666666666667\n", "Precision for Label 1: 0.62\n", "Recall for Label 1: 0.7110091743119266\n", "F1 Score for Label 1: 0.6623931623931624\n", "Precision for Label 2: 0.5\n", "Recall for Label 2: 0.23\n", "F1 Score for Label 2: 0.31506849315068497\n", "Precision for Label 3: 0.9184782608695652\n", "Recall for Label 3: 0.42355889724310775\n", "F1 Score for Label 3: 0.5797598627787307\n", "Precision for Label 4: 0.19047619047619047\n", "Recall for Label 4: 0.14814814814814814\n", "F1 Score for Label 4: 0.16666666666666666\n", "Precision for Label 5: 0.8899521531100478\n", "Recall for Label 5: 0.465\n", "F1 Score for Label 5: 0.6108374384236454\n", "Precision for Label 6: 0.0\n", "Recall for Label 6: 0.0\n", "F1 Score for Label 6: None\n", "Precision for Label 7: 0.06666666666666667\n", "Recall for Label 7: 0.047619047619047616\n", "F1 Score for Label 7: 0.05555555555555555\n", "Precision for Label 8: 0.22727272727272727\n", "Recall for Label 8: 0.20833333333333334\n", "F1 Score for Label 8: 0.21739130434782608\n", "Precision for Label 9: 0.1\n", "Recall for Label 9: 0.037037037037037035\n", "F1 Score for Label 9: 0.05405405405405406\n", "Precision for Label 10: 0.11764705882352941\n", "Recall for Label 10: 0.08695652173913043\n", "F1 Score for Label 10: 0.09999999999999999\n", "Precision for Label 11: 0.09523809523809523\n", "Recall for Label 11: 0.125\n", "F1 Score for Label 11: 0.1081081081081081\n", "Precision for Label 12: 0.6666666666666666\n", "Recall for Label 12: 0.46875\n", "F1 Score for Label 12: 0.5504587155963303\n", "Precision for Label 13: 0.5483870967741935\n", "Recall for Label 13: 0.3469387755102041\n", "F1 Score for Label 13: 0.425\n", "Precision for Label 14: 0.19230769230769232\n", "Recall for Label 14: 0.22727272727272727\n", "F1 Score for Label 14: 0.20833333333333331\n", "Precision for Label 15: 0.4642857142857143\n", "Recall for Label 15: 0.30952380952380953\n", "F1 Score for Label 15: 0.3714285714285715\n", "Precision for Label 16: 0.15384615384615385\n", "Recall for Label 16: 0.08695652173913043\n", "F1 Score for Label 16: 0.1111111111111111\n", "Precision for Label 17: 0.3333333333333333\n", "Recall for Label 17: 0.36\n", "F1 Score for Label 17: 0.34615384615384615\n", "Precision for Label 18: 0.15384615384615385\n", "Recall for Label 18: 0.2857142857142857\n", "F1 Score for Label 18: 0.2\n", "Precision for Label 19: 0.9104477611940298\n", "Recall for Label 19: 0.9838709677419355\n", "F1 Score for Label 19: 0.9457364341085271\n", "Precision for Label 20: 0.2\n", "Recall for Label 20: 0.21739130434782608\n", "F1 Score for Label 20: 0.20833333333333331\n", "Precision for Label 21: 0.7058823529411765\n", "Recall for Label 21: 0.4\n", "F1 Score for Label 21: 0.5106382978723405\n", "Precision for Label 22: 0.1875\n", "Recall for Label 22: 0.0967741935483871\n", "F1 Score for Label 22: 0.12765957446808507\n", "Precision for Label 23: 0.5365853658536586\n", "Recall for Label 23: 0.41509433962264153\n", "F1 Score for Label 23: 0.46808510638297873\n", "Precision for Label 24: 0.16216216216216217\n", "Recall for Label 24: 0.25\n", "F1 Score for Label 24: 0.19672131147540983\n", "Precision for Label 25: 0.18181818181818182\n", "Recall for Label 25: 0.11764705882352941\n", "F1 Score for Label 25: 0.14285714285714285\n", "Precision for Label 26: 0.1875\n", "Recall for Label 26: 0.08108108108108109\n", "F1 Score for Label 26: 0.11320754716981132\n", "Precision for Label 27: 0.52\n", "Recall for Label 27: 0.37142857142857144\n", "F1 Score for Label 27: 0.43333333333333335\n", "Precision for Label 28: 0.3235294117647059\n", "Recall for Label 28: 0.44\n", "F1 Score for Label 28: 0.3728813559322034\n", "Precision for Label 29: 0.25\n", "Recall for Label 29: 0.12\n", "F1 Score for Label 29: 0.16216216216216217\n", "Precision for Label 30: 0.46875\n", "Recall for Label 30: 0.5172413793103449\n", "F1 Score for Label 30: 0.4918032786885246\n", "Precision for Label 31: 0.11320754716981132\n", "Recall for Label 31: 0.18181818181818182\n", "F1 Score for Label 31: 0.13953488372093023\n", "Precision for Label 32: 0.42105263157894735\n", "Recall for Label 32: 0.6153846153846154\n", "F1 Score for Label 32: 0.5\n", "Precision for Label 33: 0.3103448275862069\n", "Recall for Label 33: 0.2727272727272727\n", "F1 Score for Label 33: 0.2903225806451613\n", "Precision for Label 34: 0.16666666666666666\n", "Recall for Label 34: 0.058823529411764705\n", "F1 Score for Label 34: 0.08695652173913045\n", "Precision for Label 35: 0.23809523809523808\n", "Recall for Label 35: 0.13513513513513514\n", "F1 Score for Label 35: 0.1724137931034483\n", "Precision for Label 36: 0.23529411764705882\n", "Recall for Label 36: 0.25\n", "F1 Score for Label 36: 0.24242424242424243\n", "Precision for Label 37: 0.34615384615384615\n", "Recall for Label 37: 0.3333333333333333\n", "F1 Score for Label 37: 0.33962264150943394\n", "Precision for Label 38: 0.09523809523809523\n", "Recall for Label 38: 0.0625\n", "F1 Score for Label 38: 0.07547169811320754\n", "Precision for Label 39: 0.6666666666666666\n", "Recall for Label 39: 0.8095238095238095\n", "F1 Score for Label 39: 0.7311827956989246\n", "Precision for Label 40: 0.55\n", "Recall for Label 40: 0.6470588235294118\n", "F1 Score for Label 40: 0.5945945945945946\n", "Precision for Label 41: 0.06896551724137931\n", "Recall for Label 41: 0.06060606060606061\n", "F1 Score for Label 41: 0.06451612903225808\n", "Precision for Label 42: 0.06666666666666667\n", "Recall for Label 42: 0.08695652173913043\n", "F1 Score for Label 42: 0.07547169811320756\n", "Precision for Label 43: 0.18\n", "Recall for Label 43: 0.5294117647058824\n", "F1 Score for Label 43: 0.26865671641791045\n", "Precision for Label 44: 0.0\n", "Recall for Label 44: 0.0\n", "F1 Score for Label 44: None\n", "Precision for Label 45: 0.20833333333333334\n", "Recall for Label 45: 0.2\n", "F1 Score for Label 45: 0.20408163265306126\n", "Precision for Label 46: 0.34615384615384615\n", "Recall for Label 46: 0.54\n", "F1 Score for Label 46: 0.42187500000000006\n", "Precision for Label 47: 0.2714285714285714\n", "Recall for Label 47: 0.38\n", "F1 Score for Label 47: 0.3166666666666666\n", "Precision for Label 48: 0.5263157894736842\n", "Recall for Label 48: 0.47619047619047616\n", "F1 Score for Label 48: 0.5\n", "Precision for Label 49: 0.04819277108433735\n", "Recall for Label 49: 0.14814814814814814\n", "F1 Score for Label 49: 0.07272727272727274\n", "Precision for Label 50: 0.41509433962264153\n", "Recall for Label 50: 0.5\n", "F1 Score for Label 50: 0.4536082474226804\n", "Precision for Label 51: 0.2631578947368421\n", "Recall for Label 51: 0.375\n", "F1 Score for Label 51: 0.30927835051546393\n", "Precision for Label 52: 0.5294117647058824\n", "Recall for Label 52: 0.6\n", "F1 Score for Label 52: 0.5625\n", "Precision for Label 53: 0.75\n", "Recall for Label 53: 0.9375\n", "F1 Score for Label 53: 0.8333333333333334\n", "Precision for Label 54: 0.23076923076923078\n", "Recall for Label 54: 0.13953488372093023\n", "F1 Score for Label 54: 0.1739130434782609\n", "Precision for Label 55: 0.5\n", "Recall for Label 55: 0.5263157894736842\n", "F1 Score for Label 55: 0.5128205128205129\n", "Precision for Label 56: 0.3333333333333333\n", "Recall for Label 56: 0.3870967741935484\n", "F1 Score for Label 56: 0.3582089552238806\n", "Precision for Label 57: 0.775\n", "Recall for Label 57: 0.775\n", "F1 Score for Label 57: 0.775\n", "Precision for Label 58: 0.15789473684210525\n", "Recall for Label 58: 0.5384615384615384\n", "F1 Score for Label 58: 0.24418604651162792\n", "Precision for Label 59: 0.17647058823529413\n", "Recall for Label 59: 0.14285714285714285\n", "F1 Score for Label 59: 0.15789473684210528\n", "Precision for Label 60: 0.5625\n", "Recall for Label 60: 0.5454545454545454\n", "F1 Score for Label 60: 0.5538461538461538\n", "Precision for Label 61: 0.11428571428571428\n", "Recall for Label 61: 0.19047619047619047\n", "F1 Score for Label 61: 0.14285714285714285\n", "Precision for Label 62: 0.15\n", "Recall for Label 62: 0.15\n", "F1 Score for Label 62: 0.15\n", "Precision for Label 63: 0.3111111111111111\n", "Recall for Label 63: 0.3181818181818182\n", "F1 Score for Label 63: 0.31460674157303375\n", "Precision for Label 64: 0.2631578947368421\n", "Recall for Label 64: 0.625\n", "F1 Score for Label 64: 0.37037037037037035\n", "Precision for Label 65: 0.7777777777777778\n", "Recall for Label 65: 0.5526315789473685\n", "F1 Score for Label 65: 0.6461538461538462\n", "Precision for Label 66: 0.057692307692307696\n", "Recall for Label 66: 0.1111111111111111\n", "F1 Score for Label 66: 0.07594936708860758\n", "Precision for Label 67: 0.21428571428571427\n", "Recall for Label 67: 0.3333333333333333\n", "F1 Score for Label 67: 0.2608695652173913\n", "Precision for Label 68: 0.16666666666666666\n", "Recall for Label 68: 0.10526315789473684\n", "F1 Score for Label 68: 0.12903225806451615\n", "Precision for Label 69: 0.5625\n", "Recall for Label 69: 0.75\n", "F1 Score for Label 69: 0.6428571428571429\n", "Precision for Label 70: 0.05\n", "Recall for Label 70: 0.05263157894736842\n", "F1 Score for Label 70: 0.05128205128205128\n", "Precision for Label 71: 0.12\n", "Recall for Label 71: 0.13636363636363635\n", "F1 Score for Label 71: 0.1276595744680851\n", "Precision for Label 72: 0.38461538461538464\n", "Recall for Label 72: 0.18518518518518517\n", "F1 Score for Label 72: 0.25\n", "Precision for Label 73: 0.08695652173913043\n", "Recall for Label 73: 0.11764705882352941\n", "F1 Score for Label 73: 0.09999999999999999\n", "Precision for Label 74: 0.375\n", "Recall for Label 74: 0.42857142857142855\n", "F1 Score for Label 74: 0.39999999999999997\n", "Precision for Label 75: 0.30392156862745096\n", "Recall for Label 75: 0.7560975609756098\n", "F1 Score for Label 75: 0.4335664335664335\n", "Precision for Label 76: 0.3333333333333333\n", "Recall for Label 76: 0.6666666666666666\n", "F1 Score for Label 76: 0.4444444444444444\n", "Precision for Label 77: 0.125\n", "Recall for Label 77: 0.125\n", "F1 Score for Label 77: 0.125\n", "Precision for Label 78: 0.13333333333333333\n", "Recall for Label 78: 0.2\n", "F1 Score for Label 78: 0.16\n", "Precision for Label 79: 0.1415929203539823\n", "Recall for Label 79: 0.5\n", "F1 Score for Label 79: 0.2206896551724138\n", "Precision for Label 80: 0.12\n", "Recall for Label 80: 0.15789473684210525\n", "F1 Score for Label 80: 0.13636363636363635\n", "Precision for Label 81: 0.2553191489361702\n", "Recall for Label 81: 0.2857142857142857\n", "F1 Score for Label 81: 0.2696629213483146\n", "Precision for Label 82: 0.22580645161290322\n", "Recall for Label 82: 0.4827586206896552\n", "F1 Score for Label 82: 0.3076923076923077\n", "Precision for Label 83: 0.1111111111111111\n", "Recall for Label 83: 0.17647058823529413\n", "F1 Score for Label 83: 0.13636363636363638\n", "Precision for Label 84: 0.17073170731707318\n", "Recall for Label 84: 0.21875\n", "F1 Score for Label 84: 0.19178082191780824\n", "Precision for Label 85: 0.5151515151515151\n", "Recall for Label 85: 0.7391304347826086\n", "F1 Score for Label 85: 0.6071428571428571\n", "Precision for Label 86: 0.3\n", "Recall for Label 86: 0.4186046511627907\n", "F1 Score for Label 86: 0.34951456310679613\n", "Precision for Label 87: 0.45454545454545453\n", "Recall for Label 87: 0.3448275862068966\n", "F1 Score for Label 87: 0.39215686274509803\n", "Precision for Label 88: 0.3181818181818182\n", "Recall for Label 88: 0.21875\n", "F1 Score for Label 88: 0.25925925925925924\n", "Precision for Label 89: 0.15789473684210525\n", "Recall for Label 89: 0.16666666666666666\n", "F1 Score for Label 89: 0.16216216216216214\n", "Precision for Label 90: 0.39473684210526316\n", "Recall for Label 90: 0.35714285714285715\n", "F1 Score for Label 90: 0.37500000000000006\n", "Precision for Label 91: 0.10638297872340426\n", "Recall for Label 91: 0.2\n", "F1 Score for Label 91: 0.13888888888888892\n", "Precision for Label 92: 0.3448275862068966\n", "Recall for Label 92: 0.23255813953488372\n", "F1 Score for Label 92: 0.2777777777777778\n", "Precision for Label 93: 0.041666666666666664\n", "Recall for Label 93: 0.02702702702702703\n", "F1 Score for Label 93: 0.03278688524590164\n", "Precision for Label 94: 0.5111111111111111\n", "Recall for Label 94: 0.19166666666666668\n", "F1 Score for Label 94: 0.2787878787878788\n", "Precision for Label 95: 0.44\n", "Recall for Label 95: 0.6111111111111112\n", "F1 Score for Label 95: 0.5116279069767442\n", "Precision for Label 96: 0.13675213675213677\n", "Recall for Label 96: 0.5333333333333333\n", "F1 Score for Label 96: 0.217687074829932\n", "Precision for Label 97: 0.14285714285714285\n", "Recall for Label 97: 0.11764705882352941\n", "F1 Score for Label 97: 0.12903225806451615\n", "Precision for Label 98: 0.13414634146341464\n", "Recall for Label 98: 0.39285714285714285\n", "F1 Score for Label 98: 0.19999999999999998\n", "Precision for Label 99: 0.1\n", "Recall for Label 99: 0.10526315789473684\n", "F1 Score for Label 99: 0.10256410256410256\n", "Precision for Label 100: 0.3584905660377358\n", "Recall for Label 100: 0.6333333333333333\n", "F1 Score for Label 100: 0.45783132530120485\n", "Overall Accuracy: 0.38543107422775474\n" ] } ], "source": [ "for i in range(NUM_LABELS):\n", " true_negatives[i] = NUM_IMAGES - (true_positives.get(i,0) + false_negatives.get(i,0) + false_positives.get(i,0))\n", " precision = true_positives.get(i,0)/(true_positives.get(i,0) + false_positives.get(i,0))\n", " recall = true_positives.get(i,0)/(true_positives.get(i,0)+false_negatives.get(i,0))\n", " if (precision + recall == 0):\n", " f1_score = None\n", " else:\n", " f1_score = 2*precision*recall/(precision+recall) \n", " print(f\"\\nPrecision for Label {i}: {precision}\")\n", " print(f\"Recall for Label {i}: {recall}\")\n", " print(f\"F1 Score for Label {i}: {f1_score}\")\n", "\n", "accuracy = sum(true_positives.values())/NUM_IMAGES\n", "print(f\"Overall Accuracy: {accuracy}\")" ] } ], "metadata": { "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.11.6" } }, "nbformat": 4, "nbformat_minor": 2 }