diff --git a/P0. Data preparation.ipynb b/P0. Data preparation.ipynb index fb58504..8d96904 100644 --- a/P0. Data preparation.ipynb +++ b/P0. Data preparation.ipynb @@ -9,10 +9,14 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ + "# if you don't have some library installed try using pip or pip3 to install it - you can do it from the notebook\n", + "# example: !pip install tqdm\n", + "# also on labs it's better to use python3 kernel - ipython3 notebook\n", + "\n", "import pandas as pd\n", "import numpy as np\n", "import scipy.sparse as sparse\n", @@ -50,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -129,7 +133,7 @@ "4 166 346 1 886397596" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -147,7 +151,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -176,14 +180,14 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { - "image/png": "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ddddHc7TESeeeKL/4Q9/qDjvIx/5iD/yyCObtd7XXnvN3377bXd3nz9/vu+zzz7u7v7666/7+vXrW5bZfffdfenSpZv1GiFsSt03bNjgffv29aamJnfPbtvoLF21baxYscIffvhh//a3v12xHpdeeqkfd9xxPnr06JZpe+21ly9YsMDd3X/2s5/5iSeeuFmvDQAAgM0nqcHb6Ac7sqf0E5IWuvuS5glm1sfMesb33y9pL0lPd+A1tgjDhg1rud+vX7+Wx9tvv70GDhyopUuXVn1+7969tXbtWq1du1a9e/fWokWLtHjxYo0cObLN59x6663ad999NWzYMJ1++ukte46a97g123///dXU1CRJOvroozV8+HANGjRI06dPb1lmu+220znnnKMDDjhAI0aM0IoVK/TAAw9o5syZOvvss1VfX69FixbppJNO0h//+MdUlttuu00HH3ywhg0bps985jNavXp11fe73XbbKTpdWVqzZk3L/a222kpbb721JOn1118Puidwc5RvB+258847teeee2r33Xevulxnbxvlex/zuG3ssssuOvDAA9W7d+/UvCVLlmjOnDn6z//8z8R0M9Orr74qSXrllVc4jBoAACBnarkkzHWSHpS0j5ktMbMvxbPGK3noriQdJumx+BIxf5T0ZXd/sTMDd0eNjY0Vpzc1NenRRx/VQQcd1DLtpz/9qYYMGaKTTz5ZL730kiTpW9/6lk444QT94Ac/0GmnnaZzzjlHF154YZuvt379ek2YMEGzZs1SY2OjnnvuucT8M844o+LzrrzySjU2NqqhoUGXX365Vq1aJSlqDEeMGKH58+frsMMO04wZM/ShD31I48aN08UXX6x58+Zpzz33rLjOF154QRdeeKHuuOMOzZ07V6VSSf/zP/8jKTqkc+bMmRWfd9NNN2nffffV6NGjdeWVV7ZMX7x4sYYMGaLddttN3/zmN7tVg9HWdlDJ9ddfr+OOOy4xLYttoy152jbacsYZZ+iHP/yhevRI/rP2q1/9SqNGjdKuu+6q3/zmN5o0adImrRcAAABdq92m1N2Pc/d+7t7b3Xd19yvi6Se5+y9bLXujuw9y93p3H+bus7oqeHcyceLE1LTVq1fr2GOP1WWXXaZ3vSs67fYrX/mKFi1apHnz5qlfv34666yzJEn19fV66KGHdNddd+npp59Wv3795O763Oc+p+OPP14rVqxIrHvhwoXaY489tNdee8nMdPzxxyfmV9pjJUmXX355yx6vxYsXt5yjuNVWW7XsTRs+fHjL3rNaPPTQQ1qwYIEOOeQQ1dfX6+qrr9YzzzwjSbrgggs0bty4is875phjtHDhQt18880699xzW6bvtttueuyxx/TUU0/p6quvTr33PKu0HVTyxhtvaObMmfrMZz7TMi2rbaMtedo2Kpk9e7Z22WUXDR8+PDXvRz/6kW655RYtWbJEX/ziF3XmmWfWvF4AAAB0vY4OdIQazJgxI/H4zTff1LHHHqvPf/7z+tSnPtUyvW/fvurZs6d69OihCRMm6OGHH048z9114YUX6txzz9X555+vH/7wh5owYYIuv/zymrP06tVLf//731ser1+/XpJ0991364477tCDDz6o+fPna+jQoS3zevfu3XIIbc+ePbVhw4aaX8/ddfjhh2vevHmaN2+eFixYoCuuuKLm5x922GF6+umn9cILLySm9+/fX/vvv7/uvffemtcVWuvtoC1//vOfNWzYMPXt27dlWlbbRvkh0XnfNsrdf//9mjlzpurq6jR+/Hj99a9/1fHHH6+VK1dq/vz5LUcjfO5zn9MDDzywWa8BAACArkFTmjF315e+9CUNHDgwtcemfHTWm266Sfvvn7zc6zXXXKNRo0Zpp5120tq1a9WjRw/16NFDa9euTSy37777qqmpSYsWLZIkXXfdxqOs6+rqWu7PnTtX//73vyVF59rtuOOO2nbbbbVw4UI99NBD7b6X7bffXq+99lrVZUaMGKH777+/ZcTTNWvW6F//+lfV5zz11FPNA2Vp7ty5ev3117XzzjtryZIlWrdunSTppZde0n333ad99tmn3ZzdzXXXXZc6dDerbWPu3LmS8rtttOUHP/iBlixZoqamJl1//fX62Mc+pt/+9rfacccd9corr7Ss9/bbb9fAgQM36zUAAADQNXqFDtBd1E2aU3V+09TRNa3n/vvv129+8xsNHjxY9fX1kqTvf//7GjVqlL7xjW9o3rx5MjPV1dVp2rRpLc9bu3atrrrqKt12222SpDPPPFOjRo3SVlttpWuvvTbxGu94xzs0ffp0jR49Wttuu60OPfTQlgbh2GOP1Re+8AUNGjRIBx10kPbee29J0lFHHaVf/vKXGjhwoPbZZx+NGDGi3fcyfvz4lr1xbR0S3KdPH1111VU67rjj9Prrr0uSLrzwQu29994677zzVCqVUodp3njjjbrmmmvUu3dvbbPNNrrhhhtkZnriiSd01llnyczk7vr617+uwYMH11L2bmPNmjW6/fbbE797SZltG9dcc02ut43nnntOpVJJr776qnr06KHLLrtMCxYsaDkEvrVevXppxowZOvbYY9WjRw/tuOOOiXOUAQAAEJ4175EKqVQq+eZetzArHWlKly1bFnRAnrvvvluXXHKJZs+enYs8RZXHurfeNgAAAICuYGaN7l6qNI/DdzOwKaOuZiFveYqCugMAAABp7CmtUWwg/EQAACAASURBVEf2lDYfbpoXectTFNQdAAAARcWeUgAAAABALtGUAgAAAACCoSnNQOuRVEPLW56ioO4AAABAGueU1qizLgkDAAAAAEXDOaWBmVnoCAl5y1MU1B0AAABIoykFAAAAAARDUwoAAAAACIamNANjxowJHSEhb3mKgroDAAAAaTSlGZg1a1boCAl5y1MU1B0AAABIoynNwNixY0NHSMhbnqKg7gAAAEAaTWkGZs+eHTpCQt7yFAV1BwAAANJoSpFiZjr++ONbHm/YsEF9+vTZ5HMiR44cqebrz44aNUovv/xyp+aUpGeffVZHHHGEBg4cqP32209NTU2SpJNOOkl77LGH6uvrVV9fr3nz5nX6awMAAADouF6hAyB/3vnOd+rxxx/XunXrtM022+j222/XgAEDOrTOW265pZPSJZ1wwgk655xzdPjhh2v16tXq0WPj9ywXX3yxPv3pT3fJ6wIAAADoHOwpzYC7h46QUEueUaNGac6cOZKk6667Tscdd1zLvDVr1ujkk0/WBz/4QQ0dOlR/+tOfJEnr1q3T+PHjNXDgQB1zzDFat25dy3Pq6ur0wgsvSJKOPvpoDR8+XIMGDdL06dNbltluu+10zjnn6IADDtCIESO0YsWKqhkXLFigDRs26PDDD295/rbbbltjFbKXt+0AAAAAyAOa0gyUN155UEue8ePH6/rrr9f69ev12GOP6aCDDmqZ973vfU8f+9jH9PDDD+uuu+7S2WefrTVr1ugXv/iFtt12Wz3xxBM6//zz1djYWHHdV155pRobG9XQ0KDLL79cq1atkhQ1uyNGjND8+fN12GGHacaMGZKkmTNn6rzzzkut51//+pd22GEHfepTn9LQoUN19tln66233mqZf84552jIkCH62te+ptdff32TatQV8rYdAAAAAHlAU5qBU045JXSEhFryDBkyRE1NTbruuus0atSoxLzbbrtNU6dOVX19vUaOHKn169fr2Wef1T333NNyLuqQIUM0ZMiQiuu+/PLLW/aGLl68WE8++aQkaauttmo5b3X48OEt54eOGzdOF1xwQWo9GzZs0L333qtLLrlEjzzyiJ5++mldddVVkqQf/OAHWrhwoR555BG9+OKLuuiii2qqTVfK23YAAAAA5AFNKdo0btw4ff3rX08cuitFh6HeeOONmjdvnubNm6dnn31WAwcOrGmdd999t+644w49+OCDmj9/voYOHar169dLknr37i0zkyT17NlTGzZsqLquXXfdVfX19Xr/+9+vXr166eijj9bcuXMlSf369ZOZaeutt9YXv/hFPfzww5v69gEAAABkgKYUbTr55JM1efJkDR48ODH9yCOP1E9+8pOWcyQfffRRSdJhhx2ma6+9VpL0+OOP67HHHkut85VXXtGOO+6obbfdVgsXLtRDDz202fkOPPBAvfzyy1q5cqUk6a9//av2228/SdLy5cslRQ30zTffrP3333+zXwcAAABA16EpzcDMmTNDR0ioNc+uu+6q008/PTX93HPP1ZtvvqkhQ4Zo0KBBOvfccyVJX/nKV7R69WoNHDhQ5513noYPH5567lFHHaUNGzZo4MCBmjRpkkaMGFFT3krnlPbs2VOXXHKJPv7xj2vw4MFyd02YMEGS9PnPf16DBw/W4MGD9cILL+g73/lOTe+5K+VtOwAAAADywPIwImipVPLm61nmVd2kOVXnN00d3ea8ZcuWqX///p0dabPlLU9RUHcAAAAUlZk1unup0jz2lGago9f47Gx5y1MU1B0AAABIoykFAAAAAARDUwoAAAAACIamNAPNg+/kRd7yFAV1BwAAANIY6KhGHRnoCAAAAACKjIGOAqt0aZSQ8panKKg7AAAAkEZTmoG5c+eGjpCQtzxFQd0BAACANJpSAAAAAEAwNKUZ6NevX+gICXnLUxTUHQAAAEijKc3AsmXLQkdIyFueoqDuAAAAQBpNaQamTJkSOkJC3vIUBXUHAAAA0rgkTI06ckkYM1Me6twsb3mKgroDAACgqLgkDAAAAAAgl2hKAQAAAADB0JRmIG+HJuctT1FQdwAAACCNphQAAAAA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\n", + "image/png": "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MWJEY/bLL7+8TdZ77LHHatSoUTIzLV26VF/60pe0fPly9erVSw8//LB22WUXbdy4Uf3799eoUaN2mj2Thx56qBYvXiwpaLT69Omjk08+uXE+24a05557aurUqZozZ07J+dddd5369u2r119/vXHaeeedp9tvv119+/bVL3/5S1155ZWaOXNmm+QBAABA22rNHtR/k7Tc3Vc2TDCznmbWObz/EUkHS3qmdRE7vsGDBzfe79WrV+Pj3XffXX379tWqVatin9+1a1dt3rxZmzZtUteuXbVixQqtWrVKn/rUp1p8zp133qnDDjtMRx99tL797W837lFq2BPXoH///qqvr5cknXTSSaqpqVG/fv00ffr0xmW6d++u8ePH64gjjtDQoUO1du1aPfzww5o7d64uueQSVVdXa8WKFTr77LN1yy23bJPlrrvu0pFHHqnBgwfr1FNP1caNG2Pfb/fu3RubqzfffLPxfrdu3bTLLrtIkt566y299957sevJmuLtoJx7771XBx10kD784Q/HLtfW20bxXsksbhv77LOPhgwZoq5du24zb+XKlVqwYIG+/vWvR6abWWPD+tprr+00X2gAAADsjCq5zMxsSY9IOtTMVprZ18JZoxU9vFeSjpG01MyWSLpF0jfcfUNbBu6I6urqSk6vr6/XE088oY9//OON037xi19o4MCBOuecc/TKK69Ikr7//e9r7NixmjJlis4//3yNHz9eV1xxRYuvt2XLFo0ZM0bz5s3Tgw8+qBdffDEy/4ILLij5vBtvvFF1dXWqra3V1KlTtX79eklBkzh06FAtWbJExxxzjGbMmKFPfOITGjVqlK6++motXrxYBx10UMl1vvzyy7ryyit1zz33aNGiRSoUCvrP//xPScFhn3Pnzi35vNtuu02HHXaYhg8frhtvvLFx+gsvvKCBAwdq//331/e+970O1Wy0tB2UcvPNN+v000+PTEti22hJlraNllxwwQX66U9/qk6dov+s/frXv9aJJ56o/fbbT7/5zW80bty47VovAAAAklO2QXX30929l7t3dff93P2GcPrZ7v6rZsve6u793P0Idx/s7vPaK3hHMnbs2G2mbdy4UaeccoqmTJmiD3wgOE33vPPO04oVK7R48WL16tVL3/3udyVJ1dXVevTRR3XffffpmWeeUe/eveXuOu2003TGGWdo7dq1kXUvX75cBx54oA4++GCZmc4444zI/FJ7siRp6tSpjXvCXnjhBT31VDD2Vbdu3Rr3stXU1DTuVavEo48+qmXLlumoo45SdXW1Zs2apeeee05ScNjnqFGjSj7v5JNP1vLlyzVnzhxNmDChcfr++++vpUuX6umnn9asWbO2ee9ZVmo7KOXtt9/W3LlzdeqppzZOS2rbaEmWto1S5s+fr3322Uc1NTXbzPvZz36mO+64QytXrtRXv/pVXXTRRRWvFwAAAMlq7SBJqMCMGTMij9955x2dcsop+vKXv6wvfOELjdP33Xdfde7cWZ06ddKYMWP02GOPRZ7n7rryyis1YcIEXXbZZbrssst0xhlnaOrUqdu8ZkvnH3bp0kV/+9vfGh9v2bJFknT//ffrnnvu0SOPPKIlS5Zo0KBBjfO6du3auL7OnTtr69atFb93d9dxxx2nxYsXa/HixVq2bJluuOGGip9/zDHHaMWKFXr55Zcj03v37q1+/frpwQcfrHhdaWu+HbTkT3/6kwYPHqx99923cVpS20bxYdNZ3zaKLVy4UHPnzlVVVZVGjx6tv/zlLzrjjDO0bt06LVmypPEohdNOO00PP/zwDr0GAAAA2h8NasLcXV/72tfUt2/fbfbkFI/yetttt6l//+jlZGfNmqXhw4erR48e2rRpkzp16qROnTpp06ZNkeUOO+wwPfvss1qxYoUkafbspiOxq6qqGu8vWrRIzz77rKTg3LwePXpot9120/Lly/Xoo4+WfS+777673njjjdhlhg4dqoULFzaOnLpp0yb961//in3O008/3TgC7aJFi/T2229rr7320sqVK7V582ZJ0iuvvKKFCxfq0EMPLZuzo5k9e/Y2h/cmtW0sWrRIUna3jZb85Cc/0cqVK1VfX6+bb75Zn/nMZ/Tb3/5WPXr00Guvvda43rvvvlt9+/bdodcAAABA+9vhUXzzpmrcgtj59ZOHV7SehQsX6je/+Y0GDBig6upqSdKPf/xjnXjiifqP//gPLV68WGamqqoqTZs2rfF5mzZt0qxZs3TXXXdJki666CKdcsop6tatW6TJkKT3ve99mj59uoYPH669995bRx99tJ588klJ0imnnKIzzzxT1dXVGjJkiA455BBJ0gknnKBf/epXGjhwoA499FANHTq07HsZPXq0xowZo6lTp7Z42HDPnj01c+ZMnX766XrrrbckSVdeeaUOOeQQXXrppSoUCtscynnrrbfqpptuUteuXbXrrrvqD3/4g8xM//jHP/Td735XZiZ318UXX6wBAwZUUvYOY9OmTbr77rsjv3tJiW0bN910U6a3jRdffFGFQkGvv/66OnXqpClTpmjZsmWNh8k316VLF82YMUOnnHKKOnXqpB49ekTOaQYAAEC2WJrXSmxQKBR8R6+LmJTWNKirV69OdTCf+++/X9dcc43mz5+fiTx5lcW6N982AAAAgPZgZnXuXii3HIf4JmB7Rm9NQtby5AV1BwAAAOKxB7VCrdmD2nBIalZkLU9eUHfscrF7AAAgAElEQVQAAADkFXtQAQAAAAAdCg0qAAAAACATaFAT0HxE1rRlLU9eUHcAAAAgHuegVqitLjMDAAAAAHnDOagZYmZpR4jIWp68oO4AAABAPBpUAAAAAEAm0KACAAAAADKBBjUBI0aMSDtCRNby5AV1BwAAAOLRoCZg3rx5aUeIyFqevKDuAAAAQDwa1ASMHDky7QgRWcuTF9QdAAAAiEeDmoD58+enHSEia3nygroDAAAA8WhQsQ0z05lnntn4eOvWrerZs+d2n0M5bNgwNVzf9sQTT9Srr77apjkl6fnnn9dnP/tZ9e3bV4cffrjq6+slSWeffbYOPPBAVVdXq7q6WosXL27z1wYAAADQtrqkHQDZ8/73v19PPvmkNm/erF133VV33323+vTp06p13nHHHW2ULuorX/mKxo8fr+OOO04bN25Up05N37lcffXV+uIXv9gurwsAAACg7bEHNQHunnaEiEryfO5zn9OCBQskSbNnz9bpp5/eOO/NN9/UOeecoyFDhmjQoEG6/fbbJUmbN2/W6NGjNXDgQJ122mnavHlz43Oqqqr08ssvS5JOOukk1dTUqF+/fpo+fXrjMt27d9f48eN1xBFHaOjQoVq7dm1sxmXLlmnr1q067rjjGp+/2267VViF5GVtOwAAAACyhgY1AcVNWBZUkmf06NG6+eabtWXLFi1dulQf//jHG+f96Ec/0mc+8xk9/vjjuu+++3TJJZfozTff1PXXX6/ddttNS5cu1fjx41VXV1dy3TfeeKPq6upUW1urqVOnav369ZKCxnfo0KFasmSJjjnmGM2YMUOSNHfuXF166aXbrOdf//qX9thjD33hC1/QoEGDdMkll+jdd99tnD9+/HgNHDhQF154od56663tqlF7yNp2AAAAAGQNDWoCzj333LQjRFSSZ+DAgaqvr9fs2bN14oknRubdddddmjx5sqqrqzVs2DBt2bJFzz//vB544AGdccYZjc8fOHBgyXVPnTq1cS/pCy+8oKeeekqS1K1bt8bzXGtqahrPJx01apQuv/zybdazdetWPfjgg7rmmmv0+OOP65lnntHMmTMlST/5yU+0fPlyPf7449qwYYOuuuqqimrTnrK2HQAAAABZQ4OKFo0aNUoXX3xx5PBeKThU9dZbb9XixYu1ePFiPf/88+rbt6+kYIClOPfff7/uuecePfLII1qyZIkGDRqkLVu2SJK6du3a+PzOnTtr69atsevab7/9NGjQIH3kIx9Rly5ddNJJJ2nRokWSpF69esnMtMsuu+irX/2qHnvssR2qAQAAAIDk0KCiReecc44uvfRSDRgwIDL9+OOP189//vPGcyqfeOIJSdIxxxyj3/3ud5KkJ598UkuXLt1mna+99pp69Oih3XbbTcuXL9ejjz66w/mGDBmiV155RevWrZMk/eUvf9Hhhx8uSVqzZo2koJmeM2eO+vfvv8OvAwAAACAZNKgJmDt3btoRIirNs99+++k73/nONtMnTJigd955RwMHDlT//v01YcIESdJ5552njRs3auDAgfrpT3+qj33sY9s894QTTtDWrVs1cOBATZgwQUOHDq0ob6lzUDt37qxrrrlGxx57rAYMGCB315gxYyRJX/7ylzVgwAANGDBAL7/8sn74wx9W9J7bU9a2AwAAACBrLAsjixYKBW+4XmZWVY1bEDu/fvLwFuetXr1avXv3butIOyxrefKCugMAACCvzKzO3QvllmMPagJaew3Rtpa1PHlB3QEAAIB4NKgAAAAAgEygQQUAAAAAZAINagIaBu7JiqzlyQvqDgAAAMRjkKQKtWaQJAAAAADIMwZJypCampq0I0RkLU9eUHcAAAAgHg1qAhYtWpR2hIis5ckL6g4AAADEo0EFAAAAAGQCDWoCevXqlXaEiKzlyQvqDgAAAMSjQU3A6tWr044QkbU8eUHdAQAAgHg0qAmYNGlS2hEispYnL6g7AAAAEI/LzFSoNZeZMTNloc4NspYnL6g7AAAA8orLzAAAAAAAOhQaVAAAAABAJtCgJiBrhy9nLU9eUHcAAAAgHg0qAAAAACATaFATUCiU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\n", "text/plain": [ - "
" + "" ] }, "metadata": { @@ -223,9 +227,9 @@ "outputs": [ { "data": { - "image/png": "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ghdKel7S3fGszwAAJCYTs+/uvPPO3q1bt7S7scEWLVqkjh07bvYx84g8AQAAAOlrbGx8z91L/mGeiZHSbt26qaGhIe1uAAAAAAA2ATN7q6V1zL6bgDFjxnwhYuYReQIAAACyLROn7xYKBc/zSKmZKXQe04iZR+QJAAAASJ+ZNbp7odQ6RkoBAAAAAKmhKAUAAAAApIaiNAFpnHqc59OdQyJPAAAAQLZRlAIAAAAAUsNERwlgoqPsIk8AAABA+pjoCAAAAACQSRSlAAAAAIDUUJQmYPTo0V+ImHlEngAAAIBs45pSAAAAAMAmxTWlm1iXLl2+EDHziDwBAAAA2UZRmoAFCxZo7ty5+trXvqZ9991XvXr10nXXXbd6/ZgxY1RTU6Pa2lrV1tbqoYcekiQ988wz6t27twqFgt58801J0pIlS/SNb3xDn3/+ecWYm8oDDzygV155ZfXrSy65RI8++qgkqX///ht1788nn3xStbW16tWrl7761a9udF8raSlPr7/++urPo7a2Vtttt52uvfZaSZvm89qUNtXn9eGHH2rIkCE64IAD1KtXL91+++2r102YMEE9evRQjx49NGHChI17AwAAAPhCa5N2BzYXbdq00TXXXKM+ffpo6dKl6tu3r4466ijtu+++kqTvf//7+uEPf7jWNtdcc40eeughzZkzR7/+9a91zTXX6PLLL9dPfvITtWqV3vcFDzzwgAYPHry675deemki+12yZIm++93vaurUqdp999317rvvJrLfDbHPPvtoxowZkqTPPvtMNTU1Ou6441av5/OSbrrpJu27776aPHmyFi1apH322Uff/va3tWzZMo0dO1YNDQ0yM/Xt21dDhw7VjjvumEhcAAAAfLEwUpqAPn36qHPnzurTp48kadttt1XPnj01b968stttscUWWrFihVasWKEttthCs2fP1ty5c9W/f/8Wt5k6daq+/OUva+utt9Y555yjwYMHS4pG966++urV7fbbbz/NmTNHknTssceqb9++6tWrl+rr61e3ad++vS666CIdcMAB6tevnxYuXKg//vGPmjRpki644ALV1tZq9uzZGj58uO699951+vLwww/r0EMPVZ8+fXTSSSdp2bJlZd/vnXfeqeOPP1677767JGmXXXYp2z4JTZ9JOY899pi6d++uPfbYo2y7jfm8+vTpk7vPy8y0dOlSubuWLVumDh06qE2bNpo2bZqOOuoodejQQTvuuKOOOuooTZ06tey+AAAAgJZQlCagsbFxrddz5szRiy++qEMOOWT1shtvvFG9e/fWGWecoQ8++ECS9OMf/1innXaa/vM//1Nnn322LrroIl1++eUtxvnkk080YsQITZ48WcuXL9c777xTVf9uu+02NTY2qqGhQddff70WL14sSVq+fLn69eunmTNn6ogjjtC4ceP0la98RUOHDtXPf/5zzZgxQ927dy+5z/fee0+XX365Hn30UU2fPl2FQkG/+MUvJEWnj06aNGmdbd544w198MEH6t+/v/r27auJEydW1f+N0fyzKeXuu+/WySefvNaypD+vxsbG3H1eZ599tl599VV16dJF+++/v6677jq1atVK8+bN02677ba6XdeuXSt+AQMAAAC0hKI0AXV1daufL1u2TCeccIKuvfZabbfddpKk73znO5o9e7ZmzJihzp076wc/+IEkqba2Vs8995yeeOIJ/fWvf1Xnzp3l7vrWt76lU045RQsXLlwrzmuvvaY999xTPXr00MiRI3XKKadU1b/rr79+9eja3LlzV18P2bZt29Ujd3379l09UleN5557Tq+88ooOO+ww1dbWasKECXrrrbckRaePDh06dJ1tVq1apcbGRj344IOaNm2aLrvsMr3xxhtVx9wQxZ9NKStXrtSkSZN00kknrV62KT4vM8vd5zVt2jTV1tZq/vz5mjFjhs4++2x99NFHVccEAAAAqkFRmoBx48ZJkv7xj3/ohBNO0Le//W0df/zxq9d36tRJrVu3VqtWrTRixAi98MILa23v7rr88st18cUXa+zYsfrZz36mESNG6Prrr68Ys0mbNm3Wmmznk08+kRRNLPToo4/q2Wef1cyZM3XggQeuXrfFFlvIzCRJrVu31qpVq6p+z+6uo446SjNmzNCMGTP0yiuv6NZbby27TdeuXTVgwABts8022nnnnXXEEUdo5syZVcfcEM3z1Nzvfvc79enTR506dVq9bFN8Xs3l4fO6/fbbdfzxx8vMtNdee2nPPffUa6+9ppqaGs2dO3d1u7fffls1NTVV9wUAAAAoRlGaEHfXmWeeqZ49e+r8889fa13xDLD333+/9ttvv7XWT5w4UYMGDVKHDh20YsUKtWrVSq1atdKKFSvWavflL39Zc+bM0ezZsyVJd9111+p13bp10/Tp0yVJ06dP19/+9jdJ0QyqO+64o9q1a6fXXntNzz33XMX3su2222rp0qVl2/Tr10/PPPOMZs2aJSk6tbTSqOcxxxyjp59+WqtWrdKKFSv0/PPPq2fPnhX7synddddd65y6y+cV2X333fXYY49JkhYuXKjXX39dX/rSlzRgwAA9/PDD+uCDD/TBBx/o4Ycf1oABAyr2EwAAACiF2Xer1G3Ug2XXP/PMM/rv//5v7b///qqtrZUk/fSnP9WgQYP0ox/9SDNmzJCZqVu3brrllltWb7dixQqNHz9eDz/8sCTp/PPP16BBg9S2bVvdeeeda8XYaqutVF9fr6OPPlpSNFFQUzFywgknaOLEierVq5cOOeQQ7b333pKkgQMH6te//rV69uypffbZR/369av4XocNG7Z65K/UhDmS1LFjR40fP14nn3yyPv30U0nS5Zdfrr333luXXHKJCoXCOqeE9uzZUwMHDlTv3r3VqlUr/fu///s6BV9Iy5cv1yOPPLLW5yFpk3xe7dq10+GHH56rz+viiy/W8OHDtf/++8vdddVVV2nnnXdeve6ggw6SFF2T2qFDh4r9BAAAAEoxd0+7DyoUCr4x974MoVxRumrpYr1902kBeyPNnz9fb7zxhq6++mpNmTIlaOw8mT9/vrp06ZJ2NyRFp+byeQEAAOCLyMwa3b1Qah2n7yZg5cJZwWNWM6ssyBMAAACQdYyUVqncSOlbVw1W6DyaWfCYeUSeAAAAgPQxUgoAAAAAyCSKUgAAAABAaihKE9BhwNnBYzafMRalkScAAAAg2yhKE7Bt7cDgMevq6oLHzCPyBAAAAGQbRWkC3rpqcPCYZhY8Zh6RJwAAACDbKEoBAAAAAKmhKAUAAAAApIaiNAFbdz8oeMzBg8OfMpxH5AkAAADINorSBOxy4ujgMSdPnhw8Zh6RJwAAACDbKEoT8O69Y4PHHDJkSPCYeUSeAAAAgGyjKE3Ax7P/FDzmlClTgsfMI/IEAAAAZBtF6WbEzHTKKaesfr1q1Sp17Nhxva+r7N+/vxoaGiRJgwYN0pIlSxLt54wZM3TooYeqV69e6t27t37zm9+sXnf44YertrZWtbW16tKli4499thEYwMAAADIljZpdwDJ2WabbfTyyy/r448/1tZbb61HHnlENTU1G7XPhx56KKHerdGuXTtNnDhRPXr00Pz589W3b18NGDBAO+ywg/7whz+sbnfCCSfomGOOSTw+AAAAgOxgpDQBe1wY/hRRdy+5fNCgQXrwwQclSXfddZdOPvnk1euWL1+uM844QwcffLAOPPBA/fa3v5Ukffzxxxo2bJh69uyp4447Th9//PHqbbp166b33ntPknTssceqb9++6tWrl+rr61e3ad++vS666CIdcMAB6tevnxYuXFi273vvvbd69OghSerSpYt22WUXLVq0aK02H330kR5//PGNHiltKU8AAAAAsqHqotTMWpvZi2Y2JX69p5k9b2azzOw3ZtY2Xr5l/HpWvABhjiIAACAASURBVL7bpul6diydMTV4zOKisNiwYcN0991365NPPtFLL72kQw45ZPW6K664QkceeaReeOEFPfHEE7rgggu0fPly3XzzzWrXrp1effVVjR07Vo2NjSX3fdttt6mxsVENDQ26/vrrtXjxYklRsduvXz/NnDlTRxxxhMaNGydJmjRpki655JKy7+OFF17QypUr1b1797WWP/DAA/r617+u7bbbruqclNJSngAAAABkw/qMlJ4r6dWi11dJ+qW77yXpA0lnxsvPlPRBvPyXcbvN2vvTbgwec+TIkSWX9+7dW3PmzNFdd92lQYMGrbXu4Ycf1pVXXqna2lr1799fn3zyif7+97/rqaeeWn0tau/evdW7d++S+77++utXj4bOnTtXb775piSpbdu2q69b7du3r+bMmSNJGjp0qC699NIW38OCBQt06qmn6vbbb1erVmsfis1HeTdUS3kCAAAAkA1VXVNqZl0lHS3pCknnm5lJOlLSv8ZNJkgaI+lmScfEzyXpXkk3mpk551EGM3ToUP3whz/Uk08+uXo0U4pOZb3vvvu0zz77rPc+n3zyST366KN69tln1a5du9VFrSRtscUWig4JqXXr1lq1alXF/X300Uc6+uijdcUVV6hfv35rrXvvvff0wgsv6P7771/vfgIAAADIl2pHSq+V9CNJn8evd5K0xN2bqo+3JTXNqFMjaa4kxes/jNsjkDPOOEOjR4/W/vvvv9byAQMG6IYbblh9neWLL74oSTriiCN05513SpJefvllvfTSS+vs88MPP9SOO+6odu3a6bXXXtNzzz23wf1buXKljjvuOJ122mk68cQT11l/7733avDgwdpqq602OAYAAACAfKhYlJrZYEnv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3mhKR2D1694z8Zhbt26deMwhMk8AADDdDus7gZXg8DXPGHuMky665lHHDz9wb975nd+N7bjs7LHnMETPe97z+k4BAABYhJXSEdj5sU0zEXOI1q5d23cKAADAIjSlAAAA9EZTCgAAQG80pSNwxClnzUTMIXrb297WdwoAAMAiNKUjcMyGd85EzCHavHlz3ykAAACL0JSOwK7PXDgTMYfI3XcBAGC6aUpH4KHdt85EzCG68cYb+04BAABYhKYUAACA3hzWdwIrwaojjl4RMU+66JpF399x2dkjjzluxx57bN8pAAAAi7BSOgLrzv/sTMQcol/+8pd9pwAAACxCUzoC9337czMRc4guueSSvlMAAAAWoSkdgfu/c+VMxByiSy+9tO8UAACARWhKAQAA6I2mFAAAgN5oSkfgqZs+OBMxh2jbtm19pwAAACzCI2FmxMEe9wIAANAHK6UjcOeWd81EzCFav3593ykAAACL0JQCAADQG9t3VwjbcwEAgCFaVlNaVTuSPJDkt0kebq2tr6qjk3whyUlJdiR5fWvt3uWlOd2e9OI3zkTMIbr44ov7TgEAAFjEKLbvvqy1dmprbe/Fexclub61dnKS67vjFe2oM940EzGH6JJLLuk7BQAAYBHjuKb03CRbutdbkrx2DDGmyh0fffNMxByi4447ru8UAACARSy3KW1Jvl5V26tqrhtb01rb1b2+M8maZcaYer998J6ZiDlEu3btOvhJAABAb5Z7o6MzWms7q+opSb5RVT9d+GZrrVVV298f7JrYuSQ54YQTlpkGAAAAQ7SsldLW2s7u+54kX07ygiS7q+rYJOm+7znAn93cWlvfWlu/evXq5aTRu8PXPH0mYg7Raaed1ncKAADAIh5zU1pVT6yqI/e+TvKqJD9MsjXJpu60TUm+stwkp92xf/GhmYg5RNu3b+87BQAAYBHLWSldk+TbVXVzku8luaa1dm2Sy5K8sqp+nuQV3fGKdve1H56JmEM0Nzd38JMAAIDePOamtLV2W2vtlO7rOa2193Xjd7fWzmytndxae0VrbcXfkefBm6+biZhDdMUVV/SdAgAAsIhxPBIGAAAAlmS5d99lhpx00TWLvr/jsrMnlAkAALBSWCkdgbXv2DITMYdo586dfacAAAAsQlM6Ag/tvmUmYg6Ru+8CAMB005SOwF1feu9MxByic845p+8U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\n", + "image/png": "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DVQyI+6eSu73uU7SMklPS7oznT0aAIBtoixm8d1zzz29R48eLd2NLbZ8+XJ16tRpu48ZI/IEAAAAtLy6urp33L3oH+ZlMYLao0cP1dbWtnQ3AAAAAADbgJm9WUo7ZvHNwNixYz8TMWNEngAAAIB4lMUpvlVVVR7zCKqZKXQeWyJmjMgTAAAA0PLMrM7dq4q1YwQVAAAAAFAWKFABAAAAAGWBAjUDLXF6csynRIdEngAAAIB4UKACAAAAAMoCkyRlgEmSyhd5AgAAAFoekyQBAAAAAKJCgQoAAAAAKAsUqBkYM2bMZyJmjMgTAAAAEA+uQQUAAAAAbFNcgxpQ165dPxMxY0SeAAAAgHhQoGagvr5eixYt0te+9jUdfPDB6t27t6677roN68eOHatu3bqpoqJCFRUVuu+++yRJTzzxhPr06aMjjjhC8+fPlyStXLlSAwYMKDrzbH19/TZ7P3/4wx/04osvbnh92WWX6cEHH5Qk9e/ff6vuLTp79mxVVFSod+/e+upXv7rVfS2muTy98sorGz6PiooK7brrrho/frykbfN5bUvb6vN6//33NXjwYB122GHq3bu3brvttg3rJk+erF69eqlXr16aPHny1r0BAAAAINWmpTuwvWjTpo2uvfZa9e3bV6tWrVJlZaWOO+44feELX5Ak/fCHP9SPf/zjjba59tprdc8992jhwoW66aabdO211+qKK67Qz3/+c5lZS7wNSUnBM2jQoA19v/zyyzPZ78qVK3Xeeedp5syZ2nffffX2229nst8tcdBBB2nu3LmSpE8++UTdunXTySefvGE9n5d044036gtf+IKmTZum5cuX66CDDtK3v/1trV69WuPGjVNtba3MTJWVlRoyZIg6dOiQSVwAAAB8djGCmoG+ffuqS5cu6tu3ryRpl1120cEHH6wlS5YU3K5t27Zau3at1qxZo7Zt22rBggVasmRJwZHFmTNn6vOf/7x23nln/eAHP9CgQYMkJaN+11xzzYZ2hxxyiBYuXChJOumkk1RZWanevXurpqZmQ5v27dvr0ksv1WGHHaZ+/fpp2bJl+stf/qKpU6fqJz/5iSoqKrRgwQINHz5cd9999yZ9uf/++3XUUUepb9++Ou2007R69eqC7/d///d/dcopp2jfffeVJO21114F22eh4TMp5KGHHlLPnj213377FWy3NZ/Xl7/85eg+LzPTqlWr5O5avXq1OnbsqDZt2mjWrFk67rjj1LFjR3Xo0EHHHXecZs6cWXBfAAAAQCkoUDNQV1e30euFCxfqueee0xe/+MUNy2644Qb16dNH55xzjt577z1J0s9+9jNVV1dr/PjxGjVqlC699FJdccUVzcb56KOPNGLECE2bNk2rVq3SW2+9VVL/br31VtXV1am2tlYTJkzQihUrJEkffvih+vXrp3nz5umYY47RxIkT9aUvfUlDhgzRr371K82dO1c9e/bMu8933nlHV155pR588EHNmTNHVVVV+s///E9JySmmU6dO3WSbV199Ve+995769++vyspKTZkypaT+b42mn00+d955p04//fSNlmX9eT322GPRfV6jRo3SSy+9pK5du+rQQw/Vddddp1atWmnJkiXaZ599NrTr3r170S9jAAAAgFJQoGagurp6w/PVq1dr6NChGj9+vHbddVdJ0ve+9z0tWLBAc+fOVZcuXfSjH/1IklRRUaGnnnpKjzzyiF5//XV17dpV7q5vfetbOuOMM7Rs2bKN4rz88svaf//91atXL40cOVJnnHFGSf2bMGHChlG3RYsW6bXXXpMktWvXbsOIXmVl5YYRvFI89dRTevHFF3X00UeroqJCkydP1ptvvikpOcV0yJAhm2yzfv161dXVacaMGZo1a5auuOIKvfrqqyXH3BK5n00+69at09SpU3XaaadtWLYtPi8zi+7zmjVrlioqKrR06VLNnTtXo0aN0gcffJD3etuWPMUZAAAA2w8K1AxMnDhRkvSPf/xDQ4cO1be//W2dcsopG9Z37txZrVu3VqtWrTRixAg988wzG23v7rryyis1evRojRs3TuPGjdMZZ5yhCRMmbBKroRBoiNmgTZs2+vTTTze8/uijjyQlkxI9+OCDevLJJzVv3jwdfvjhG9a1bdt2w/5at26t9evXl/ye3V3HHXec5s6dq7lz5+rFF1/ULbfcUnCb7t27a+DAgdp5552155576phjjtG8efNKjrklmuapqT/96U/q27evOnfuvGHZtvi8morh87rtttt0yimnyMx0wAEHaP/999fLL7+s7t27a9GiRRvaLV68mNmSAQAAkAkK1Iy4u84991wdfPDBuuiiizZalzuT7L333qtDDjlko/WTJ0/WCSecoA4dOmjNmjVq1aqVWrVqpTVr1mzU7vOf/7zeeOMNLViwQJJ0xx13bFjXo0cPzZkzR5I0Z84cvfHGG5KSmVg7dOignXbaSS+//LKeeuqpou9ll1120apVqwq26devn5544okNs9muWbOm6GjoiSeeqMcee0zr16/XmjVr9PTTT+vggw8u2p9t6Y477tjk9F4+r8S+++6rhx56SJK0bNkyvfLKK/qnf/onDRgwQPfff7/ee+89vffee7r//vs1YMCAov0EAAAAimEW3xL1uGRGwfVPPPGEfvvb3+rQQw9VRUWFJOmXv/yljj/+eP30pz/V3LlzZWbq0aOHbr755g3brVmzRpMnT9b9998vSbrooos0dOhQtWvXbqOCRpJ22GEH1dTU6IQTTpAk7bfffnrhhRckSUOHDtWUKVNUUVGhI444QgceeKAkaeDAgfqv//ov9enTRwcddJD69etX9L0OGzZMI0aM0IQJE/JOtiNJnTp10qRJk3T66afr448/liRdeeWVOvDAA3XZZZepqqpqk9NGDz74YA0cOFB9+vRRq1at9G//9m+bFH8hrVmzRg888MBGn4ekbfJ57bnnnvryl78c1ec1evRoDR8+XIceeqjcXVdffbX23HPPDeuOOOIISck1rB07dizaTwAAAKAYa8n7Nzaoqqryrbm3ZgiFCtT1q1Zo8Y1nBeyNtHTpUr366qu65pprNH369KCxY7J06dKyOf109uzZfF4AAAD4TDKzOnevKtaOU3wzsG7Z/OAxS5mdFuQJAAAAiAkjqCUqNIL65tWD8s5sui2ZWfCYMSJPAAAAQMtjBBUAAAAAEBUKVAAAAABAWaBAzUDHAaOCx2w68yzyI08AAABAPChQM7BLxcDgMaurq4PHjBF5AgAAAOJBgZqBN68eFDymmQWPGSPyBAAAAMSDAhUAAAAAUBYoUAEAAAAAZYECNQM79jwieMxBg8KfVhwj8gQAAADEgwI1A3udOiZ4zGnTpgWPGSPyBAAAAMSDAjUDb989LnjMwYMHB48ZI/IEAAAAxIMCNQNrFzwbPOb06dODx4wReQIAAADiQYG6HTEznXnmmRter1+/Xp06ddrs6zD79++v2tpaSdLxxx+vlStXZtrPuXPn6qijjlLv3r3Vp08f/e53v9uw7itf+YoqKipUUVGhrl276qSTTso0NgAAAIDy1aalO4Ds7LzzznrhhRe0du1a7bjjjnrggQfUrVu3rdrnfffdl1HvGu20006aMmWKevXqpaVLl6qyslIDBgzQ7rvvrscee2xDu6FDh+rEE0/MPD4AAACA8sQIagb2uzj8aaTunnf5N77xDc2YMUOSdMcdd+j000/fsO7DDz/UOeecoyOOOEKHH364/vjHP0qS1q5dq2HDhqlPnz761re+pbVr127YpkePHnrnnXckSSeddJIqKyvVu3dv1dTUbGjTvn17XXrppTrssMPUr18/LVu2rGDfDzzwQPXq1UuS1LVrV+21115avnz5Rm1WrVqlhx9+eKtHUJvLEwAAAIDyU3KBamatzew5M5uevt7ZeJBfAAAgAElEQVTfzJ42s9fM7Hdm1i5d/rn09fx0fY9t0/XysWruzOAxcwvEXMOGDdOdd96pjz76SM8//7y++MUvblj3i1/8Qscee6yeffZZPfLII/rJT36iDz/8UDfddJN22mknPf/887r00ktVV1eXd9+33nqr6urqVFtbqwkTJmjFihWSksK3X79+mjdvno455hhNnDhRkjR16lRddtllBd/HM888o3Xr1qlnz54bLb/33nv19a9/XbvuumvJOcmnuTwBAAAAKD+bM4J6gaSXcl5fLenX7t5L0nuSzk2XnyvpPXc/QNKv03bbtXdn3RA85siRI/Mu79OnjxYuXKg77rhDxx9//Ebr7r//fl111VWqqKhQ//799dFHH+nvf/+7Hn30UZ1xxhkbtu/Tp0/efU+YMGHDKOmiRYv02muvSZLatWu34TrXyspKLVy4UJI0ZMgQXX755c2+h/r6ep155pm67bbb1KrVxodi09HfLdVcngAAAACUn5KuQTWz7pJOkPQLSReZmUk6VtK/pk0mSxor6SZJJ6bPJeluSTeYmTnnWgYzZMgQ/fjHP9bs2bM3jHJKyemu99xzjw466KBNtkk+0ubNnj1bDz74oJ588knttNNOGwpcSWrbtu2G7Vu3bq3169cX7eMHH3ygE044QVdeeaX69eu30boVK1bomWee0b333lt0PwAAAAC2H6WOoI6X9FNJn6av95C00t0bKpHFkhpm4+kmaZEkpevfT9sjkHPOOUeXXXaZDj300I2WDxgwQNdff/2G6zKfe+45SdIxxxyj22+/XZL0wgsv6Pnnn99kn++//746dOignXbaSS+//LKeeuqpLe7funXrdPLJJ+uss87Saaedtsn6//u//9OgQYO0ww47bHEMAAAAAPEpWqCa2SBJb7t77oWJ+YbbvIR1ufutNrNaM6ttOkFObDoNHR085tSpU5td1717d11wwQWbLB89erT+8Y9/qE+fPjrkkEM0enTS7+9973tavXq1+vTpo//4j//QkUceucm2AwcO1Pr169WnTx+NHj16k1HP5vqY7xrUu+66S48++qgmTZq04ZYyc+fO3bD+zjvvzOT03oY+AAAAAIiDFTvz1sz+XdKZktZL2kHSrpLulTRA0t7uvt7MjpI01t0HmNms9PmTZtZG0luSOhU6xbeqqsob7rtZrnpcMqPZdetXrdDiG88K2Btp6dKl6tq1a9CYMSJPAAAAQMszszp3ryrWrugIqrv/zN27u3sPScMkPezu35b0iKRT02ZnS/pj+nxq+lrp+oe39+tPl/zm7OKNMra19zf9rCBPAAAAQDy25j6oFyuZMGm+kmtMb0mX3yJpj3T5RZIu2bouAgAAAAA+C0qaxbeBu8+WNDt9/rqkTS5WdPePJG068w0AAAAAAAVszQgqUu0PGxA85ogRI4LHjBF5AgAAAOJBgZqBPQZ+P3jMmpqa4DFjRJ4AAACAeFCgZqB+0qa3dNnWKisrg8eMEXkCAAAA4kGBmoF1yxYEjzlnzpzgMWNEngAAAIB4UKACAAAAAMoCBWoGWrfvGDxmly5dgseMEXkCAAAA4kGBmoHu508JHnPp0qXBY8aIPAEAAADxoEDNwMrHbw8ec+zYscFjxog8AQAAAPEwd2/pPqiqqspra2tbuhsF9bhkRrPr3rx6kELn0cyCx4wReQIAAABanpnVuXtVsXaMoAIAAAAAygIFKgAAAACgLFCgZmDvs8cHj1nup0SXC/IEAAAAxIMCFQAAAABQFihQM/DW5AuDx6yqKnp9MUSeAAAAgJhQoAIAAAAAygIFKgAAAACgLFCgZmC3o08PHnPMmDHBY8aIPAEAAADxMHdv6T6oqqrKy3221R6XzCi4fuFVJwTqCQAAAADExczq3L3oBDGMoGZg8Y1nBY/ZtWvX4DFjRJ4AAACAeFCgZuCT1e8Gj1lfXx88ZozIEwAAABAPClQAAAAAQFmgQM1Au849g8fs27dv8JgxIk8AAABAPChQM9Bl+HXBY9bV1QWPGSPyBAAAAMSDAjUDK2ZeHzxmdXV18JgxIk8AAABAPChQM7B63qzgMSdOnBg8ZozIEwAAABAPClQAAAAAQFmgQAUAAAAAlAUK1Ax0O29y8JhLliwJHjNG5AkAAACIBwVqBtYtmx88JrPTloY8AQAAAPGgQM3A8nuuCB5zyJAhwWPGiDwBAAAA8aBABQAAAACUBQpUAAAAAEBZoEDNQMcBo4LHvPnmm4PHjBF5AgAAAOJBgZqBXSoGBo9ZXV0dPGaMyBMAAAAQDwrUDLx59aDgMc0seMwYkScAAAAgHhSoAAAAAICyQIEKAAAAACgLFKgZ2LHnEcFjDhoU/rTiGJEnAAAAIB4UqBnY69QxwWNOmzYteMwYkScAAAAgHhSoGXj77nHBYw4ePDh4zBiRJwAAACAeRQtUM9vBzJ4xs3lm9jczG5cun2Rmb5jZ3PRRkS43M5tgZvPN7Hkz67ut30RLW7vg2eAxp0+fHjxmjMgTAAAAEI82JbT5WNKx7r7azNpKetzM/pSu+4m7392k/Tck9UofX5R0U/oTAAAAAIBmFR1B9cTq9GXb9OEFNjlR0pR0u6ck7W5mXba+qwAAAACA7VlJ16CaWWszmyvpbUkPuPvT6apfpKfx/trMPpcu6yZpUc7mi9Nl2639Lg5/Gql7oe8I0IA8AQAAAPEoqUB190/cvUJSd0lHmtkhkn4m6fOSjpDUUdLFaXPLt4umC8ys2sxqzax2+fLlW9T5crFq7szgMWtqaoLHjBF5AgAAAOKxWbP4uvtKSbMlDXT3+vQ03o8l3SbpyLTZYkn75GzWXdLSPPuqcfcqd6/q1KnTFnW+XLw764bgMUeOHBk8ZozIEwAAABCPUmbx7WRmu6fPd5T0z5Jebriu1MxM0kmSXkg3mSrprHQ2336S3nf3+m3SewAAAADAdqOUWXy7SJpsZq2VFLR3uft0M3vYzDopOaV3rqTvpu3vk3S8pPmS1kj6TvbdBgAAAABsb4oWqO7+vKTD8yw/tpn2Lun8re9aPDoNHR085tSpU4PHjBF5AgAAAOKxWdegIr92nQ8IHrOysjJ4zBiRJwAAACAeFKgZWPKbs4PH7NZtu75zT2bIEwAAABAPClQAAAAAQFmgQAUAAAAAlAUK1Ay0P2xA8JgjRowIHjNG5AkAAACIBwVqBvYY+P3gMWtqaoLHjBF5AgAAAOJBgZqB+kkXBI/J7LSlIU8AAABAPChQM7Bu2YLgMefMmRM8ZozIEwAAABAPClQAAAAAQFmgQM1A6/Ydg8fs0qVL8JgxIk8AAABAPChQM9D9/CnBYy5dujR4zBiRJwAAACAeFKgZWPn47cFjjh07NnjMGJEnAAAAIB7m7i3dB1VVVXltbW1Ld6OgHpfMaHbdm1cPUug8mlnwmDEiTwAAAEDLM7M6d68q1o4RVAAAAABAWaBABQAAAACUBQrUDOx99vjgMcv9lOhyQZ4AAACAeFCgAgAAAADKAgVqBt6afGHwmFVVRa8vhsgTAAAAEBMKVAAAAABAWaBABQAAAACUBQrUDOx29OnBY44ZMyZ4zBiRJwAAACAe5u4t3QdVVVV5uc+22uOSGQXXL7zqhEA9AQAAAIC4mFmduxedIIYR1AwsvvGs4DG7du0aPGaMyBMAAAAQDwrUDHyy+t3gMevr64PHjBF5AgAAAOJBgQoAAAAAKAsUqBlo17ln8Jh9+/YNHjNG5AkAAACIBwVqBroMvy54zLq6uuAxY0SeAAAAgHhQoGZgxczrg8esrq4OHjNG5AkAAACIBwVqBlbPmxU85sSJE4PHjBF5AgAAAOJBgQoAAAAAKAsUqAAAAACAskCBmoFu500OHnPJkiXBY8aIPAEAAADxoEDNwLpl84PHZHba0pAnAAAAIB4UqBlYfs8VwWMOGTIkeMwYkScAAAAgHhSoAAAAAICyQIEKAAAAACgLFKgZ6DhgVPCYN998c/CYMSJPAAAAQDwoUDOwS8XA4DGrq6uDx4wReQIAAADiQYGagTevHhQ8ppkFjxkj8gQAAADEgwIVAAAAAFAWihaoZraDmT1jZvPM7G9mNi5dvr+ZPW1mr5nZ78ysXbr8c+nr+en6Htv2LQAAAAAAtgeljKB+LOlYdz9MUoWkgWbWT9LVkn7t7r0kvSfp3LT9uZLec/cDJP06bbdd27HnEcFjDhoU/rTiGJEnAAAAIB5FC1RPrE5ftk0fLulYSXenyydLOil9fmL6Wun6r9t2fiHgXqeOCR5z2rRpwWPGiDwBAAAA8SjpGlQza21mcyW9LekBSQskrXT39WmTxZK6pc+7SVokSen69yXtkWWny83bd48LHnPw4MHBY8aIPAEAAADxKKlAdfdP3L1CUndJR0o6OF+z9Ge+0VJvusDMqs2s1sxqly9fXmp/y9LaBc8Gjzl9+vTgMWNEngAAAIB4bNYsvu6+UtJsSf0k7W5mbdJV3SUtTZ8vlrSPJKXrd5P0bp591bh7lbtXderUact6DwAAAADYbpQyi28nM9s9fb6jpH+W9JKkRySdmjY7W9If0+dT09dK1z/s7puMoAIAAAAAkKtN8SbqImmymbVWUtDe5e7TzexFSXea2ZWSnpN0S9r+Fkm/NbP5SkZOh22DfpeV/S4OfxopNX9pyBMAAAAQj1Jm8X3e3Q939z7ufoi7X54uf93dj3T3A9z9NHf/OF3+Ufr6gHT969v6TbS0VXNnBo9ZU1MTPGaMyBMAAAAQj826BhX5vTvrhuAxR44cGTxmjMgTAAAAEA8KVAAAAABAWaBABQAAAACUBQrUDHQaOjp4zKlTpwaPGSPyBAAAAMSDAjUD7TofEDxmZWVl8JgxIk8AAABAPChQM7DkN2cXb5Sxbt26BY8ZI/IEAAAAxIMCFQAAAABQFihQAQAAAABlgQI1A+0PGxA85ogRI4LHjBF5AgAAAOJBgZqBPQZ+P3jMmpqa4DFjRJ4AAACAeFCgZqB+0gXBYzI7bWnIEwAAABAPCtQMrFu2IHjMOXPmBI8ZI/IEAAAAxIMCFQAAAABQFihQM9C6fcfgMbt06RI8ZozIEwAAABAPCtQMdD9/SvCYS5cuDR4zRuQJAAAAiAcFagZWPn578Jhjx44NHjNG5AkAAACIh7l7S/dBVVVVXltb29LdKKjHJTOaXffm1YMUOo9mFjxmjMgTAAAA0PLMrM7dq4q1YwQVAAAAAFAWKFABAAAAAGWBAjUDe589PnjMcj8lulyQJwAAACAeFKgAAAAAgLJAgZqBtyZfGDxmVVXR64sh8gQAAADEhAIVAAAAAFAWKFABAAAAAGWBAjUDux19evCYY8aMCR4zRuQJAAAAiIe5e0v3QVVVVV7us632uGRGwfULrzohUE8AAAAAIC5mVufuRSeIYQQ1A4tvPCt4zK5duwaPGSPyBAAAAMSDAjUDn6x+N3jM+vr64DFjRJ4AAACAeFCgAgAAAADKAgVqBtp17hk8Zt++fYPHjBF5AgAAAOJBgZqBLsOvCx6zrq4ueMwYkScAAAAgHhSoGVgx8/rgMaurq4PHjBF5AgAAAOJBgZqB1fNmBY85ceLE4DFjRJ4AAACAeFCgAgAAAADKAgUqAAAAAKAsUKBmoNt5k4PHXLJkSfCYMSJPAAAAQDwoUDOwbtn84DGZnbY05AkAAACIBwVqBpbfc0XwmEOGDAkeM0bkCQAAAIgHBSoAAAAAoCxQoAIAAAAAykLRAtXM9jGzR8zsJTP7m5ldkC4fa2ZLzGxu+jg+Z5ufmdl8M3vFzAZsyzdQDjoOGBU85s033xw8ZozIEwAAABCPNiW0WS/pR+4+x8x2kVRnZg+k637t7tfkNjazL0gaJqm3pK6SHjSzA939kyw7Xk52qRgYPGZ1dXXwmDEiTwAAAEA8io6gunu9u89Jn6+S9JKkbgU2OVHSne7+sbu/IWm+pCOz6Gy5evPqQcFjmlnwmDEiTwAAAEA8NusaVDPrIelwSU+ni0aZ2fNmdquZdUiXdZO0KGezxSpc0AIAAAAAUHqBambtJd0j6UJ3/0DSTZJ6SqqQVC/p2oameTb3PPurNrNaM6tdvnz5ZnccAAAAALB9KalANbO2SorT293995Lk7svc/RN3/1TSRDWexrtY0j45m3eXtLTpPt29xt2r3L2qU6dOW/MeWtyOPY8IHnPQoPCnFceIPAEAAADxKGUWX5N0i6SX3P0/c5Z3yWl2sqQX0udTJQ0zs8+Z2f6Sekl6Jrsul5+9Th0TPOa0adOCx4wReQIAAADiUcoI6tGSzpR0bJNbyvyHmf3VzJ6X9DVJP5Qkd/+bpLskvShppqTzt+cZfCXp7bvHBY85ePDg4DFjRJ4AAACAeJj7JpeHBldVVeW1tbUt3Y2Celwyo9l1b149SKHzaGbBY8aIPAEAAAAtz8zq3L2qWLvNmsUXAAAAAIBthQIVAAAAAFAWKFAzsN/F04PH5LTV0pAnAAAAIB4UqBlYNXdm8Jg1NTXBY8aIPAEAAADxoEDNwLuzbggec+TIkcFjxog8AQAAAPGgQAUAAAAAlAUKVAAAAABAWaBAzUCnoaODx5w6dWrwmDEiTwAAAEA8KFAz0K7zAcFjVlZWBo8ZI/IEAAAAxIMCNQNLfnN28JjdunULHjNG5AkAAACIBwUqAAAAAKAsUKACAAAAAMoCBWoG2h82IHjMESNGBI8ZI/IEAAAAxIMCNQN7DPx+8Jg1NTXBY8aIPAEAAADxoEDNQP2kC4LHZHba0pAnAAAAIB4UqBlYt2xB8Jhz5swJHjNG5AkAAACIBwUqAAAAAKAsUKBmoHX7jsFjdunSJXjMGJEnAAAAIB4UqBnofv6U4DGXLl0aPGaMyBMAAAAQDwrUDKx8/PbgMceOHRs8ZozIEwAAABAPc/eW7oOqqqq8tra2pbtRUI9LZjS77s2rByl0Hs0seMwYkScAAACg5ZlZnbtXFWvHCCoAAAAAoCxQoAIAAAAAygIFagb2Pnt88Jjlfkp0uSBPAAAAQDwoUAEAAAAAZYECNQNvTb4weMyqqqLXF0PkCQAAAIgJBSoAAAAAoCxQoAIAAAAAygIFagZ2O/r04DHHjBkTPGaMyBMAAAAQD3P3lu6DqqqqvNxnW+1xyYyC6xdedUKgngAAAABAXMyszt2LThDDCGoGFt94VvCYXbt2DR4zRuQJAAAAiAcFagY+Wf1u8Jj19fXBY8aIPAEAAADxoEAFAAAAAJQFCtQMtOvcM3jMvn37Bo8ZI/IEAAAAxIMCNQNdhl8XPGZdXV3wmDEiTwAAAEA8KFAzsGLm9cFjVldXB48ZI/IEAAAAxIMCNQOr580KHnPixInBY8aIPAEAAADxoEAFAAAAAJQFClQAAAAAQFmgQM1At/MmB4+5ZMmS4DFjRJ4AAACAeBQtUM1sHzN7xMxeMrO/mdkF6fKOZvaAmb2W/uyQLjczm2Bm883seTPb7u/zsW7Z/OAxmZ22NOQJAAAAiEcpI6jrJf3I3Q+W1E/S+Wb2BUmXSHrI3XtJeih9LUnfkNQrfVRLuinzXpeZ5fdcETzmkCFDgseMEXkCAAAA4lG0QHX3enefkz5fJeklSd0knSip4dzWyZJOSp+fKGmKJ56StLuZdcm85wAAAACA7cpmXYNqZj0kHS7paUmd3b1eSopYSXulzbpJWpSz2eJ0GQAAAAAAzSq5QDWz9pLukXShu39QqGmeZZ5nf9VmVmtmtcuXLy+1G2Wp44BRwWPefPPNwWPGiDwBAAAA8SipQDWztkqK09vd/ffp4mUNp+6mP99Oly+WtE/O5t0lLW26T3evcfcqd6/q1KnTlva/LOxSMTB4zOrq6uAxY0SeAAAAgHiUMouvSbpF0kvu/p85q6ZKOjt9frakP+YsPyudzbefpPcbTgXeXr159aDgMZOPBcWQJwAAACAebUpoc7SkMyX91czmpst+LukqSXeZ2bmS/i7ptHTdfZKOlzRf0hpJ38m0xwAAAACA7VLRAtXdH1f+60ol6et52ruk87eyXwAAAACAz5jNmsUX+e3Y84jgMQcNCn9acYzIEwAAABAPCtQM7HXqmOAxp02bFjxmjMgTAAAAEA8K1Ay8ffe44DEHDx4cPGaMyBMAAAAQDwrUDKxd8GzwmNOnTw8eM0bkCQAAAIgHBSoAAAAAoCxQoAIAAAAAygIFagb2uzj8aaTJ3XxQDHkCAAAA4lH0PqgobtXcmepxSeE2C686IdOYNTU1qq6uznSf2yPyBAAAAMSDEdQMvDvrhuAxR44cGTxmjMgTAAAAEA8KVAAAAABAWaBABQAAAACUBQrUDHQaOjp4zKlTpwaPGSPyBAAAAMSDAjUD7TofEDxmZWVl8JgxIk8AAABAPChQM7DkN2cHj9mtW7fgMWNEngAAAIB4UKACAAAAAMoCBSoAAAAAoCxQoGag/WEDgsccMWJE8JgxIk8AAABAPChQM7DHwO8Hj1lTUxM8ZozIEwAAABAPCtQM1E+6IHhMZqctDXkCAAAA4kGBmoF1yxYEjzlnzpzgMWNEngAAAIB4UKACAAAAAMoCBWoGWrfvGDxmly5dgseMEXkCAAAA4kGBmoHu508JHnPp0qXBY8aIPAEAAADxoEDNwMrHbw8ec+zYscFjxog8AQAAAPGgQM3A+0/cETzmuHHjgseMEXkCAAAA4kGBCgAAAAAoCxSoAAAAAICyQIGagb3PHh88Zm1tbfCYMSJPAAAAQDwoUAEAAAAAZYECNQNvTb4weMyqqqrgMWNEngAAAIB4UKACAAAAAMoCBSoAAAAAoCxQoGZgt6NPDx5zzJgxwWPGiDwBAAAA8TB3b+k+qKqqyst9ttUel8zYqu0XXnVCRj0BAAAAgLiYWZ27F50ghhHUDCy+8azgMbt27Ro8ZozIEwAAABAPCtQMfLL63eAx6+vrg8eMEXkCAAAA4kGBCgAAAAAoCxSoGWjXuWfwmH379g0eM0bkCQAAAIgHBWoGugy/LnjMurq64DFjRJ4AAACAeFCgZmDFzOuDx6yurg4eM0bkCQAAAIhH0QLVzG41s7fN7IWcZWPNbImZzU0fx+es+5mZzTezV8xswLbqeDlZPW9W8JgTJ04MHjNG5AkAAACIRykjqJMkDcyz/NfuXpE+7pMkM/uCpGGSeqfb/MbMWmfVWQAAAADA9qtogeruj0oq9T4qJ0q6090/dvc3JM2XdORW9A8AAAAA8BmxNdegjjKz59NTgDuky7pJWpTTZnG6bLvW7bzJwWMuWbIkeMwYkScAAAAgHltaoN4kqaekCkn1kq5Nl1uetp5vB2ZWbWa1Zla7fPnyLexGeVi3bH7wmMxOWxryBAAAAMRjiwpUd1/m7p+4+6eSJqrxNN7FkvbJadpd0tJm9lHj7lXuXtWpU6ct6UbZWH7PFcFjDhkyJHjMGJEnAAAAIB5bVKCaWZeclydLapjhd6qkYWb2OTPbX1IvSc9sXRcBAAAAAJ8FbYo1MLM7JPWXtKeZLZY0RlJ/M6tQcvruQkkjJcnd/2Zmd0l6UdJ6See7+yfbpusAAAAAgO1J0QLV3U/Ps/iWAu1/IekXW9Op2HQcMCp4zJtvvjl4zBiRJwAAACAeWzOLL1K7VOS7Tey2VV1dHTxmjMgTAAAAEA8K1Ay8efWg4DHN8k2YjKbIEwAAABAPClQAAAAAQFmgQAUAAAAAlAUK1Azs2POI4DEHDQp/WnGMyBMAAAAQDwrUDOx16pjgMadNmxY8ZozIEwAAABAPCtQMvH33uOAxBw8eHDxmjMgTAAAAEA8K1AysXfBs8JjTp08PHjNG5AkAAACIBwUqAAAAAKAsUKACAAAAAMoCBWoG9rs4/Gmk7h48ZozIEwAAABAPCtQMrJo7M3jMmpqa4DFjRJ4AAACAeFCgZuDdWTcEjzly5MjgMWNEngAAAIB4UKACAAAAAMoCBSoAAAAAoCxQoGag09DRwWNOnTo1eMwYkScAAAAgHhSoGWjX+YDgMSsrK4PHjBF5AgAAAOJBgZqBJb85O3jMbt26BY8ZI/IEAAAAxIMCFQAAAABQFihQAQAAAABlgQI1A+0PGxA85ogRI4LHjBF5AgAAAOJBgZqBPQZ+P3jMmpqa4DFjRJ4AAACAeFCgZqB+0gXBYzI7bWnIEwAAABAPCtQMrFu2IHjMOXPmBI8ZI/IEAAAAxIMCFQAAAABQFihQM9C6fcfgMbt06RI8ZozIEwAAABAPCtQMdD9/SvCYS5cuDR4zRuQJAAAAiAcFagZWPn578Jhjx44NHjNG5AkAAACIBwVqBt5/4o7gMceNGxc8ZozIEwAAABAPClQAAAAAQFlo09Id+KzoccmMgusXXnVCoJ4AAAAAQHliBDUDe589PnjM2tra4DFjRJ4AAACAeFCgAgAAAADKAgVqBt6afGHwmFVVVcFjxog8AQAAAPGgQAUAAAAAlAUKVAAAAABAWaBAzcBuR58ePOaYMWOCx4wReQIAAADiYe7e0n1QVVWVl/tsq8VuE7O1uM0MAAAAgO2VmdW5e9EJYhhBzcDiG88KHrNr167BY8aIPAEAAADxoEDNwCer3w0es76+PnjMGJEnAAAAIB5FC1Qzu9XM3jazF3KWdTSzB8zstfRnh3S5mdkEM5tvZs+bWd9t2XkAAAAAwPajlBHUSZIGNll2iaSH3L2XpIfS15L0DUm90ke1pJuy6WZ5a9e5Z/CYfftS+5eCPAEAAADxKFqguvujkpqew3qipMnp88mSTspZPsUTT0na3cy6ZNXZctVl+HXBY9bV1QWPGSPyBAAAAMRjS69B7ezu9fr/7d19rJ51eQfw77Ui0wgbAwtCy4svxKnJQKyMBWNUpnRSwURcNG52xnlcRILJltktMcCMCf4zdb6Fos66ONTgnBUMaNBl02RKizDfI5AqfbFl8jKYRoL77Y9zFw/1tH3a87zd5/l8kpPnuX/P3XNd/fXKeXqd3yPFmesAAA6USURBVO++nyTd4/Hd+Kokdy84b3s3tqz99Mb3jT3m3Nzc2GP2kXkCAID+GPZNkmqRsUU/x6aq5qpqS1Vtueeee4acxng9dPtNY495zTXXjD1mH5knAADoj8NtUHfv3brbPe7pxrcnOXnBeauT7FzsG7TWNrbW1rTW1qxcufIw0wAAAGC5ONwGdXOS9d3z9Uk+t2D8dd3dfM9J8sDercAAAABwIEcc7ISqujbJC5M8qaq2J7k8yVVJPl1Vb0jy4ySv6k7/QpKXJbkjyc+SvH4EOU+dVW/edPCThmzHjh1jj9lH5gkAAPrjoA1qa+01+3npvEXObUkuWWpSffPw7jtyxNHHjTXm1q1bc9JJJ401Zh+ZJwAA6I9h3yRpJt3zmXeMPeaFF1449ph9ZJ4AAKA/NKgAAABMBQ0qAAAAU0GDOgTHnv+Wsce8+uqrxx6zj8wTAAD0hwZ1CI4+c+3YY87NzY09Zh+ZJwAA6A8N6hD86F3rxh6zqsYes4/MEwAA9IcGFQAAgKmgQQUAAGAqaFCH4AlPe97YY65bN/5txX1kngAAoD80qENw/MWXjz3m5z//+bHH7CPzBAAA/XHEpBNYDvZcd+WSm9TTNtxwwNe3XXXBY45f/vKXa74GYJ4AAKA/rKAOwc/vvGXsMa+//vqxx+wj8wQAAP2hQQUAAGAqaFABAACYChrUITj1bePfRtpaG3vMPjJPAADQHxrUIXjwthvHHnPjxo1jj9lH5gkAAPpDgzoE9970/rHHfNOb3jT2mH1kngAAoD80qAAAAEwFDSoAAABTQYM6BCtf+faxx9y8efPYY/aReQIAgP44YtIJLAdHnvD0kcc4bcMNjzl+5MH7cunXfjW27aoLRp5DHz33uc+ddAoAAMCArKAOwY4Prp+JmH20atWqSacAAAAMSIMKAADAVNCgAgAAMBU0qENw1Bnnz0TMPnrjG9846RQAAIABaVCH4Li1l85EzD7auHHjpFMAAAAGpEEdgl0fu2wmYvaRu/gCAEB/aFCH4OHdd85EzD669dZbJ50CAAAwIA0qAAAAU+GISSewHKw46thlEfO0DTcc8PVtV10w9JijduKJJ046BQAAYEBWUIdg9SUfn4mYfbRz585JpwAAAAxIgzoE93/1EzMRs4+uuOKKSacAAAAMSIM6BA987dqZiNlHV1555aRTAAAABqRBBQAAYCpoUAEAAJgKGtQhePL698xEzD7asmXLpFMAAAAG5GNmZsTBPkIGAABg0qygDsFPNr11JmL20Zo1ayadAgAAMCANKgAAAFPBFt9lwhZeAACg75bUoFbVtiQPJvllkkdaa2uq6tgkn0pyWpJtSf64tXbf0tKcbr997mtmImYfXX755ZNOAQAAGNAwtvi+qLV2Zmtt78V+G5Lc3Fo7PcnN3fGydszzXzsTMfvoiiuumHQKAADAgEZxDepFSTZ1zzclecUIYkyV7R943UzE7KOTTjpp0ikAAAADWmqD2pJ8saq2VtVcN3ZCa21XknSPxy8xxtT75UP3zkTMPtq1a9ekUwAAAAa01Jskndta21lVxyf5UlV9f9A/2DW0c0lyyimnLDENAAAA+m5JK6ittZ3d454kn01ydpLdVXViknSPe/bzZze21ta01tasXLlyKWlM3JEnPG0mYvbRWWedNekUAACAAR12g1pVT6yqo/c+T/LSJN9OsjnJ+u609Uk+t9Qkp92Jf/bemYjZR1u3bp10CgAAwICWsoJ6QpKvVtXtSb6R5IbW2o1Jrkrykqr6YZKXdMfL2k9vfN9MxOyjubm5g58EAABMhcNuUFtrd7XWzui+nt1ae2c3/tPW2nmttdO7x2V/N5+Hbr9pJmL20TXXXDPpFAAAgAGN4mNmAAAA4JAt9S6+zJDTNtxwwNe3XXXBmDIBAACWIyuoQ7DqzZtmImYf7dixY9IpAAAAA9KgDsHDu++YiZh95C6+AADQHxrUIbjnM++YiZh9dOGFF046BQAAYECuQWVoXKMKAAAshRVUAAAApoIV1CE49vy3zETMURvFCuzVV199uOkAAABjpkEdgqPPXDsTMZfqYA3oKMzNzY09JgAAcHhs8R2CH71r3UzE7KOqmnQKAADAgDSoAAAATAUNKgAAAFNBgzoET3ja82YiZh+tW2crNAAA9IWbJA3B8RdfPhMxp92iN2F69l88Ou5zWAEAYLppUIdgz3VXjr1hnETMPpq1eRrFR/UAAMC42OI7BD+/85aZiNlH5gkAAPrDCiq9MY7PUbUCCQAAk2MFFQAAgKmgQR2CU992/UzE7CPzBAAA/aFBHYIHb7txJmL2kXkCAID+0KAOwb03vX8mYvaReQIAgP7QoAIAADAV3MUXhshdgAEA4PBpUIdg5SvfPhMx+2jhPI3jY2oAAIDDZ4vvEBx5wtNnImYfmScAAOgPK6hDsOOD68f+cSaTiNlHfZsnW4SXzhwCAPSXFVQAAACmggYVAACAqaBBHYKjzjh/JmL2kXkCAID+cA3qEBy39tKZiNlHw56nSd8JeNLxB+EaUAAADpcV1CHY9bHLZiJmH5knAADoDyuoQ/Dw7jtnImYfmadDM8gKrRVQAABGRYMKsMzYZg0A9JUGdQhWHHXsTMTsI/PEvjRvAADTS4M6BKsv+fhMxOyjaZunSd/kaNLxpyUHAACmk5skDcH9X/3ETMTsI/MEAAD9YQV1CB742rU55vmvXfYx+8g80Ue2IQMAs0qDChwSW3QZxFLrZBaacL+IAIBfp0EFWGAcDbjGg0FoYAGYRRrUIXjy+vfMRMw+Mk9Mo6U2wVaxR09zCACTMbIGtarWJnlvkhVJPtxau2pUsQAYXB+23y61QdRgAkA/jaRBraoVST6Q5CVJtie5pao2t9a+O4p4k/aTTW/NqW+7ftnH7CPzBMM3DSu405BD32niAZhGo1pBPTvJHa21u5Kkqj6Z5KIky7JBBWC2zEKDPA0N7KhzmIa/48H0IccD6Xv+zPPvyDiNqkFdleTuBcfbk/z+iGIBwCHRYE7/9++D5TAHfdjyv1STbq76cPO95VDLy92k63icqrU2/G9a9aok57fW/rw7/tMkZ7fWLl1wzlySue7wGUl+MPREhuNJSf570knQG+qFQakVDoV6YVBqhUOhXhjUMGrl1NbayoOdNKoV1O1JTl5wvDrJzoUntNY2Jtk4ovhDU1VbWmtrJp0H/aBeGJRa4VCoFwalVjgU6oVBjbNWfmNE3/eWJKdX1VOq6sgkr06yeUSxAAAAWAZGsoLaWnukqt6S5KbMf8zMR1tr3xlFLAAAAJaHkX0OamvtC0m+MKrvP0ZTvw2ZqaJeGJRa4VCoFwalVjgU6oVBja1WRnKTJAAAADhUo7oGFQAAAA6JBvUAqmptVf2gqu6oqg2TzofJq6qPVtWeqvr2grFjq+pLVfXD7vF3uvGqqn/o6ue/quqsyWXOuFXVyVX1lar6XlV9p6ou68bVC49RVY+vqm9U1e1drVzZjT+lqr7e1cqnupsOpqp+szu+o3v9tEnmz/hV1Yqq+mZVXd8dqxUWVVXbqupbVXVbVW3pxrwP8Wuq6piquq6qvt/93+UPJlUrGtT9qKoVST6Q5I+SPCvJa6rqWZPNiinwsSRr9xnbkOTm1trpSW7ujpP52jm9+5pL8qEx5ch0eCTJX7bWnpnknCSXdD9D1Av7+kWSF7fWzkhyZpK1VXVOkncleXdXK/cleUN3/huS3Ndae3qSd3fnMVsuS/K9BcdqhQN5UWvtzAUfEeJ9iMW8N8mNrbXfTXJG5n/GTKRWNKj7d3aSO1prd7XWHk7yySQXTTgnJqy19u9J7t1n+KIkm7rnm5K8YsH4x9u8/0xyTFWdOJ5MmbTW2q7W2q3d8wcz/4N+VdQL++j+zR/qDh/XfbUkL05yXTe+b63sraHrkpxXVTWmdJmwqlqd5IIkH+6OK2qFQ+N9iMeoqt9K8oIkH0mS1trDrbX7M6Fa0aDu36okdy843t6Nwb5OaK3tSuabkiTHd+NqiCRJt63uOUm+HvXCIrotm7cl2ZPkS0nuTHJ/a+2R7pSF9fBorXSvP5DkuPFmzAS9J8lfJ/m/7vi4qBX2ryX5YlVtraq5bsz7EPt6apJ7kvxjd/nAh6vqiZlQrWhQ92+x3zC65TGHQg2RqjoqyWeSvLW19j8HOnWRMfUyI1prv2ytnZlkdeZ38DxzsdO6R7Uyo6pqXZI9rbWtC4cXOVWtsNe5rbWzMr8l85KqesEBzlUvs+uIJGcl+VBr7TlJ/je/2s67mJHWigZ1/7YnOXnB8eokOyeUC9Nt995tDd3jnm5cDc24qnpc5pvTT7TW/qUbVi/sV7el6t8yf93yMVW19/PKF9bDo7XSvf7b+fVLD1iezk1yYVVty/ylRy/O/IqqWmFRrbWd3eOeJJ/N/C/AvA+xr+1JtrfWvt4dX5f5hnUitaJB3b9bkpze3RnvyCSvTrJ5wjkxnTYnWd89X5/kcwvGX9fd6eycJA/s3SbB8tdd5/WRJN9rrf39gpfUC49RVSur6pju+ROS/GHmr1n+SpKLu9P2rZW9NXRxki83H2o+E1prf9NaW91aOy3z/y/5cmvttVErLKKqnlhVR+99nuSlSb4d70Pso7X2kyR3V9UzuqHzknw3E6qV8nNq/6rqZZn/zeSKJB9trb1zwikxYVV1bZIXJnlSkt1JLk/yr0k+neSUJD9O8qrW2r1dg/L+zN/192dJXt9a2zKJvBm/qnp+kv9I8q386lqxv838dajqhUdV1e9l/uYTKzL/i+NPt9b+rqqemvlVsmOTfDPJn7TWflFVj0/yT5m/rvneJK9urd01meyZlKp6YZK/aq2tUysspquLz3aHRyT559baO6vquHgfYh9VdWbmb752ZJK7krw+3XtSxlwrGlQAAACmgi2+AAAATAUNKgAAAFNBgwoAAMBU0KACAAAwFTSoAAAATAUNKgAAAFNBgwoAAMBU0KACAAAwFf4fT7ZJLHZM6ewAAAAASUVORK5CYII=\n", "text/plain": [ - "
" + "" ] }, "metadata": { @@ -482,10 +486,10 @@ "1 2 GoldenEye (1995) 01-Jan-1995 NaN \n", "2 3 Four Rooms (1995) 01-Jan-1995 NaN \n", "\n", - " 4 5 6 7 8 9 ... \\\n", - "0 http://us.imdb.com/M/title-exact?Toy%20Story%2... 0 0 0 1 1 ... \n", - "1 http://us.imdb.com/M/title-exact?GoldenEye%20(... 0 1 1 0 0 ... \n", - "2 http://us.imdb.com/M/title-exact?Four%20Rooms%... 0 0 0 0 0 ... \n", + " 4 5 6 7 8 9 ... \\\n", + "0 http://us.imdb.com/M/title-exact?Toy%20Story%2... 0 0 0 1 1 ... \n", + "1 http://us.imdb.com/M/title-exact?GoldenEye%20(... 0 1 1 0 0 ... \n", + "2 http://us.imdb.com/M/title-exact?Four%20Rooms%... 0 0 0 0 0 ... \n", "\n", " 14 15 16 17 18 19 20 21 22 23 \n", "0 0 0 0 0 0 0 0 0 0 0 \n", @@ -596,12 +600,312 @@ " Crime, Drama, Thriller\n", " \n", " \n", + " 5\n", + " 6\n", + " Shanghai Triad (Yao a yao yao dao waipo qiao) ...\n", + " Drama\n", + " \n", + " \n", + " 6\n", + " 7\n", + " Twelve Monkeys (1995)\n", + " Drama, Sci-Fi\n", + " \n", + " \n", + " 7\n", + " 8\n", + " Babe (1995)\n", + " Children's, Comedy, Drama\n", + " \n", + " \n", + " 8\n", + " 9\n", + " Dead Man Walking (1995)\n", + " Drama\n", + " \n", + " \n", + " 9\n", + " 10\n", + " Richard III (1995)\n", + " Drama, War\n", + " \n", + " \n", + " 10\n", + " 11\n", + " Seven (Se7en) (1995)\n", + " Crime, Thriller\n", + " \n", + " \n", + " 11\n", + " 12\n", + " Usual Suspects, The (1995)\n", + " Crime, Thriller\n", + " \n", + " \n", + " 12\n", + " 13\n", + " Mighty Aphrodite (1995)\n", + " Comedy\n", + " \n", + " \n", + " 13\n", + " 14\n", + " Postino, Il (1994)\n", + " Drama, Romance\n", + " \n", + " \n", + " 14\n", + " 15\n", + " Mr. Holland's Opus (1995)\n", + " Drama\n", + " \n", + " \n", + " 15\n", + " 16\n", + " French Twist (Gazon maudit) (1995)\n", + " Comedy, Romance\n", + " \n", + " \n", + " 16\n", + " 17\n", + " From Dusk Till Dawn (1996)\n", + " Action, Comedy, Crime, Horror, Thriller\n", + " \n", + " \n", + " 17\n", + " 18\n", + " White Balloon, The (1995)\n", + " Drama\n", + " \n", + " \n", + " 18\n", + " 19\n", + " Antonia's Line (1995)\n", + " Drama\n", + " \n", + " \n", + " 19\n", + " 20\n", + " Angels and Insects (1995)\n", + " Drama, Romance\n", + " \n", + " \n", + " 20\n", + " 21\n", + " Muppet Treasure Island (1996)\n", + " Action, Adventure, Comedy, Musical, Thriller\n", + " \n", + " \n", + " 21\n", + " 22\n", + " Braveheart (1995)\n", + " Action, Drama, War\n", + " \n", + " \n", + " 22\n", + " 23\n", + " Taxi Driver (1976)\n", + " Drama, Thriller\n", + " \n", + " \n", + " 23\n", + " 24\n", + " Rumble in the Bronx (1995)\n", + " Action, Adventure, Crime\n", + " \n", + " \n", + " 24\n", + " 25\n", + " Birdcage, The (1996)\n", + " Comedy\n", + " \n", + " \n", + " 25\n", + " 26\n", + " Brothers McMullen, The (1995)\n", + " Comedy\n", + " \n", + " \n", + " 26\n", + " 27\n", + " Bad Boys (1995)\n", + " Action\n", + " \n", + " \n", + " 27\n", + " 28\n", + " Apollo 13 (1995)\n", + " Action, Drama, Thriller\n", + " \n", + " \n", + " 28\n", + " 29\n", + " Batman Forever (1995)\n", + " Action, Adventure, Comedy, Crime\n", + " \n", + " \n", + " 29\n", + " 30\n", + " Belle de jour (1967)\n", + " Drama\n", + " \n", + " \n", " ...\n", " ...\n", " ...\n", " ...\n", " \n", " \n", + " 1652\n", + " 1653\n", + " Entertaining Angels: The Dorothy Day Story (1996)\n", + " Drama\n", + " \n", + " \n", + " 1653\n", + " 1654\n", + " Chairman of the Board (1998)\n", + " Comedy\n", + " \n", + " \n", + " 1654\n", + " 1655\n", + " Favor, The (1994)\n", + " Comedy, Romance\n", + " \n", + " \n", + " 1655\n", + " 1656\n", + " Little City (1998)\n", + " Comedy, Romance\n", + " \n", + " \n", + " 1656\n", + " 1657\n", + " Target (1995)\n", + " Action, Drama\n", + " \n", + " \n", + " 1657\n", + " 1658\n", + " Substance of Fire, The (1996)\n", + " Drama\n", + " \n", + " \n", + " 1658\n", + " 1659\n", + " Getting Away With Murder (1996)\n", + " Comedy\n", + " \n", + " \n", + " 1659\n", + " 1660\n", + " Small Faces (1995)\n", + " Drama\n", + " \n", + " \n", + " 1660\n", + " 1661\n", + " New Age, The (1994)\n", + " Drama\n", + " \n", + " \n", + " 1661\n", + " 1662\n", + " Rough Magic (1995)\n", + " Drama, Romance\n", + " \n", + " \n", + " 1662\n", + " 1663\n", + " Nothing Personal (1995)\n", + " Drama, War\n", + " \n", + " \n", + " 1663\n", + " 1664\n", + " 8 Heads in a Duffel Bag (1997)\n", + " Comedy\n", + " \n", + " \n", + " 1664\n", + " 1665\n", + " Brother's Kiss, A (1997)\n", + " Drama\n", + " \n", + " \n", + " 1665\n", + " 1666\n", + " Ripe (1996)\n", + " Drama\n", + " \n", + " \n", + " 1666\n", + " 1667\n", + " Next Step, The (1995)\n", + " Drama\n", + " \n", + " \n", + " 1667\n", + " 1668\n", + " Wedding Bell Blues (1996)\n", + " Comedy\n", + " \n", + " \n", + " 1668\n", + " 1669\n", + " MURDER and murder (1996)\n", + " Crime, Drama, Mystery\n", + " \n", + " \n", + " 1669\n", + " 1670\n", + " Tainted (1998)\n", + " Comedy, Thriller\n", + " \n", + " \n", + " 1670\n", + " 1671\n", + " Further Gesture, A (1996)\n", + " Drama\n", + " \n", + " \n", + " 1671\n", + " 1672\n", + " Kika (1993)\n", + " Drama\n", + " \n", + " \n", + " 1672\n", + " 1673\n", + " Mirage (1995)\n", + " Action, Thriller\n", + " \n", + " \n", + " 1673\n", + " 1674\n", + " Mamma Roma (1962)\n", + " Drama\n", + " \n", + " \n", + " 1674\n", + " 1675\n", + " Sunchaser, The (1996)\n", + " Drama\n", + " \n", + " \n", + " 1675\n", + " 1676\n", + " War at Home, The (1996)\n", + " Drama\n", + " \n", + " \n", + " 1676\n", + " 1677\n", + " Sweet Nothing (1995)\n", + " Drama\n", + " \n", + " \n", " 1677\n", " 1678\n", " Mat' i syn (1997)\n", @@ -637,31 +941,131 @@ "" ], "text/plain": [ - " id title \\\n", - "0 1 Toy Story (1995) \n", - "1 2 GoldenEye (1995) \n", - "2 3 Four Rooms (1995) \n", - "3 4 Get Shorty (1995) \n", - "4 5 Copycat (1995) \n", - "... ... ... \n", - "1677 1678 Mat' i syn (1997) \n", - "1678 1679 B. Monkey (1998) \n", - "1679 1680 Sliding Doors (1998) \n", - "1680 1681 You So Crazy (1994) \n", - "1681 1682 Scream of Stone (Schrei aus Stein) (1991) \n", + " id title \\\n", + "0 1 Toy Story (1995) \n", + "1 2 GoldenEye (1995) \n", + "2 3 Four Rooms (1995) \n", + "3 4 Get Shorty (1995) \n", + "4 5 Copycat (1995) \n", + "5 6 Shanghai Triad (Yao a yao yao dao waipo qiao) ... \n", + "6 7 Twelve Monkeys (1995) \n", + "7 8 Babe (1995) \n", + "8 9 Dead Man Walking (1995) \n", + "9 10 Richard III (1995) \n", + "10 11 Seven (Se7en) (1995) \n", + "11 12 Usual Suspects, The (1995) \n", + "12 13 Mighty Aphrodite (1995) \n", + "13 14 Postino, Il (1994) \n", + "14 15 Mr. Holland's Opus (1995) \n", + "15 16 French Twist (Gazon maudit) (1995) \n", + "16 17 From Dusk Till Dawn (1996) \n", + "17 18 White Balloon, The (1995) \n", + "18 19 Antonia's Line (1995) \n", + "19 20 Angels and Insects (1995) \n", + "20 21 Muppet Treasure Island (1996) \n", + "21 22 Braveheart (1995) \n", + "22 23 Taxi Driver (1976) \n", + "23 24 Rumble in the Bronx (1995) \n", + "24 25 Birdcage, The (1996) \n", + "25 26 Brothers McMullen, The (1995) \n", + "26 27 Bad Boys (1995) \n", + "27 28 Apollo 13 (1995) \n", + "28 29 Batman Forever (1995) \n", + "29 30 Belle de jour (1967) \n", + "... ... ... \n", + "1652 1653 Entertaining Angels: The Dorothy Day Story (1996) \n", + "1653 1654 Chairman of the Board (1998) \n", + "1654 1655 Favor, The (1994) \n", + "1655 1656 Little City (1998) \n", + "1656 1657 Target (1995) \n", + "1657 1658 Substance of Fire, The (1996) \n", + "1658 1659 Getting Away With Murder (1996) \n", + "1659 1660 Small Faces (1995) \n", + "1660 1661 New Age, The (1994) \n", + "1661 1662 Rough Magic (1995) \n", + "1662 1663 Nothing Personal (1995) \n", + "1663 1664 8 Heads in a Duffel Bag (1997) \n", + "1664 1665 Brother's Kiss, A (1997) \n", + "1665 1666 Ripe (1996) \n", + "1666 1667 Next Step, The (1995) \n", + "1667 1668 Wedding Bell Blues (1996) \n", + "1668 1669 MURDER and murder (1996) \n", + "1669 1670 Tainted (1998) \n", + "1670 1671 Further Gesture, A (1996) \n", + "1671 1672 Kika (1993) \n", + "1672 1673 Mirage (1995) \n", + "1673 1674 Mamma Roma (1962) \n", + "1674 1675 Sunchaser, The (1996) \n", + "1675 1676 War at Home, The (1996) \n", + "1676 1677 Sweet Nothing (1995) \n", + "1677 1678 Mat' i syn (1997) \n", + "1678 1679 B. Monkey (1998) \n", + "1679 1680 Sliding Doors (1998) \n", + "1680 1681 You So Crazy (1994) \n", + "1681 1682 Scream of Stone (Schrei aus Stein) (1991) \n", "\n", - " genres \n", - "0 Animation, Children's, Comedy \n", - "1 Action, Adventure, Thriller \n", - "2 Thriller \n", - "3 Action, Comedy, Drama \n", - "4 Crime, Drama, Thriller \n", - "... ... \n", - "1677 Drama \n", - "1678 Romance, Thriller \n", - "1679 Drama, Romance \n", - "1680 Comedy \n", - "1681 Drama \n", + " genres \n", + "0 Animation, Children's, Comedy \n", + "1 Action, Adventure, Thriller \n", + "2 Thriller \n", + "3 Action, Comedy, Drama \n", + "4 Crime, Drama, Thriller \n", + "5 Drama \n", + "6 Drama, Sci-Fi \n", + "7 Children's, Comedy, Drama \n", + "8 Drama \n", + "9 Drama, War \n", + "10 Crime, Thriller \n", + "11 Crime, Thriller \n", + "12 Comedy \n", + "13 Drama, Romance \n", + "14 Drama \n", + "15 Comedy, Romance \n", + "16 Action, Comedy, Crime, Horror, Thriller \n", + "17 Drama \n", + "18 Drama \n", + "19 Drama, Romance \n", + "20 Action, Adventure, Comedy, Musical, Thriller \n", + "21 Action, Drama, War \n", + "22 Drama, Thriller \n", + "23 Action, Adventure, Crime \n", + "24 Comedy \n", + "25 Comedy \n", + "26 Action \n", + "27 Action, Drama, Thriller \n", + "28 Action, Adventure, Comedy, Crime \n", + "29 Drama \n", + "... ... \n", + "1652 Drama \n", + "1653 Comedy \n", + "1654 Comedy, Romance \n", + "1655 Comedy, Romance \n", + "1656 Action, Drama \n", + "1657 Drama \n", + "1658 Comedy \n", + "1659 Drama \n", + "1660 Drama \n", + "1661 Drama, Romance \n", + "1662 Drama, War \n", + "1663 Comedy \n", + "1664 Drama \n", + "1665 Drama \n", + "1666 Drama \n", + "1667 Comedy \n", + "1668 Crime, Drama, Mystery \n", + "1669 Comedy, Thriller \n", + "1670 Drama \n", + "1671 Drama \n", + "1672 Action, Thriller \n", + "1673 Drama \n", + "1674 Drama \n", + "1675 Drama \n", + "1676 Drama \n", + "1677 Drama \n", + "1678 Romance, Thriller \n", + "1679 Drama, Romance \n", + "1680 Comedy \n", + "1681 Drama \n", "\n", "[1682 rows x 3 columns]" ] @@ -685,7 +1089,18 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "if not os.path.exists('./Datasets/toy-example/'):\n", + " os.mkdir('./Datasets/toy-example/')" + ] + }, + { + "cell_type": "code", + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ diff --git a/P1. Baseline.ipynb b/P1. Baseline.ipynb index c5a0c3e..bacfb2d 100644 --- a/P1. Baseline.ipynb +++ b/P1. Baseline.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -43,7 +43,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -134,7 +134,7 @@ "4 560 24 2 879976772 559 23" ] }, - "execution_count": 4, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -145,7 +145,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -155,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -169,7 +169,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -189,17 +189,17 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "<3x4 sparse matrix of type ''\n", + "<3x4 sparse matrix of type ''\n", "\twith 8 stored elements in Compressed Sparse Row format>" ] }, - "execution_count": 9, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -214,7 +214,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -257,7 +257,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -283,7 +283,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -307,7 +307,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "563 ns ± 16.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)\n", + "472 ns ± 7.02 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)\n", "Inefficient way to access items rated by user:\n" ] }, @@ -325,7 +325,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "70.8 µs ± 2.93 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n" + "57.3 µs ± 6.26 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n" ] } ], @@ -350,7 +350,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -384,7 +384,7 @@ "matrix([[ 8, 3, 11]])" ] }, - "execution_count": 17, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -398,7 +398,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -411,7 +411,7 @@ { "data": { "text/plain": [ - "array([2.66666667, 1.5 , 3.66666667])" + "array([ 2.66666667, 1.5 , 3.66666667])" ] }, "metadata": {}, @@ -427,9 +427,9 @@ { "data": { "text/plain": [ - "matrix([[2.66666667, 0. , 0. ],\n", - " [0. , 1.5 , 0. ],\n", - " [0. , 0. , 3.66666667]])" + "matrix([[ 2.66666667, 0. , 0. ],\n", + " [ 0. , 1.5 , 0. ],\n", + " [ 0. , 0. , 3.66666667]])" ] }, "metadata": {}, @@ -445,9 +445,9 @@ { "data": { "text/plain": [ - "matrix([[2.66666667, 2.66666667, 2.66666667, 0. ],\n", - " [0. , 1.5 , 0. , 1.5 ],\n", - " [3.66666667, 0. , 3.66666667, 3.66666667]])" + "matrix([[ 2.66666667, 2.66666667, 2.66666667, 0. ],\n", + " [ 0. , 1.5 , 0. , 1.5 ],\n", + " [ 3.66666667, 0. , 3.66666667, 3.66666667]])" ] }, "metadata": {}, @@ -468,7 +468,7 @@ " [-1.66666667, 0. , 1.33333333, 0.33333333]])" ] }, - "execution_count": 19, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -498,7 +498,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -556,7 +556,20 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "if not os.path.exists('./Recommendations generated/'):\n", + " os.mkdir('./Recommendations generated/')\n", + " os.mkdir('./Recommendations generated/ml-100k/')\n", + " os.mkdir('./Recommendations generated/toy-example/')" + ] + }, + { + "cell_type": "code", + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -605,7 +618,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -642,7 +655,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -744,18 +757,18 @@ "" ], "text/plain": [ - " 0 1 2 3 4 5 6 7 8 9 ... 11 \\\n", - "0 1 5 3.529975 10 3.529975 25 3.529975 32 3.529975 33 ... 44 \n", - "1 2 1 3.529975 2 3.529975 3 3.529975 4 3.529975 5 ... 6 \n", + " 0 1 2 3 4 5 6 7 8 9 ... \\\n", + "0 1 5 3.529975 10 3.529975 25 3.529975 32 3.529975 33 ... \n", + "1 2 1 3.529975 2 3.529975 3 3.529975 4 3.529975 5 ... \n", "\n", - " 12 13 14 15 16 17 18 19 20 \n", - "0 3.529975 46 3.529975 50 3.529975 52 3.529975 55 3.529975 \n", - "1 3.529975 7 3.529975 8 3.529975 9 3.529975 11 3.529975 \n", + " 11 12 13 14 15 16 17 18 19 20 \n", + "0 44 3.529975 46 3.529975 50 3.529975 52 3.529975 55 3.529975 \n", + "1 6 3.529975 7 3.529975 8 3.529975 9 3.529975 11 3.529975 \n", "\n", "[2 rows x 21 columns]" ] }, - "execution_count": 31, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -773,7 +786,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -792,7 +805,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -865,7 +878,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -1033,7 +1046,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -1057,7 +1070,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -1076,7 +1089,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -1133,7 +1146,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 31, "metadata": {}, "outputs": [ { @@ -1147,10 +1160,10 @@ { "data": { "text/plain": [ - "0.7524871012820799" + "0.75248710128207985" ] }, - "execution_count": 47, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -1180,24 +1193,24 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "RMSE: 1.5186\n", - "MAE: 1.2188\n" + "RMSE: 1.5190\n", + "MAE: 1.2222\n" ] }, { "data": { "text/plain": [ - "1.2187837474576546" + "1.222159317007133" ] }, - "execution_count": 48, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } diff --git a/P1. Introduction and baseline.pdf b/P1. Introduction and baseline.pdf new file mode 100644 index 0000000..f5d5846 Binary files /dev/null and b/P1. Introduction and baseline.pdf differ diff --git a/P2. Evaluation.ipynb b/P2. Evaluation.ipynb index 747bbea..8152ff0 100644 --- a/P2. Evaluation.ipynb +++ b/P2. Evaluation.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 1, "metadata": { "slideshow": { "slide_type": "-" @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -63,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -83,7 +83,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -126,12 +126,15 @@ "0 0.949459 0.752487" ] }, - "execution_count": 36, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "# in case of error (in the laboratories) you might have to switch to the other version of pandas\n", + "# try !pip3 install pandas=='1.0.3' (or pip if you use python 2) and restart the kernel\n", + "\n", "estimations_metrics(test_ui, estimations)" ] }, @@ -144,7 +147,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -159,7 +162,7 @@ " [ 77, 313, 475, ..., 11, 591, 175]])" ] }, - "execution_count": 39, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -180,7 +183,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -263,14 +266,14 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "943it [00:00, 7832.26it/s]\n" + "943it [00:00, 9409.37it/s]\n" ] }, { @@ -334,7 +337,7 @@ "0 0.095957 0.043178 0.198193 0.515501 0.437964 " ] }, - "execution_count": 41, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -395,7 +398,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -442,12 +445,14 @@ "0 1.0 0.033911 2.836513 0.991139" ] }, - "execution_count": 9, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "# in case of errors try !pip3 install numpy==1.18.4 (or pip if you use python 2) and restart the kernel\n", + "\n", "import evaluation_measures as ev\n", "import imp\n", "imp.reload(ev)\n", @@ -465,14 +470,14 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "943it [00:00, 8174.46it/s]\n" + "943it [00:00, 8290.29it/s]\n" ] }, { @@ -551,7 +556,7 @@ "0 0.437964 1.0 0.033911 2.836513 0.991139 " ] }, - "execution_count": 43, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -573,29 +578,18 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "943it [00:00, 8620.89it/s]\n", - "943it [00:00, 7627.42it/s]\n", - "943it [00:00, 8642.57it/s]\n", - "943it [00:00, 7752.46it/s]\n", - "943it [00:00, 8864.93it/s]\n", - "943it [00:00, 8549.57it/s]\n", - "943it [00:00, 5768.05it/s]\n", - "943it [00:00, 8257.83it/s]\n", - "943it [00:00, 7608.73it/s]\n", - "943it [00:00, 8086.29it/s]\n", - "943it [00:00, 9124.19it/s]\n", - "943it [00:00, 8456.44it/s]\n", - "943it [00:00, 8696.29it/s]\n", - "943it [00:00, 8500.80it/s]\n", - "943it [00:00, 9023.45it/s]\n", - "943it [00:00, 8529.05it/s]\n" + "943it [00:00, 9608.49it/s]\n", + "943it [00:00, 9837.12it/s]\n", + "943it [00:00, 10292.46it/s]\n", + "943it [00:00, 9906.94it/s]\n", + "943it [00:00, 9162.09it/s]\n" ] } ], @@ -614,7 +608,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -652,18 +646,6 @@ " \n", " \n", " 0\n", - " Self_RP3Beta\n", - " 3.702446\n", - " 3.527273\n", - " 0.282185\n", - " 0.192092\n", - " 0.186749\n", - " 0.216980\n", - " 0.204185\n", - " 0.240096\n", - " \n", - " \n", - " 0\n", " Self_TopPop\n", " 2.508258\n", " 2.217909\n", @@ -676,42 +658,6 @@ " \n", " \n", " 0\n", - " Ready_SVD\n", - " 0.952784\n", - " 0.750597\n", - " 0.095228\n", - " 0.047497\n", - " 0.053142\n", - " 0.067082\n", - " 0.084871\n", - " 0.076457\n", - " \n", - " \n", - " 0\n", - " Self_SVDBaseline\n", - " 0.930321\n", - " 0.734643\n", - " 0.092683\n", - " 0.042046\n", - " 0.048568\n", - " 0.063218\n", - " 0.082940\n", - " 0.068730\n", - " \n", - " \n", - " 0\n", - " Ready_SVDBiased\n", - " 0.940375\n", - " 0.742264\n", - " 0.092153\n", - " 0.039645\n", - " 0.046804\n", - " 0.061886\n", - " 0.079399\n", - " 0.055967\n", - " \n", - " \n", - " 0\n", " Ready_Baseline\n", " 0.949459\n", " 0.752487\n", @@ -724,18 +670,6 @@ " \n", " \n", " 0\n", - " Self_SVD\n", - " 0.939326\n", - " 0.740022\n", - " 0.074549\n", - " 0.031755\n", - " 0.038425\n", - " 0.050562\n", - " 0.065665\n", - " 0.050602\n", - " \n", - " \n", - " 0\n", " Self_GlobalAvg\n", " 1.125760\n", " 0.943534\n", @@ -749,74 +683,14 @@ " \n", " 0\n", " Ready_Random\n", - " 1.518551\n", - " 1.218784\n", - " 0.050583\n", - " 0.024085\n", - " 0.027323\n", - " 0.034826\n", - " 0.031223\n", - " 0.026436\n", - " \n", - " \n", - " 0\n", - " Ready_I-KNN\n", - " 1.030386\n", - " 0.813067\n", - " 0.026087\n", - " 0.006908\n", - " 0.010593\n", - " 0.016046\n", - " 0.021137\n", - " 0.009522\n", - " \n", - " \n", - " 0\n", - " Ready_I-KNNBaseline\n", - " 0.935327\n", - " 0.737424\n", - " 0.002545\n", - " 0.000755\n", - " 0.001105\n", - " 0.001602\n", - " 0.002253\n", - " 0.000930\n", - " \n", - " \n", - " 0\n", - " Ready_U-KNNBaseline\n", - " 0.935327\n", - " 0.737424\n", - " 0.002545\n", - " 0.000755\n", - " 0.001105\n", - " 0.001602\n", - " 0.002253\n", - " 0.000930\n", - " \n", - " \n", - " 0\n", - " Ready_U-KNN\n", - " 1.023495\n", - " 0.807913\n", - " 0.000742\n", - " 0.000205\n", - " 0.000305\n", - " 0.000449\n", - " 0.000536\n", - " 0.000198\n", - " \n", - " \n", - " 0\n", - " Self_TopRated\n", - " 1.033085\n", - " 0.822057\n", - " 0.000954\n", - " 0.000188\n", - " 0.000298\n", - " 0.000481\n", - " 0.000644\n", - " 0.000223\n", + " 1.518964\n", + " 1.222159\n", + " 0.046554\n", + " 0.020603\n", + " 0.023679\n", + " 0.031216\n", + " 0.028970\n", + " 0.021179\n", " \n", " \n", " 0\n", @@ -830,61 +704,27 @@ " 0.000644\n", " 0.000189\n", " \n", - " \n", - " 0\n", - " Self_IKNN\n", - " 1.018363\n", - " 0.808793\n", - " 0.000318\n", - " 0.000108\n", - " 0.000140\n", - " 0.000189\n", - " 0.000000\n", - " 0.000000\n", - " \n", " \n", "\n", "" ], "text/plain": [ - " Model RMSE MAE precision recall F_1 \\\n", - "0 Self_RP3Beta 3.702446 3.527273 0.282185 0.192092 0.186749 \n", - "0 Self_TopPop 2.508258 2.217909 0.188865 0.116919 0.118732 \n", - "0 Ready_SVD 0.952784 0.750597 0.095228 0.047497 0.053142 \n", - "0 Self_SVDBaseline 0.930321 0.734643 0.092683 0.042046 0.048568 \n", - "0 Ready_SVDBiased 0.940375 0.742264 0.092153 0.039645 0.046804 \n", - "0 Ready_Baseline 0.949459 0.752487 0.091410 0.037652 0.046030 \n", - "0 Self_SVD 0.939326 0.740022 0.074549 0.031755 0.038425 \n", - "0 Self_GlobalAvg 1.125760 0.943534 0.061188 0.025968 0.031383 \n", - "0 Ready_Random 1.518551 1.218784 0.050583 0.024085 0.027323 \n", - "0 Ready_I-KNN 1.030386 0.813067 0.026087 0.006908 0.010593 \n", - "0 Ready_I-KNNBaseline 0.935327 0.737424 0.002545 0.000755 0.001105 \n", - "0 Ready_U-KNNBaseline 0.935327 0.737424 0.002545 0.000755 0.001105 \n", - "0 Ready_U-KNN 1.023495 0.807913 0.000742 0.000205 0.000305 \n", - "0 Self_TopRated 1.033085 0.822057 0.000954 0.000188 0.000298 \n", - "0 Self_BaselineUI 0.967585 0.762740 0.000954 0.000170 0.000278 \n", - "0 Self_IKNN 1.018363 0.808793 0.000318 0.000108 0.000140 \n", + " Model RMSE MAE precision recall F_1 \\\n", + "0 Self_TopPop 2.508258 2.217909 0.188865 0.116919 0.118732 \n", + "0 Ready_Baseline 0.949459 0.752487 0.091410 0.037652 0.046030 \n", + "0 Self_GlobalAvg 1.125760 0.943534 0.061188 0.025968 0.031383 \n", + "0 Ready_Random 1.518964 1.222159 0.046554 0.020603 0.023679 \n", + "0 Self_BaselineUI 0.967585 0.762740 0.000954 0.000170 0.000278 \n", "\n", " F_05 precision_super recall_super \n", - "0 0.216980 0.204185 0.240096 \n", "0 0.141584 0.130472 0.137473 \n", - "0 0.067082 0.084871 0.076457 \n", - "0 0.063218 0.082940 0.068730 \n", - "0 0.061886 0.079399 0.055967 \n", "0 0.061286 0.079614 0.056463 \n", - "0 0.050562 0.065665 0.050602 \n", "0 0.041343 0.040558 0.032107 \n", - "0 0.034826 0.031223 0.026436 \n", - "0 0.016046 0.021137 0.009522 \n", - "0 0.001602 0.002253 0.000930 \n", - "0 0.001602 0.002253 0.000930 \n", - "0 0.000449 0.000536 0.000198 \n", - "0 0.000481 0.000644 0.000223 \n", - "0 0.000463 0.000644 0.000189 \n", - "0 0.000189 0.000000 0.000000 " + "0 0.031216 0.028970 0.021179 \n", + "0 0.000463 0.000644 0.000189 " ] }, - "execution_count": 60, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -895,7 +735,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -934,19 +774,6 @@ " \n", " \n", " 0\n", - " Self_RP3Beta\n", - " 0.339114\n", - " 0.204905\n", - " 0.572157\n", - " 0.593544\n", - " 0.875928\n", - " 1.000000\n", - " 0.077201\n", - " 3.875892\n", - " 0.974947\n", - " \n", - " \n", - " 0\n", " Self_TopPop\n", " 0.214651\n", " 0.111707\n", @@ -960,45 +787,6 @@ " \n", " \n", " 0\n", - " Ready_SVD\n", - " 0.109075\n", - " 0.050124\n", - " 0.241366\n", - " 0.520459\n", - " 0.499470\n", - " 0.992047\n", - " 0.217893\n", - " 4.405246\n", - " 0.953484\n", - " \n", - " \n", - " 0\n", - " Self_SVDBaseline\n", - " 0.098937\n", - " 0.044405\n", - " 0.203936\n", - " 0.517696\n", - " 0.469777\n", - " 1.000000\n", - " 0.058442\n", - " 3.085857\n", - " 0.988824\n", - " \n", - " \n", - " 0\n", - " Ready_SVDBiased\n", - " 0.102017\n", - " 0.047972\n", - " 0.216876\n", - " 0.516515\n", - " 0.441145\n", - " 0.997455\n", - " 0.167388\n", - " 4.235348\n", - " 0.962085\n", - " \n", - " \n", - " 0\n", " Ready_Baseline\n", " 0.095957\n", " 0.043178\n", @@ -1012,19 +800,6 @@ " \n", " \n", " 0\n", - " Self_SVD\n", - " 0.077117\n", - " 0.031574\n", - " 0.165509\n", - " 0.512485\n", - " 0.414634\n", - " 0.981866\n", - " 0.080087\n", - " 3.858982\n", - " 0.975271\n", - " \n", - " \n", - " 0\n", " Self_GlobalAvg\n", " 0.067695\n", " 0.027470\n", @@ -1039,80 +814,15 @@ " \n", " 0\n", " Ready_Random\n", - " 0.054902\n", - " 0.020652\n", - " 0.137928\n", - " 0.508570\n", - " 0.353128\n", - " 0.987699\n", - " 0.183261\n", - " 5.093805\n", - " 0.908215\n", - " \n", - " \n", - " 0\n", - " Ready_I-KNN\n", - " 0.024214\n", - " 0.008958\n", - " 0.048068\n", - " 0.499885\n", - " 0.154825\n", - " 0.402333\n", - " 0.434343\n", - " 5.133650\n", - " 0.877999\n", - " \n", - " \n", - " 0\n", - " Ready_I-KNNBaseline\n", - " 0.003444\n", - " 0.001362\n", - " 0.011760\n", - " 0.496724\n", - " 0.021209\n", - " 0.482821\n", - " 0.059885\n", - " 2.232578\n", - " 0.994487\n", - " \n", - " \n", - " 0\n", - " Ready_U-KNNBaseline\n", - " 0.003444\n", - " 0.001362\n", - " 0.011760\n", - " 0.496724\n", - " 0.021209\n", - " 0.482821\n", - " 0.059885\n", - " 2.232578\n", - " 0.994487\n", - " \n", - " \n", - " 0\n", - " Ready_U-KNN\n", - " 0.000845\n", - " 0.000274\n", - " 0.002744\n", - " 0.496441\n", - " 0.007423\n", - " 0.602121\n", - " 0.010823\n", - " 2.089186\n", - " 0.995706\n", - " \n", - " \n", - " 0\n", - " Self_TopRated\n", - " 0.001043\n", - " 0.000335\n", - " 0.003348\n", - " 0.496433\n", - " 0.009544\n", - " 0.699046\n", - " 0.005051\n", - " 1.945910\n", - " 0.995669\n", + " 0.050489\n", + " 0.019185\n", + " 0.123856\n", + " 0.506812\n", + " 0.322375\n", + " 0.987805\n", + " 0.184704\n", + " 5.103172\n", + " 0.906873\n", " \n", " \n", " 0\n", @@ -1127,62 +837,27 @@ " 1.803126\n", " 0.996380\n", " \n", - " \n", - " 0\n", - " Self_IKNN\n", - " 0.000214\n", - " 0.000037\n", - " 0.000368\n", - " 0.496391\n", - " 0.003181\n", - " 0.392153\n", - " 0.115440\n", - " 4.174741\n", - " 0.965327\n", - " \n", " \n", "\n", "" ], "text/plain": [ - " Model NDCG mAP MRR LAUC HR \\\n", - "0 Self_RP3Beta 0.339114 0.204905 0.572157 0.593544 0.875928 \n", - "0 Self_TopPop 0.214651 0.111707 0.400939 0.555546 0.765642 \n", - "0 Ready_SVD 0.109075 0.050124 0.241366 0.520459 0.499470 \n", - "0 Self_SVDBaseline 0.098937 0.044405 0.203936 0.517696 0.469777 \n", - "0 Ready_SVDBiased 0.102017 0.047972 0.216876 0.516515 0.441145 \n", - "0 Ready_Baseline 0.095957 0.043178 0.198193 0.515501 0.437964 \n", - "0 Self_SVD 0.077117 0.031574 0.165509 0.512485 0.414634 \n", - "0 Self_GlobalAvg 0.067695 0.027470 0.171187 0.509546 0.384942 \n", - "0 Ready_Random 0.054902 0.020652 0.137928 0.508570 0.353128 \n", - "0 Ready_I-KNN 0.024214 0.008958 0.048068 0.499885 0.154825 \n", - "0 Ready_I-KNNBaseline 0.003444 0.001362 0.011760 0.496724 0.021209 \n", - "0 Ready_U-KNNBaseline 0.003444 0.001362 0.011760 0.496724 0.021209 \n", - "0 Ready_U-KNN 0.000845 0.000274 0.002744 0.496441 0.007423 \n", - "0 Self_TopRated 0.001043 0.000335 0.003348 0.496433 0.009544 \n", - "0 Self_BaselineUI 0.000752 0.000168 0.001677 0.496424 0.009544 \n", - "0 Self_IKNN 0.000214 0.000037 0.000368 0.496391 0.003181 \n", + " Model NDCG mAP MRR LAUC HR \\\n", + "0 Self_TopPop 0.214651 0.111707 0.400939 0.555546 0.765642 \n", + "0 Ready_Baseline 0.095957 0.043178 0.198193 0.515501 0.437964 \n", + "0 Self_GlobalAvg 0.067695 0.027470 0.171187 0.509546 0.384942 \n", + "0 Ready_Random 0.050489 0.019185 0.123856 0.506812 0.322375 \n", + "0 Self_BaselineUI 0.000752 0.000168 0.001677 0.496424 0.009544 \n", "\n", " Reco in test Test coverage Shannon Gini \n", - "0 1.000000 0.077201 3.875892 0.974947 \n", "0 1.000000 0.038961 3.159079 0.987317 \n", - "0 0.992047 0.217893 4.405246 0.953484 \n", - "0 1.000000 0.058442 3.085857 0.988824 \n", - "0 0.997455 0.167388 4.235348 0.962085 \n", "0 1.000000 0.033911 2.836513 0.991139 \n", - "0 0.981866 0.080087 3.858982 0.975271 \n", "0 1.000000 0.025974 2.711772 0.992003 \n", - "0 0.987699 0.183261 5.093805 0.908215 \n", - "0 0.402333 0.434343 5.133650 0.877999 \n", - "0 0.482821 0.059885 2.232578 0.994487 \n", - "0 0.482821 0.059885 2.232578 0.994487 \n", - "0 0.602121 0.010823 2.089186 0.995706 \n", - "0 0.699046 0.005051 1.945910 0.995669 \n", - "0 0.600530 0.005051 1.803126 0.996380 \n", - "0 0.392153 0.115440 4.174741 0.965327 " + "0 0.987805 0.184704 5.103172 0.906873 \n", + "0 0.600530 0.005051 1.803126 0.996380 " ] }, - "execution_count": 61, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -1200,14 +875,14 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "3it [00:00, 4090.67it/s]\n" + "3it [00:00, 1651.52it/s]\n" ] }, { @@ -1255,37 +930,37 @@ " \n", " 0\n", " Self_BaselineUI\n", - " 1.648337\n", - " 1.575\n", + " 1.612452\n", + " 1.4\n", " 0.444444\n", " 0.888889\n", " 0.555556\n", " 0.478632\n", " 0.333333\n", " 0.75\n", - " 0.72055\n", - " 0.62963\n", - " 0.666667\n", - " 0.722222\n", + " 0.676907\n", + " 0.574074\n", + " 0.611111\n", + " 0.638889\n", " 1.0\n", - " 0.777778\n", + " 0.888889\n", " 0.8\n", - " 1.351784\n", - " 0.357143\n", + " 1.386294\n", + " 0.25\n", " \n", " \n", "\n", "" ], "text/plain": [ - " Model RMSE MAE precision recall F_1 F_05 \\\n", - "0 Self_BaselineUI 1.648337 1.575 0.444444 0.888889 0.555556 0.478632 \n", + " Model RMSE MAE precision recall F_1 F_05 \\\n", + "0 Self_BaselineUI 1.612452 1.4 0.444444 0.888889 0.555556 0.478632 \n", "\n", - " precision_super recall_super NDCG mAP MRR LAUC HR \\\n", - "0 0.333333 0.75 0.72055 0.62963 0.666667 0.722222 1.0 \n", + " precision_super recall_super NDCG mAP MRR LAUC HR \\\n", + "0 0.333333 0.75 0.676907 0.574074 0.611111 0.638889 1.0 \n", "\n", - " Reco in test Test coverage Shannon Gini \n", - "0 0.777778 0.8 1.351784 0.357143 " + " Reco in test Test coverage Shannon Gini \n", + "0 0.888889 0.8 1.386294 0.25 " ] }, "metadata": {}, @@ -1369,41 +1044,41 @@ " 0\n", " 0\n", " 30\n", - " 4.375000\n", + " 5.0\n", + " 20\n", + " 4.0\n", " 60\n", - " 4.375000\n", - " 50\n", - " 3.375000\n", + " 4.0\n", " \n", " \n", " 1\n", " 10\n", " 40\n", - " 4.166667\n", + " 3.0\n", " 60\n", - " 3.166667\n", + " 2.0\n", " 70\n", - " 3.166667\n", + " 2.0\n", " \n", " \n", " 2\n", " 20\n", " 40\n", - " 5.333333\n", + " 5.0\n", + " 20\n", + " 4.0\n", " 70\n", - " 4.333333\n", - " 0\n", - " 3.333333\n", + " 4.0\n", " \n", " \n", "\n", "" ], "text/plain": [ - " 0 1 2 3 4 5 6\n", - "0 0 30 4.375000 60 4.375000 50 3.375000\n", - "1 10 40 4.166667 60 3.166667 70 3.166667\n", - "2 20 40 5.333333 70 4.333333 0 3.333333" + " 0 1 2 3 4 5 6\n", + "0 0 30 5.0 20 4.0 60 4.0\n", + "1 10 40 3.0 60 2.0 70 2.0\n", + "2 20 40 5.0 20 4.0 70 4.0" ] }, "metadata": {}, @@ -1447,31 +1122,31 @@ " 0\n", " 0\n", " 60\n", - " 4.375000\n", + " 4.0\n", " \n", " \n", " 1\n", " 10\n", " 40\n", - " 4.166667\n", + " 3.0\n", " \n", " \n", " 2\n", " 20\n", " 0\n", - " 3.333333\n", + " 3.0\n", " \n", " \n", " 3\n", " 20\n", " 20\n", - " 2.333333\n", + " 4.0\n", " \n", " \n", " 4\n", " 20\n", " 70\n", - " 4.333333\n", + " 4.0\n", " \n", " \n", "\n", @@ -1479,11 +1154,11 @@ ], "text/plain": [ " user item est_score\n", - "0 0 60 4.375000\n", - "1 10 40 4.166667\n", - "2 20 0 3.333333\n", - "3 20 20 2.333333\n", - "4 20 70 4.333333" + "0 0 60 4.0\n", + "1 10 40 3.0\n", + "2 20 0 3.0\n", + "3 20 20 4.0\n", + "4 20 70 4.0" ] }, "metadata": {}, @@ -1532,7 +1207,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -1571,148 +1246,148 @@ " \n", " \n", " \n", - " 269\n", - " 523\n", + " 24754\n", + " 105\n", " 5\n", - " Toy Story (1995)\n", - " Animation, Children's, Comedy\n", + " Gattaca (1997)\n", + " Drama, Sci-Fi, Thriller\n", " \n", " \n", - " 31247\n", - " 523\n", - " 5\n", - " Grease (1978)\n", - " Comedy, Musical, Romance\n", - " \n", - " \n", - " 35233\n", - " 523\n", - " 5\n", - " Much Ado About Nothing (1993)\n", - " Comedy, Romance\n", - " \n", - " \n", - " 35436\n", - " 523\n", - " 5\n", - " Fantasia (1940)\n", - " Animation, Children's, Musical\n", - " \n", - " \n", - " 36537\n", - " 523\n", - " 5\n", - " Shine (1996)\n", - " Drama, Romance\n", - " \n", - " \n", - " 37146\n", - " 523\n", + " 37073\n", + " 105\n", " 5\n", " Contact (1997)\n", " Drama, Sci-Fi\n", " \n", " \n", - " 38982\n", - " 523\n", + " 40592\n", + " 105\n", " 5\n", - " Full Monty, The (1997)\n", - " Comedy\n", + " Titanic (1997)\n", + " Action, Drama, Romance\n", " \n", " \n", - " 1197\n", - " 523\n", + " 46032\n", + " 105\n", " 5\n", - " Four Weddings and a Funeral (1994)\n", - " Comedy, Romance\n", + " L.A. Confidential (1997)\n", + " Crime, Film-Noir, Mystery, Thriller\n", " \n", " \n", - " 44756\n", - " 523\n", - " 5\n", - " Butch Cassidy and the Sundance Kid (1969)\n", - " Action, Comedy, Western\n", + " 17916\n", + " 105\n", + " 4\n", + " English Patient, The (1996)\n", + " Drama, Romance, War\n", " \n", " \n", - " 45918\n", - " 523\n", - " 5\n", - " Wallace & Gromit: The Best of Aardman Animatio...\n", - " Animation\n", - " \n", - " \n", - " 46339\n", - " 523\n", - " 5\n", - " Grand Day Out, A (1992)\n", - " Animation, Comedy\n", - " \n", - " \n", - " 50119\n", - " 523\n", - " 5\n", - " Mrs. Brown (Her Majesty, Mrs. Brown) (1997)\n", + " 23767\n", + " 105\n", + " 4\n", + " Chasing Amy (1997)\n", " Drama, Romance\n", " \n", " \n", - " 50338\n", - " 523\n", - " 5\n", - " Close Shave, A (1995)\n", - " Animation, Comedy, Thriller\n", + " 47003\n", + " 105\n", + " 4\n", + " Cop Land (1997)\n", + " Crime, Drama, Mystery\n", " \n", " \n", - " 52950\n", - " 523\n", - " 5\n", - " Kolya (1996)\n", - " Comedy\n", + " 48891\n", + " 105\n", + " 4\n", + " Lost Highway (1997)\n", + " Mystery\n", " \n", " \n", - " 53361\n", - " 523\n", - " 5\n", - " Multiplicity (1996)\n", - " Comedy\n", + " 67355\n", + " 105\n", + " 4\n", + " Good Will Hunting (1997)\n", + " Drama\n", + " \n", + " \n", + " 54121\n", + " 105\n", + " 3\n", + " Boogie Nights (1997)\n", + " Drama\n", + " \n", + " \n", + " 55439\n", + " 105\n", + " 3\n", + " Seven Years in Tibet (1997)\n", + " Drama, War\n", + " \n", + " \n", + " 69687\n", + " 105\n", + " 3\n", + " Wag the Dog (1997)\n", + " Comedy, Drama\n", + " \n", + " \n", + " 7321\n", + " 105\n", + " 2\n", + " Saint, The (1997)\n", + " Action, Romance, Thriller\n", + " \n", + " \n", + " 45056\n", + " 105\n", + " 2\n", + " Tomorrow Never Dies (1997)\n", + " Action, Romance, Thriller\n", + " \n", + " \n", + " 64052\n", + " 105\n", + " 2\n", + " Alien: Resurrection (1997)\n", + " Action, Horror, Sci-Fi\n", " \n", " \n", "\n", "" ], "text/plain": [ - " user rating title \\\n", - "269 523 5 Toy Story (1995) \n", - "31247 523 5 Grease (1978) \n", - "35233 523 5 Much Ado About Nothing (1993) \n", - "35436 523 5 Fantasia (1940) \n", - "36537 523 5 Shine (1996) \n", - "37146 523 5 Contact (1997) \n", - "38982 523 5 Full Monty, The (1997) \n", - "1197 523 5 Four Weddings and a Funeral (1994) \n", - "44756 523 5 Butch Cassidy and the Sundance Kid (1969) \n", - "45918 523 5 Wallace & Gromit: The Best of Aardman Animatio... \n", - "46339 523 5 Grand Day Out, A (1992) \n", - "50119 523 5 Mrs. Brown (Her Majesty, Mrs. Brown) (1997) \n", - "50338 523 5 Close Shave, A (1995) \n", - "52950 523 5 Kolya (1996) \n", - "53361 523 5 Multiplicity (1996) \n", + " user rating title \\\n", + "24754 105 5 Gattaca (1997) \n", + "37073 105 5 Contact (1997) \n", + "40592 105 5 Titanic (1997) \n", + "46032 105 5 L.A. Confidential (1997) \n", + "17916 105 4 English Patient, The (1996) \n", + "23767 105 4 Chasing Amy (1997) \n", + "47003 105 4 Cop Land (1997) \n", + "48891 105 4 Lost Highway (1997) \n", + "67355 105 4 Good Will Hunting (1997) \n", + "54121 105 3 Boogie Nights (1997) \n", + "55439 105 3 Seven Years in Tibet (1997) \n", + "69687 105 3 Wag the Dog (1997) \n", + "7321 105 2 Saint, The (1997) \n", + "45056 105 2 Tomorrow Never Dies (1997) \n", + "64052 105 2 Alien: Resurrection (1997) \n", "\n", - " genres \n", - "269 Animation, Children's, Comedy \n", - "31247 Comedy, Musical, Romance \n", - "35233 Comedy, Romance \n", - "35436 Animation, Children's, Musical \n", - "36537 Drama, Romance \n", - "37146 Drama, Sci-Fi \n", - "38982 Comedy \n", - "1197 Comedy, Romance \n", - "44756 Action, Comedy, Western \n", - "45918 Animation \n", - "46339 Animation, Comedy \n", - "50119 Drama, Romance \n", - "50338 Animation, Comedy, Thriller \n", - "52950 Comedy \n", - "53361 Comedy " + " genres \n", + "24754 Drama, Sci-Fi, Thriller \n", + "37073 Drama, Sci-Fi \n", + "40592 Action, Drama, Romance \n", + "46032 Crime, Film-Noir, Mystery, Thriller \n", + "17916 Drama, Romance, War \n", + "23767 Drama, Romance \n", + "47003 Crime, Drama, Mystery \n", + "48891 Mystery \n", + "67355 Drama \n", + "54121 Drama \n", + "55439 Drama, War \n", + "69687 Comedy, Drama \n", + "7321 Action, Romance, Thriller \n", + "45056 Action, Romance, Thriller \n", + "64052 Action, Horror, Sci-Fi " ] }, "metadata": {}, @@ -1754,71 +1429,71 @@ " \n", " \n", " \n", - " 521\n", - " 523.0\n", + " 103\n", + " 105.0\n", " 1\n", " Great Day in Harlem, A (1994)\n", " Documentary\n", " \n", " \n", - " 1463\n", - " 523.0\n", + " 1046\n", + " 105.0\n", " 2\n", " Tough and Deadly (1995)\n", " Action, Drama, Thriller\n", " \n", " \n", - " 2405\n", - " 523.0\n", + " 1988\n", + " 105.0\n", " 3\n", " Aiqing wansui (1994)\n", " Drama\n", " \n", " \n", - " 3347\n", - " 523.0\n", + " 2930\n", + " 105.0\n", " 4\n", " Delta of Venus (1994)\n", " Drama\n", " \n", " \n", - " 4289\n", - " 523.0\n", + " 3872\n", + " 105.0\n", " 5\n", " Someone Else's America (1995)\n", " Drama\n", " \n", " \n", - " 5231\n", - " 523.0\n", + " 4814\n", + " 105.0\n", " 6\n", " Saint of Fort Washington, The (1993)\n", " Drama\n", " \n", " \n", - " 6173\n", - " 523.0\n", + " 5755\n", + " 105.0\n", " 7\n", " Celestial Clockwork (1994)\n", " Comedy\n", " \n", " \n", - " 7116\n", - " 523.0\n", + " 6698\n", + " 105.0\n", " 8\n", " Some Mother's Son (1996)\n", " Drama\n", " \n", " \n", - " 9010\n", - " 523.0\n", + " 8592\n", + " 105.0\n", " 9\n", " Maya Lin: A Strong Clear Vision (1994)\n", " Documentary\n", " \n", " \n", - " 8056\n", - " 523.0\n", + " 7638\n", + " 105.0\n", " 10\n", " Prefontaine (1997)\n", " Drama\n", @@ -1829,31 +1504,31 @@ ], "text/plain": [ " user rec_nb title \\\n", - "521 523.0 1 Great Day in Harlem, A (1994) \n", - "1463 523.0 2 Tough and Deadly (1995) \n", - "2405 523.0 3 Aiqing wansui (1994) \n", - "3347 523.0 4 Delta of Venus (1994) \n", - "4289 523.0 5 Someone Else's America (1995) \n", - "5231 523.0 6 Saint of Fort Washington, The (1993) \n", - "6173 523.0 7 Celestial Clockwork (1994) \n", - "7116 523.0 8 Some Mother's Son (1996) \n", - "9010 523.0 9 Maya Lin: A Strong Clear Vision (1994) \n", - "8056 523.0 10 Prefontaine (1997) \n", + "103 105.0 1 Great Day in Harlem, A (1994) \n", + "1046 105.0 2 Tough and Deadly (1995) \n", + "1988 105.0 3 Aiqing wansui (1994) \n", + "2930 105.0 4 Delta of Venus (1994) \n", + "3872 105.0 5 Someone Else's America (1995) \n", + "4814 105.0 6 Saint of Fort Washington, The (1993) \n", + "5755 105.0 7 Celestial Clockwork (1994) \n", + "6698 105.0 8 Some Mother's Son (1996) \n", + "8592 105.0 9 Maya Lin: A Strong Clear Vision (1994) \n", + "7638 105.0 10 Prefontaine (1997) \n", "\n", " genres \n", - "521 Documentary \n", - "1463 Action, Drama, Thriller \n", - "2405 Drama \n", - "3347 Drama \n", - "4289 Drama \n", - "5231 Drama \n", - "6173 Comedy \n", - "7116 Drama \n", - "9010 Documentary \n", - "8056 Drama " + "103 Documentary \n", + "1046 Action, Drama, Thriller \n", + "1988 Drama \n", + "2930 Drama \n", + "3872 Drama \n", + "4814 Drama \n", + "5755 Comedy \n", + "6698 Drama \n", + "8592 Documentary \n", + "7638 Drama " ] }, - "execution_count": 66, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -1913,29 +1588,18 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "943it [00:00, 8687.43it/s]\n", - "943it [00:00, 7296.38it/s]\n", - "943it [00:00, 8704.77it/s]\n", - "943it [00:00, 8001.89it/s]\n", - "943it [00:00, 8997.15it/s]\n", - "943it [00:00, 8387.52it/s]\n", - "943it [00:00, 8062.71it/s]\n", - "943it [00:00, 7400.45it/s]\n", - "943it [00:00, 7525.94it/s]\n", - "943it [00:00, 8338.86it/s]\n", - "943it [00:00, 8715.87it/s]\n", - "943it [00:00, 8283.65it/s]\n", - "943it [00:00, 8345.05it/s]\n", - "943it [00:00, 7972.31it/s]\n", - "943it [00:00, 8179.38it/s]\n", - "943it [00:00, 8320.16it/s]\n" + "943it [00:00, 9023.32it/s]\n", + "943it [00:00, 9004.98it/s]\n", + "943it [00:00, 8532.40it/s]\n", + "943it [00:00, 8974.06it/s]\n", + "943it [00:00, 8818.01it/s]\n" ] }, { @@ -1982,27 +1646,6 @@ " \n", " \n", " 0\n", - " Self_RP3Beta\n", - " 3.702446\n", - " 3.527273\n", - " 0.282185\n", - " 0.192092\n", - " 0.186749\n", - " 0.216980\n", - " 0.204185\n", - " 0.240096\n", - " 0.339114\n", - " 0.204905\n", - " 0.572157\n", - " 0.593544\n", - " 0.875928\n", - " 1.000000\n", - " 0.077201\n", - " 3.875892\n", - " 0.974947\n", - " \n", - " \n", - " 0\n", " Self_TopPop\n", " 2.508258\n", " 2.217909\n", @@ -2024,69 +1667,6 @@ " \n", " \n", " 0\n", - " Ready_SVD\n", - " 0.952784\n", - " 0.750597\n", - " 0.095228\n", - " 0.047497\n", - " 0.053142\n", - " 0.067082\n", - " 0.084871\n", - " 0.076457\n", - " 0.109075\n", - " 0.050124\n", - " 0.241366\n", - " 0.520459\n", - " 0.499470\n", - " 0.992047\n", - " 0.217893\n", - " 4.405246\n", - " 0.953484\n", - " \n", - " \n", - " 0\n", - " Self_SVDBaseline\n", - " 0.930321\n", - " 0.734643\n", - " 0.092683\n", - " 0.042046\n", - " 0.048568\n", - " 0.063218\n", - " 0.082940\n", - " 0.068730\n", - " 0.098937\n", - " 0.044405\n", - " 0.203936\n", - " 0.517696\n", - " 0.469777\n", - " 1.000000\n", - " 0.058442\n", - " 3.085857\n", - " 0.988824\n", - " \n", - " \n", - " 0\n", - " Ready_SVDBiased\n", - " 0.940375\n", - " 0.742264\n", - " 0.092153\n", - " 0.039645\n", - " 0.046804\n", - " 0.061886\n", - " 0.079399\n", - " 0.055967\n", - " 0.102017\n", - " 0.047972\n", - " 0.216876\n", - " 0.516515\n", - " 0.441145\n", - " 0.997455\n", - " 0.167388\n", - " 4.235348\n", - " 0.962085\n", - " \n", - " \n", - " 0\n", " Ready_Baseline\n", " 0.949459\n", " 0.752487\n", @@ -2108,27 +1688,6 @@ " \n", " \n", " 0\n", - " Self_SVD\n", - " 0.939326\n", - " 0.740022\n", - " 0.074549\n", - " 0.031755\n", - " 0.038425\n", - " 0.050562\n", - " 0.065665\n", - " 0.050602\n", - " 0.077117\n", - " 0.031574\n", - " 0.165509\n", - " 0.512485\n", - " 0.414634\n", - " 0.981866\n", - " 0.080087\n", - " 3.858982\n", - " 0.975271\n", - " \n", - " \n", - " 0\n", " Self_GlobalAvg\n", " 1.125760\n", " 0.943534\n", @@ -2151,128 +1710,23 @@ " \n", " 0\n", " Ready_Random\n", - " 1.518551\n", - " 1.218784\n", - " 0.050583\n", - " 0.024085\n", - " 0.027323\n", - " 0.034826\n", - " 0.031223\n", - " 0.026436\n", - " 0.054902\n", - " 0.020652\n", - " 0.137928\n", - " 0.508570\n", - " 0.353128\n", - " 0.987699\n", - " 0.183261\n", - " 5.093805\n", - " 0.908215\n", - " \n", - " \n", - " 0\n", - " Ready_I-KNN\n", - " 1.030386\n", - " 0.813067\n", - " 0.026087\n", - " 0.006908\n", - " 0.010593\n", - " 0.016046\n", - " 0.021137\n", - " 0.009522\n", - " 0.024214\n", - " 0.008958\n", - " 0.048068\n", - " 0.499885\n", - " 0.154825\n", - " 0.402333\n", - " 0.434343\n", - " 5.133650\n", - " 0.877999\n", - " \n", - " \n", - " 0\n", - " Ready_I-KNNBaseline\n", - " 0.935327\n", - " 0.737424\n", - " 0.002545\n", - " 0.000755\n", - " 0.001105\n", - " 0.001602\n", - " 0.002253\n", - " 0.000930\n", - " 0.003444\n", - " 0.001362\n", - " 0.011760\n", - " 0.496724\n", - " 0.021209\n", - " 0.482821\n", - " 0.059885\n", - " 2.232578\n", - " 0.994487\n", - " \n", - " \n", - " 0\n", - " Ready_U-KNNBaseline\n", - " 0.935327\n", - " 0.737424\n", - " 0.002545\n", - " 0.000755\n", - " 0.001105\n", - " 0.001602\n", - " 0.002253\n", - " 0.000930\n", - " 0.003444\n", - " 0.001362\n", - " 0.011760\n", - " 0.496724\n", - " 0.021209\n", - " 0.482821\n", - " 0.059885\n", - " 2.232578\n", - " 0.994487\n", - " \n", - " \n", - " 0\n", - " Ready_U-KNN\n", - " 1.023495\n", - " 0.807913\n", - " 0.000742\n", - " 0.000205\n", - " 0.000305\n", - " 0.000449\n", - " 0.000536\n", - " 0.000198\n", - " 0.000845\n", - " 0.000274\n", - " 0.002744\n", - " 0.496441\n", - " 0.007423\n", - " 0.602121\n", - " 0.010823\n", - " 2.089186\n", - " 0.995706\n", - " \n", - " \n", - " 0\n", - " Self_TopRated\n", - " 1.033085\n", - " 0.822057\n", - " 0.000954\n", - " 0.000188\n", - " 0.000298\n", - " 0.000481\n", - " 0.000644\n", - " 0.000223\n", - " 0.001043\n", - " 0.000335\n", - " 0.003348\n", - " 0.496433\n", - " 0.009544\n", - " 0.699046\n", - " 0.005051\n", - " 1.945910\n", - " 0.995669\n", + " 1.518964\n", + " 1.222159\n", + " 0.046554\n", + " 0.020603\n", + " 0.023679\n", + " 0.031216\n", + " 0.028970\n", + " 0.021179\n", + " 0.050489\n", + " 0.019185\n", + " 0.123856\n", + " 0.506812\n", + " 0.322375\n", + " 0.987805\n", + " 0.184704\n", + " 5.103172\n", + " 0.906873\n", " \n", " \n", " 0\n", @@ -2295,88 +1749,34 @@ " 1.803126\n", " 0.996380\n", " \n", - " \n", - " 0\n", - " Self_IKNN\n", - " 1.018363\n", - " 0.808793\n", - " 0.000318\n", - " 0.000108\n", - " 0.000140\n", - " 0.000189\n", - " 0.000000\n", - " 0.000000\n", - " 0.000214\n", - " 0.000037\n", - " 0.000368\n", - " 0.496391\n", - " 0.003181\n", - " 0.392153\n", - " 0.115440\n", - " 4.174741\n", - " 0.965327\n", - " \n", " \n", "\n", "" ], "text/plain": [ - " Model RMSE MAE precision recall F_1 \\\n", - "0 Self_RP3Beta 3.702446 3.527273 0.282185 0.192092 0.186749 \n", - "0 Self_TopPop 2.508258 2.217909 0.188865 0.116919 0.118732 \n", - "0 Ready_SVD 0.952784 0.750597 0.095228 0.047497 0.053142 \n", - "0 Self_SVDBaseline 0.930321 0.734643 0.092683 0.042046 0.048568 \n", - "0 Ready_SVDBiased 0.940375 0.742264 0.092153 0.039645 0.046804 \n", - "0 Ready_Baseline 0.949459 0.752487 0.091410 0.037652 0.046030 \n", - "0 Self_SVD 0.939326 0.740022 0.074549 0.031755 0.038425 \n", - "0 Self_GlobalAvg 1.125760 0.943534 0.061188 0.025968 0.031383 \n", - "0 Ready_Random 1.518551 1.218784 0.050583 0.024085 0.027323 \n", - "0 Ready_I-KNN 1.030386 0.813067 0.026087 0.006908 0.010593 \n", - "0 Ready_I-KNNBaseline 0.935327 0.737424 0.002545 0.000755 0.001105 \n", - "0 Ready_U-KNNBaseline 0.935327 0.737424 0.002545 0.000755 0.001105 \n", - "0 Ready_U-KNN 1.023495 0.807913 0.000742 0.000205 0.000305 \n", - "0 Self_TopRated 1.033085 0.822057 0.000954 0.000188 0.000298 \n", - "0 Self_BaselineUI 0.967585 0.762740 0.000954 0.000170 0.000278 \n", - "0 Self_IKNN 1.018363 0.808793 0.000318 0.000108 0.000140 \n", + " Model RMSE MAE precision recall F_1 \\\n", + "0 Self_TopPop 2.508258 2.217909 0.188865 0.116919 0.118732 \n", + "0 Ready_Baseline 0.949459 0.752487 0.091410 0.037652 0.046030 \n", + "0 Self_GlobalAvg 1.125760 0.943534 0.061188 0.025968 0.031383 \n", + "0 Ready_Random 1.518964 1.222159 0.046554 0.020603 0.023679 \n", + "0 Self_BaselineUI 0.967585 0.762740 0.000954 0.000170 0.000278 \n", "\n", " F_05 precision_super recall_super NDCG mAP MRR \\\n", - "0 0.216980 0.204185 0.240096 0.339114 0.204905 0.572157 \n", "0 0.141584 0.130472 0.137473 0.214651 0.111707 0.400939 \n", - "0 0.067082 0.084871 0.076457 0.109075 0.050124 0.241366 \n", - "0 0.063218 0.082940 0.068730 0.098937 0.044405 0.203936 \n", - "0 0.061886 0.079399 0.055967 0.102017 0.047972 0.216876 \n", "0 0.061286 0.079614 0.056463 0.095957 0.043178 0.198193 \n", - "0 0.050562 0.065665 0.050602 0.077117 0.031574 0.165509 \n", "0 0.041343 0.040558 0.032107 0.067695 0.027470 0.171187 \n", - "0 0.034826 0.031223 0.026436 0.054902 0.020652 0.137928 \n", - "0 0.016046 0.021137 0.009522 0.024214 0.008958 0.048068 \n", - "0 0.001602 0.002253 0.000930 0.003444 0.001362 0.011760 \n", - "0 0.001602 0.002253 0.000930 0.003444 0.001362 0.011760 \n", - "0 0.000449 0.000536 0.000198 0.000845 0.000274 0.002744 \n", - "0 0.000481 0.000644 0.000223 0.001043 0.000335 0.003348 \n", + "0 0.031216 0.028970 0.021179 0.050489 0.019185 0.123856 \n", "0 0.000463 0.000644 0.000189 0.000752 0.000168 0.001677 \n", - "0 0.000189 0.000000 0.000000 0.000214 0.000037 0.000368 \n", "\n", " LAUC HR Reco in test Test coverage Shannon Gini \n", - "0 0.593544 0.875928 1.000000 0.077201 3.875892 0.974947 \n", "0 0.555546 0.765642 1.000000 0.038961 3.159079 0.987317 \n", - "0 0.520459 0.499470 0.992047 0.217893 4.405246 0.953484 \n", - "0 0.517696 0.469777 1.000000 0.058442 3.085857 0.988824 \n", - "0 0.516515 0.441145 0.997455 0.167388 4.235348 0.962085 \n", "0 0.515501 0.437964 1.000000 0.033911 2.836513 0.991139 \n", - "0 0.512485 0.414634 0.981866 0.080087 3.858982 0.975271 \n", "0 0.509546 0.384942 1.000000 0.025974 2.711772 0.992003 \n", - "0 0.508570 0.353128 0.987699 0.183261 5.093805 0.908215 \n", - "0 0.499885 0.154825 0.402333 0.434343 5.133650 0.877999 \n", - "0 0.496724 0.021209 0.482821 0.059885 2.232578 0.994487 \n", - "0 0.496724 0.021209 0.482821 0.059885 2.232578 0.994487 \n", - "0 0.496441 0.007423 0.602121 0.010823 2.089186 0.995706 \n", - "0 0.496433 0.009544 0.699046 0.005051 1.945910 0.995669 \n", - "0 0.496424 0.009544 0.600530 0.005051 1.803126 0.996380 \n", - "0 0.496391 0.003181 0.392153 0.115440 4.174741 0.965327 " + "0 0.506812 0.322375 0.987805 0.184704 5.103172 0.906873 \n", + "0 0.496424 0.009544 0.600530 0.005051 1.803126 0.996380 " ] }, - "execution_count": 72, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } diff --git a/P2. Evaluation.pdf b/P2. Evaluation.pdf new file mode 100644 index 0000000..87c69c6 Binary files /dev/null and b/P2. Evaluation.pdf differ diff --git a/P3. k-nearest neighbours.ipynb b/P3. k-nearest neighbours.ipynb index a8ac072..09ab5e4 100644 --- a/P3. k-nearest neighbours.ipynb +++ b/P3. k-nearest neighbours.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -73,7 +73,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -154,7 +154,7 @@ " [20, 10, 5.0, 20, 5.0]]" ] }, - "execution_count": 5, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -185,7 +185,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -202,14 +202,14 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "943it [00:00, 8845.73it/s]\n" + "943it [00:00, 10667.92it/s]\n" ] }, { @@ -288,7 +288,7 @@ "0 0.003181 0.392153 0.11544 4.174741 0.965327 " ] }, - "execution_count": 7, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -306,29 +306,19 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "943it [00:00, 7423.18it/s]\n", - "943it [00:00, 7890.87it/s]\n", - "943it [00:00, 7370.82it/s]\n", - "943it [00:00, 8035.93it/s]\n", - "943it [00:00, 8071.70it/s]\n", - "943it [00:00, 7893.80it/s]\n", - "943it [00:00, 8159.55it/s]\n", - "943it [00:00, 7982.77it/s]\n", - "943it [00:00, 7514.53it/s]\n", - "943it [00:00, 8047.34it/s]\n", - "943it [00:00, 7874.80it/s]\n", - "943it [00:00, 7657.62it/s]\n", - "943it [00:00, 8281.73it/s]\n", - "943it [00:00, 8253.33it/s]\n", - "943it [00:00, 8332.31it/s]\n", - "943it [00:00, 8348.73it/s]\n" + "943it [00:00, 8975.00it/s]\n", + "943it [00:00, 10288.02it/s]\n", + "943it [00:00, 9740.46it/s]\n", + "943it [00:00, 10104.74it/s]\n", + "943it [00:00, 10418.45it/s]\n", + "943it [00:00, 10339.85it/s]\n" ] }, { @@ -375,27 +365,6 @@ " \n", " \n", " 0\n", - " Self_RP3Beta\n", - " 3.702446\n", - " 3.527273\n", - " 0.282185\n", - " 0.192092\n", - " 0.186749\n", - " 0.216980\n", - " 0.204185\n", - " 0.240096\n", - " 0.339114\n", - " 0.204905\n", - " 0.572157\n", - " 0.593544\n", - " 0.875928\n", - " 1.000000\n", - " 0.077201\n", - " 3.875892\n", - " 0.974947\n", - " \n", - " \n", - " 0\n", " Self_TopPop\n", " 2.508258\n", " 2.217909\n", @@ -417,69 +386,6 @@ " \n", " \n", " 0\n", - " Ready_SVD\n", - " 0.952784\n", - " 0.750597\n", - " 0.095228\n", - " 0.047497\n", - " 0.053142\n", - " 0.067082\n", - " 0.084871\n", - " 0.076457\n", - " 0.109075\n", - " 0.050124\n", - " 0.241366\n", - " 0.520459\n", - " 0.499470\n", - " 0.992047\n", - " 0.217893\n", - " 4.405246\n", - " 0.953484\n", - " \n", - " \n", - " 0\n", - " Self_SVDBaseline\n", - " 0.930321\n", - " 0.734643\n", - " 0.092683\n", - " 0.042046\n", - " 0.048568\n", - " 0.063218\n", - " 0.082940\n", - " 0.068730\n", - " 0.098937\n", - " 0.044405\n", - " 0.203936\n", - " 0.517696\n", - " 0.469777\n", - " 1.000000\n", - " 0.058442\n", - " 3.085857\n", - " 0.988824\n", - " \n", - " \n", - " 0\n", - " Ready_SVDBiased\n", - " 0.940375\n", - " 0.742264\n", - " 0.092153\n", - " 0.039645\n", - " 0.046804\n", - " 0.061886\n", - " 0.079399\n", - " 0.055967\n", - " 0.102017\n", - " 0.047972\n", - " 0.216876\n", - " 0.516515\n", - " 0.441145\n", - " 0.997455\n", - " 0.167388\n", - " 4.235348\n", - " 0.962085\n", - " \n", - " \n", - " 0\n", " Ready_Baseline\n", " 0.949459\n", " 0.752487\n", @@ -501,27 +407,6 @@ " \n", " \n", " 0\n", - " Self_SVD\n", - " 0.939326\n", - " 0.740022\n", - " 0.074549\n", - " 0.031755\n", - " 0.038425\n", - " 0.050562\n", - " 0.065665\n", - " 0.050602\n", - " 0.077117\n", - " 0.031574\n", - " 0.165509\n", - " 0.512485\n", - " 0.414634\n", - " 0.981866\n", - " 0.080087\n", - " 3.858982\n", - " 0.975271\n", - " \n", - " \n", - " 0\n", " Self_GlobalAvg\n", " 1.125760\n", " 0.943534\n", @@ -544,128 +429,23 @@ " \n", " 0\n", " Ready_Random\n", - " 1.518551\n", - " 1.218784\n", - " 0.050583\n", - " 0.024085\n", - " 0.027323\n", - " 0.034826\n", - " 0.031223\n", - " 0.026436\n", - " 0.054902\n", - " 0.020652\n", - " 0.137928\n", - " 0.508570\n", - " 0.353128\n", - " 0.987699\n", - " 0.183261\n", - " 5.093805\n", - " 0.908215\n", - " \n", - " \n", - " 0\n", - " Ready_I-KNN\n", - " 1.030386\n", - " 0.813067\n", - " 0.026087\n", - " 0.006908\n", - " 0.010593\n", - " 0.016046\n", - " 0.021137\n", - " 0.009522\n", - " 0.024214\n", - " 0.008958\n", - " 0.048068\n", - " 0.499885\n", - " 0.154825\n", - " 0.402333\n", - " 0.434343\n", - " 5.133650\n", - " 0.877999\n", - " \n", - " \n", - " 0\n", - " Ready_U-KNNBaseline\n", - " 0.935327\n", - " 0.737424\n", - " 0.002545\n", - " 0.000755\n", - " 0.001105\n", - " 0.001602\n", - " 0.002253\n", - " 0.000930\n", - " 0.003444\n", - " 0.001362\n", - " 0.011760\n", - " 0.496724\n", - " 0.021209\n", - " 0.482821\n", - " 0.059885\n", - " 2.232578\n", - " 0.994487\n", - " \n", - " \n", - " 0\n", - " Ready_I-KNNBaseline\n", - " 0.935327\n", - " 0.737424\n", - " 0.002545\n", - " 0.000755\n", - " 0.001105\n", - " 0.001602\n", - " 0.002253\n", - " 0.000930\n", - " 0.003444\n", - " 0.001362\n", - " 0.011760\n", - " 0.496724\n", - " 0.021209\n", - " 0.482821\n", - " 0.059885\n", - " 2.232578\n", - " 0.994487\n", - " \n", - " \n", - " 0\n", - " Ready_U-KNN\n", - " 1.023495\n", - " 0.807913\n", - " 0.000742\n", - " 0.000205\n", - " 0.000305\n", - " 0.000449\n", - " 0.000536\n", - " 0.000198\n", - " 0.000845\n", - " 0.000274\n", - " 0.002744\n", - " 0.496441\n", - " 0.007423\n", - " 0.602121\n", - " 0.010823\n", - " 2.089186\n", - " 0.995706\n", - " \n", - " \n", - " 0\n", - " Self_TopRated\n", - " 1.033085\n", - " 0.822057\n", - " 0.000954\n", - " 0.000188\n", - " 0.000298\n", - " 0.000481\n", - " 0.000644\n", - " 0.000223\n", - " 0.001043\n", - " 0.000335\n", - " 0.003348\n", - " 0.496433\n", - " 0.009544\n", - " 0.699046\n", - " 0.005051\n", - " 1.945910\n", - " 0.995669\n", + " 1.518964\n", + " 1.222159\n", + " 0.046554\n", + " 0.020603\n", + " 0.023679\n", + " 0.031216\n", + " 0.028970\n", + " 0.021179\n", + " 0.050489\n", + " 0.019185\n", + " 0.123856\n", + " 0.506812\n", + " 0.322375\n", + " 0.987805\n", + " 0.184704\n", + " 5.103172\n", + " 0.906873\n", " \n", " \n", " 0\n", @@ -714,62 +494,32 @@ "" ], "text/plain": [ - " Model RMSE MAE precision recall F_1 \\\n", - "0 Self_RP3Beta 3.702446 3.527273 0.282185 0.192092 0.186749 \n", - "0 Self_TopPop 2.508258 2.217909 0.188865 0.116919 0.118732 \n", - "0 Ready_SVD 0.952784 0.750597 0.095228 0.047497 0.053142 \n", - "0 Self_SVDBaseline 0.930321 0.734643 0.092683 0.042046 0.048568 \n", - "0 Ready_SVDBiased 0.940375 0.742264 0.092153 0.039645 0.046804 \n", - "0 Ready_Baseline 0.949459 0.752487 0.091410 0.037652 0.046030 \n", - "0 Self_SVD 0.939326 0.740022 0.074549 0.031755 0.038425 \n", - "0 Self_GlobalAvg 1.125760 0.943534 0.061188 0.025968 0.031383 \n", - "0 Ready_Random 1.518551 1.218784 0.050583 0.024085 0.027323 \n", - "0 Ready_I-KNN 1.030386 0.813067 0.026087 0.006908 0.010593 \n", - "0 Ready_U-KNNBaseline 0.935327 0.737424 0.002545 0.000755 0.001105 \n", - "0 Ready_I-KNNBaseline 0.935327 0.737424 0.002545 0.000755 0.001105 \n", - "0 Ready_U-KNN 1.023495 0.807913 0.000742 0.000205 0.000305 \n", - "0 Self_TopRated 1.033085 0.822057 0.000954 0.000188 0.000298 \n", - "0 Self_BaselineUI 0.967585 0.762740 0.000954 0.000170 0.000278 \n", - "0 Self_IKNN 1.018363 0.808793 0.000318 0.000108 0.000140 \n", + " Model RMSE MAE precision recall F_1 \\\n", + "0 Self_TopPop 2.508258 2.217909 0.188865 0.116919 0.118732 \n", + "0 Ready_Baseline 0.949459 0.752487 0.091410 0.037652 0.046030 \n", + "0 Self_GlobalAvg 1.125760 0.943534 0.061188 0.025968 0.031383 \n", + "0 Ready_Random 1.518964 1.222159 0.046554 0.020603 0.023679 \n", + "0 Self_BaselineUI 0.967585 0.762740 0.000954 0.000170 0.000278 \n", + "0 Self_IKNN 1.018363 0.808793 0.000318 0.000108 0.000140 \n", "\n", " F_05 precision_super recall_super NDCG mAP MRR \\\n", - "0 0.216980 0.204185 0.240096 0.339114 0.204905 0.572157 \n", "0 0.141584 0.130472 0.137473 0.214651 0.111707 0.400939 \n", - "0 0.067082 0.084871 0.076457 0.109075 0.050124 0.241366 \n", - "0 0.063218 0.082940 0.068730 0.098937 0.044405 0.203936 \n", - "0 0.061886 0.079399 0.055967 0.102017 0.047972 0.216876 \n", "0 0.061286 0.079614 0.056463 0.095957 0.043178 0.198193 \n", - "0 0.050562 0.065665 0.050602 0.077117 0.031574 0.165509 \n", "0 0.041343 0.040558 0.032107 0.067695 0.027470 0.171187 \n", - "0 0.034826 0.031223 0.026436 0.054902 0.020652 0.137928 \n", - "0 0.016046 0.021137 0.009522 0.024214 0.008958 0.048068 \n", - "0 0.001602 0.002253 0.000930 0.003444 0.001362 0.011760 \n", - "0 0.001602 0.002253 0.000930 0.003444 0.001362 0.011760 \n", - "0 0.000449 0.000536 0.000198 0.000845 0.000274 0.002744 \n", - "0 0.000481 0.000644 0.000223 0.001043 0.000335 0.003348 \n", + "0 0.031216 0.028970 0.021179 0.050489 0.019185 0.123856 \n", "0 0.000463 0.000644 0.000189 0.000752 0.000168 0.001677 \n", "0 0.000189 0.000000 0.000000 0.000214 0.000037 0.000368 \n", "\n", " LAUC HR Reco in test Test coverage Shannon Gini \n", - "0 0.593544 0.875928 1.000000 0.077201 3.875892 0.974947 \n", "0 0.555546 0.765642 1.000000 0.038961 3.159079 0.987317 \n", - "0 0.520459 0.499470 0.992047 0.217893 4.405246 0.953484 \n", - "0 0.517696 0.469777 1.000000 0.058442 3.085857 0.988824 \n", - "0 0.516515 0.441145 0.997455 0.167388 4.235348 0.962085 \n", "0 0.515501 0.437964 1.000000 0.033911 2.836513 0.991139 \n", - "0 0.512485 0.414634 0.981866 0.080087 3.858982 0.975271 \n", "0 0.509546 0.384942 1.000000 0.025974 2.711772 0.992003 \n", - "0 0.508570 0.353128 0.987699 0.183261 5.093805 0.908215 \n", - "0 0.499885 0.154825 0.402333 0.434343 5.133650 0.877999 \n", - "0 0.496724 0.021209 0.482821 0.059885 2.232578 0.994487 \n", - "0 0.496724 0.021209 0.482821 0.059885 2.232578 0.994487 \n", - "0 0.496441 0.007423 0.602121 0.010823 2.089186 0.995706 \n", - "0 0.496433 0.009544 0.699046 0.005051 1.945910 0.995669 \n", + "0 0.506812 0.322375 0.987805 0.184704 5.103172 0.906873 \n", "0 0.496424 0.009544 0.600530 0.005051 1.803126 0.996380 \n", "0 0.496391 0.003181 0.392153 0.115440 4.174741 0.965327 " ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -802,7 +552,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -828,7 +578,7 @@ "algo = sp.KNNBasic(sim_options=sim_options)\n", "\n", "helpers.ready_made(algo, reco_path='Recommendations generated/ml-100k/Ready_I-KNN_reco.csv',\n", - " estimations_path='Recommendations generated/ml-100k/Ready_Baseline_I-KNN_estimations.csv')" + " estimations_path='Recommendations generated/ml-100k/Ready_I-KNN_estimations.csv')" ] }, { @@ -840,7 +590,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -849,27 +599,10 @@ "text": [ "Computing the cosine similarity matrix...\n", "Done computing similarity matrix.\n", + "Generating predictions...\n", + "Generating top N recommendations...\n", "Generating predictions...\n" ] - }, - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m helpers.ready_made(algo, reco_path='Recommendations generated/ml-100k/Ready_U-KNN_reco.csv',\n\u001b[0;32m---> 11\u001b[0;31m estimations_path='Recommendations generated/ml-100k/Ready_Baseline_U-KNN_estimations.csv')\n\u001b[0m", - "\u001b[0;32m/mnt/c/Users/rkwie/Repositories/Warsztaty z uczenia maszynowego - systemy rekomendacyjne/helpers.py\u001b[0m in \u001b[0;36mready_made\u001b[0;34m(algo, reco_path, estimations_path)\u001b[0m\n\u001b[1;32m 61\u001b[0m \u001b[0mantitrainset\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtrainset\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbuild_anti_testset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# We want to predict ratings of pairs (user, item) which are not in train set\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Generating predictions...'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 63\u001b[0;31m \u001b[0mpredictions\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0malgo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mantitrainset\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 64\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Generating top N recommendations...'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0mtop_n\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_top_n\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpredictions\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/surprise/prediction_algorithms/algo_base.py\u001b[0m in \u001b[0;36mtest\u001b[0;34m(self, testset, verbose)\u001b[0m\n\u001b[1;32m 165\u001b[0m \u001b[0mr_ui_trans\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 166\u001b[0m verbose=verbose)\n\u001b[0;32m--> 167\u001b[0;31m for (uid, iid, r_ui_trans) in testset]\n\u001b[0m\u001b[1;32m 168\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mpredictions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/surprise/prediction_algorithms/algo_base.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 165\u001b[0m \u001b[0mr_ui_trans\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 166\u001b[0m verbose=verbose)\n\u001b[0;32m--> 167\u001b[0;31m for (uid, iid, r_ui_trans) in testset]\n\u001b[0m\u001b[1;32m 168\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mpredictions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/surprise/prediction_algorithms/algo_base.py\u001b[0m in \u001b[0;36mpredict\u001b[0;34m(self, uid, iid, r_ui, clip, verbose)\u001b[0m\n\u001b[1;32m 103\u001b[0m \u001b[0mdetails\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 104\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 105\u001b[0;31m \u001b[0mest\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mestimate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0miuid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0miiid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 106\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 107\u001b[0m \u001b[0;31m# If the details dict was also returned\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/surprise/prediction_algorithms/knns.py\u001b[0m in \u001b[0;36mestimate\u001b[0;34m(self, u, i)\u001b[0m\n\u001b[1;32m 109\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[0mneighbors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msim\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mx2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0myr\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 111\u001b[0;31m \u001b[0mk_neighbors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mheapq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnlargest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mneighbors\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 112\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 113\u001b[0m \u001b[0;31m# compute weighted average\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/lib/python3.6/heapq.py\u001b[0m in \u001b[0;36mnlargest\u001b[0;34m(n, iterable, key)\u001b[0m\n\u001b[1;32m 567\u001b[0m \u001b[0;31m# General case, slowest method\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 568\u001b[0m \u001b[0mit\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0miter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0miterable\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 569\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0melem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0melem\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0melem\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mit\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 570\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 571\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/lib/python3.6/heapq.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 567\u001b[0m \u001b[0;31m# General case, slowest method\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 568\u001b[0m \u001b[0mit\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0miter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0miterable\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 569\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0melem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0melem\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0melem\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mit\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 570\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 571\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/surprise/prediction_algorithms/knns.py\u001b[0m in \u001b[0;36m\u001b[0;34m(t)\u001b[0m\n\u001b[1;32m 109\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[0mneighbors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msim\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mx2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0myr\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 111\u001b[0;31m \u001b[0mk_neighbors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mheapq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnlargest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mneighbors\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 112\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 113\u001b[0m \u001b[0;31m# compute weighted average\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] } ], "source": [ @@ -883,7 +616,7 @@ "algo = sp.KNNBasic(sim_options=sim_options)\n", "\n", "helpers.ready_made(algo, reco_path='Recommendations generated/ml-100k/Ready_U-KNN_reco.csv',\n", - " estimations_path='Recommendations generated/ml-100k/Ready_Baseline_U-KNN_estimations.csv')" + " estimations_path='Recommendations generated/ml-100k/Ready_U-KNN_estimations.csv')" ] }, { @@ -895,9 +628,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Estimating biases using als...\n", + "Computing the msd similarity matrix...\n", + "Done computing similarity matrix.\n", + "Generating predictions...\n", + "Generating top N recommendations...\n", + "Generating predictions...\n" + ] + } + ], "source": [ "import helpers\n", "import surprise as sp\n", diff --git a/P3. k-nearest neighbours.pdf b/P3. k-nearest neighbours.pdf new file mode 100644 index 0000000..7f917e8 Binary files /dev/null and b/P3. k-nearest neighbours.pdf differ diff --git a/P4. Appendix - embeddings in high demensional spaces.ipynb b/P4. Appendix - embeddings in high demensional spaces.ipynb index 2fae83b..66bb58d 100644 --- a/P4. Appendix - embeddings in high demensional spaces.ipynb +++ b/P4. Appendix - embeddings in high demensional spaces.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 4, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -11,10 +11,10 @@ "['dimensions: 1, cases when observation is the nearest: 0.0%',\n", " 'dimensions: 2, cases when observation is the nearest: 0.0%',\n", " 'dimensions: 3, cases when observation is the nearest: 0.0%',\n", - " 'dimensions: 10, cases when observation is the nearest: 10.0%',\n", - " 'dimensions: 20, cases when observation is the nearest: 61.0%',\n", - " 'dimensions: 30, cases when observation is the nearest: 96.0%',\n", - " 'dimensions: 40, cases when observation is the nearest: 98.0%',\n", + " 'dimensions: 10, cases when observation is the nearest: 14.000000000000002%',\n", + " 'dimensions: 20, cases when observation is the nearest: 65.0%',\n", + " 'dimensions: 30, cases when observation is the nearest: 100.0%',\n", + " 'dimensions: 40, cases when observation is the nearest: 100.0%',\n", " 'dimensions: 50, cases when observation is the nearest: 100.0%',\n", " 'dimensions: 60, cases when observation is the nearest: 100.0%',\n", " 'dimensions: 70, cases when observation is the nearest: 100.0%',\n", @@ -22,7 +22,7 @@ " 'dimensions: 90, cases when observation is the nearest: 100.0%']" ] }, - "execution_count": 4, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } diff --git a/P4. Matrix Factorization.ipynb b/P4. Matrix Factorization.ipynb index cd7f7d3..a8e4857 100644 --- a/P4. Matrix Factorization.ipynb +++ b/P4. Matrix Factorization.ipynb @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -121,14 +121,14 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Epoch 39 RMSE: 0.7493723517098142. Training epoch 40...: 100%|██████████| 40/40 [02:06<00:00, 3.16s/it]\n" + "Epoch 39 RMSE: 0.7480082047970615. Training epoch 40...: 100%|██████████| 40/40 [01:21<00:00, 2.05s/it]\n" ] } ], @@ -139,24 +139,24 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 15, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "" ] }, "metadata": { @@ -176,24 +176,24 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 16, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3de5yOdf7H8dfHIYeUxNTKOCUd5DBqqH4ppHLISich20nZLVZt2NLarbTbKrXJLpVKRUXnTSelKLWpjOMi5xwGG0s6Uivf3x+fa7hpcBszcx/m/Xw8rsfc93Xdh+/lHp/7mu/38/18LYSAiIikr1KJboCIiBQtBXoRkTSnQC8ikuYU6EVE0pwCvYhImiuT6Absrlq1aqFOnTqJboaISEqZMWPGf0MIGfkd22egN7PRQEdgfQihYT7HDXgA6AB8D1wZQpgZHbsCGBQ99M8hhCf39X516tQhJydnXw8TEZEYZrZyT8fi6bp5Ami3l+PtgfrR1gt4MHrTw4HbgFOA5sBtZlYlviaLiEhh2WegDyFMBTbt5SHnA2OC+xg4zMyqA22BSSGETSGEL4FJ7P0LQ0REikBhDMbWAFbH3M+N9u1pv4iIFKOkGIw1s154tw+1atVKcGtEZH/973//Izc3l61btya6KWmvfPnyZGZmUrZs2bifUxiBfg1QM+Z+ZrRvDdBqt/3v5fcCIYRRwCiA7OxsFd8RSTG5ubkccsgh1KlTB8/PkKIQQmDjxo3k5uZSt27duJ9XGF03E4DLzZ0KfBVCWAe8BZxrZlWiQdhzo30ikma2bt1K1apVFeSLmJlRtWrV/f7LKZ70ynH4lXk1M8vFM2nKAoQQHgLewFMrl+LplVdFxzaZ2Z3A9OilBocQ9jaoKyIpTEG+eBTk33mfgT6E0G0fxwPQew/HRgOj97tVBfYt/n2TVXxvKSKS5NKsBMJDQFM841OTrkREIO0C/TXAYOADoBneo/RxQlskIkVv8+bNjBw5cr+f16FDBzZv3rzfz7vyyiupW7cuWVlZNGnShHfffXfHsVatWlGrVi1iF3Xq3LkzlSpVAmD79u307duXhg0b0qhRI5o1a8bnn38OeGWARo0akZWVRVZWFn379t3vtuUnKdIrC89hwB+BG4CRwL3ArcDkRDZKRIpYXqC//vrrd9m/bds2ypTZc5h74403CvyeQ4cO5eKLL2bKlCn06tWLJUuW7Dh22GGH8a9//YsWLVqwefNm1q1bt+PYs88+y9q1a5k7dy6lSpUiNzeXgw8+eMfxKVOmUK1atQK3Kz9pFujzHArcAvQB/hvtWwNcDQwEWgIaOBIpCjfeCLNnF+5rZmXBsGF7Pn7LLbewbNkysrKyKFu2LOXLl6dKlSosXLiQxYsX07lzZ1avXs3WrVu54YYb6NWrF7Cztta3335L+/btadGiBR999BE1atTglVdeoUKFCvts22mnncaaNWt22de1a1fGjx9PixYteOmll7jwwguZP38+AOvWraN69eqUKuUdKpmZmQX8V4lfmnXd7K4SUCe6vQT4N9AaOBPP9FTKvkg6GDJkCPXq1WP27NkMHTqUmTNn8sADD7B48WIARo8ezYwZM8jJyWH48OFs3LjxZ6+xZMkSevfuzfz58znssMN48cUX43rviRMn0rlz5132tWnThqlTp/LTTz8xfvx4Lr300h3HunTpwquvvkpWVhb9+vVj1qxZuzy3devWO7pu7r///v39p8hXml7R56cVsBx4DBiCl91pCnxClC0qIoVgb1fexaV58+a7TCgaPnw4L7/8MgCrV69myZIlVK1adZfn5PW5A5x88smsWLFir+8xYMAAbr31VnJzc5k2bdoux0qXLk2LFi0YP348W7ZsIbb0emZmJosWLWLy5MlMnjyZNm3a8Pzzz9OmTRugaLpu0vyKfnfl8UzQpXhRzvPYGeSfBNYnplkiUqhi+7zfe+893nnnHaZNm8acOXNo2rRpvhOOypUrt+N26dKl2bZt217fY+jQoSxevJi7776bq6+++mfHu3btSt++fenSpUu+79W+fXuGDh3Krbfeyj//+c/9Ob39VsICfZ5ywBXAndH9lfg8r1p45s68BLVLRArikEMO4Ztvvsn32FdffUWVKlWoWLEiCxcu5OOPCzcTr0+fPmzfvp233tp14v8ZZ5zBwIED6dZt16lIM2fOZO3atYBn4MydO5fatWsXapt2V4K6bvamNrAAXz/lSbx751w8c6deAtslIvGoWrUqp59+Og0bNqRChQoceeSRO461a9eOhx56iBNOOIHjjjuOU089tVDf28wYNGgQ99xzD23btt1lf//+/X/2+PXr13Pttdfyww8/AN7N1KdPnx3HW7duTenSpQFo3LgxY8aM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\n", + "image/png": "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\n", "text/plain": [ - "
" + "" ] }, "metadata": { @@ -220,7 +220,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -236,14 +236,14 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "943it [00:00, 4912.25it/s]\n" + "943it [00:00, 8982.19it/s]\n" ] }, { @@ -289,40 +289,40 @@ " \n", " \n", " 0\n", - " 0.9144\n", - " 0.718047\n", - " 0.103393\n", - " 0.043404\n", - " 0.05292\n", - " 0.070119\n", - " 0.093455\n", - " 0.074901\n", - " 0.107441\n", - " 0.05077\n", - " 0.200719\n", - " 0.518433\n", - " 0.4772\n", - " 0.866384\n", - " 0.145743\n", - " 3.860721\n", - " 0.972299\n", + " 0.914856\n", + " 0.718384\n", + " 0.100424\n", + " 0.040859\n", + " 0.050523\n", + " 0.067431\n", + " 0.090665\n", + " 0.068368\n", + " 0.101328\n", + " 0.047917\n", + " 0.183792\n", + " 0.517141\n", + " 0.459173\n", + " 0.860551\n", + " 0.146465\n", + " 3.853236\n", + " 0.971798\n", " \n", " \n", "\n", "" ], "text/plain": [ - " RMSE MAE precision recall F_1 F_05 precision_super \\\n", - "0 0.9144 0.718047 0.103393 0.043404 0.05292 0.070119 0.093455 \n", + " RMSE MAE precision recall F_1 F_05 \\\n", + "0 0.914856 0.718384 0.100424 0.040859 0.050523 0.067431 \n", "\n", - " recall_super NDCG mAP MRR LAUC HR Reco in test \\\n", - "0 0.074901 0.107441 0.05077 0.200719 0.518433 0.4772 0.866384 \n", + " precision_super recall_super NDCG mAP MRR LAUC \\\n", + "0 0.090665 0.068368 0.101328 0.047917 0.183792 0.517141 \n", "\n", - " Test coverage Shannon Gini \n", - "0 0.145743 3.860721 0.972299 " + " HR Reco in test Test coverage Shannon Gini \n", + "0 0.459173 0.860551 0.146465 3.853236 0.971798 " ] }, - "execution_count": 18, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -341,29 +341,23 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "943it [00:00, 4816.30it/s]\n", - "943it [00:00, 4733.95it/s]\n", - "943it [00:00, 4623.19it/s]\n", - "943it [00:00, 5099.59it/s]\n", - "943it [00:00, 4968.40it/s]\n", - "943it [00:00, 5056.01it/s]\n", - "943it [00:00, 5009.35it/s]\n", - "943it [00:00, 3610.70it/s]\n", - "943it [00:00, 4280.45it/s]\n", - "943it [00:00, 4473.91it/s]\n", - "943it [00:00, 4438.83it/s]\n", - "943it [00:00, 5165.96it/s]\n", - "943it [00:00, 5259.28it/s]\n", - "943it [00:00, 4607.07it/s]\n", - "943it [00:00, 4329.45it/s]\n", - "943it [00:00, 4693.81it/s]\n" + "943it [00:00, 9603.22it/s]\n", + "943it [00:00, 8786.72it/s]\n", + "943it [00:00, 8141.95it/s]\n", + "943it [00:00, 8884.14it/s]\n", + "943it [00:00, 10117.77it/s]\n", + "943it [00:00, 8687.46it/s]\n", + "943it [00:00, 10361.84it/s]\n", + "943it [00:00, 10162.64it/s]\n", + "943it [00:00, 8493.19it/s]\n", + "943it [00:00, 9153.50it/s]\n" ] }, { @@ -410,27 +404,6 @@ " \n", " \n", " 0\n", - " Self_RP3Beta\n", - " 3.702446\n", - " 3.527273\n", - " 0.282185\n", - " 0.192092\n", - " 0.186749\n", - " 0.216980\n", - " 0.204185\n", - " 0.240096\n", - " 0.339114\n", - " 0.204905\n", - " 0.572157\n", - " 0.593544\n", - " 0.875928\n", - " 1.000000\n", - " 0.077201\n", - " 3.875892\n", - " 0.974947\n", - " \n", - " \n", - " 0\n", " Self_TopPop\n", " 2.508258\n", " 2.217909\n", @@ -452,87 +425,24 @@ " \n", " \n", " 0\n", - " Ready_SVD\n", - " 0.952784\n", - " 0.750597\n", - " 0.095228\n", - " 0.047497\n", - " 0.053142\n", - " 0.067082\n", - " 0.084871\n", - " 0.076457\n", - " 0.109075\n", - " 0.050124\n", - " 0.241366\n", - " 0.520459\n", - " 0.499470\n", - " 0.992047\n", - " 0.217893\n", - " 4.405246\n", - " 0.953484\n", - " \n", - " \n", - " 0\n", - " Self_SVDBaseline\n", - " 0.913380\n", - " 0.719974\n", - " 0.105726\n", - " 0.045055\n", - " 0.054233\n", - " 0.071579\n", - " 0.096674\n", - " 0.075899\n", - " 0.119979\n", - " 0.059709\n", - " 0.251389\n", - " 0.519270\n", - " 0.476140\n", - " 0.999788\n", - " 0.115440\n", - " 3.578129\n", - " 0.980463\n", - " \n", - " \n", - " 0\n", " Self_SVD\n", - " 0.914400\n", - " 0.718047\n", - " 0.103393\n", - " 0.043404\n", - " 0.052920\n", - " 0.070119\n", - " 0.093455\n", - " 0.074901\n", - " 0.107441\n", - " 0.050770\n", - " 0.200719\n", - " 0.518433\n", - " 0.477200\n", - " 0.866384\n", - " 0.145743\n", - " 3.860721\n", - " 0.972299\n", - " \n", - " \n", - " 0\n", - " Ready_SVDBiased\n", - " 0.940375\n", - " 0.742264\n", - " 0.092153\n", - " 0.039645\n", - " 0.046804\n", - " 0.061886\n", - " 0.079399\n", - " 0.055967\n", - " 0.102017\n", - " 0.047972\n", - " 0.216876\n", - " 0.516515\n", - " 0.441145\n", - " 0.997455\n", - " 0.167388\n", - " 4.235348\n", - " 0.962085\n", + " 0.914856\n", + " 0.718384\n", + " 0.100424\n", + " 0.040859\n", + " 0.050523\n", + " 0.067431\n", + " 0.090665\n", + " 0.068368\n", + " 0.101328\n", + " 0.047917\n", + " 0.183792\n", + " 0.517141\n", + " 0.459173\n", + " 0.860551\n", + " 0.146465\n", + " 3.853236\n", + " 0.971798\n", " \n", " \n", " 0\n", @@ -579,23 +489,23 @@ " \n", " 0\n", " Ready_Random\n", - " 1.518551\n", - " 1.218784\n", - " 0.050583\n", - " 0.024085\n", - " 0.027323\n", - " 0.034826\n", - " 0.031223\n", - " 0.026436\n", - " 0.054902\n", - " 0.020652\n", - " 0.137928\n", - " 0.508570\n", - " 0.353128\n", - " 0.987699\n", - " 0.183261\n", - " 5.093805\n", - " 0.908215\n", + " 1.518964\n", + " 1.222159\n", + " 0.046554\n", + " 0.020603\n", + " 0.023679\n", + " 0.031216\n", + " 0.028970\n", + " 0.021179\n", + " 0.050489\n", + " 0.019185\n", + " 0.123856\n", + " 0.506812\n", + " 0.322375\n", + " 0.987805\n", + " 0.184704\n", + " 5.103172\n", + " 0.906873\n", " \n", " \n", " 0\n", @@ -620,27 +530,6 @@ " \n", " \n", " 0\n", - " Ready_U-KNNBaseline\n", - " 0.935327\n", - " 0.737424\n", - " 0.002545\n", - " 0.000755\n", - " 0.001105\n", - " 0.001602\n", - " 0.002253\n", - " 0.000930\n", - " 0.003444\n", - " 0.001362\n", - " 0.011760\n", - " 0.496724\n", - " 0.021209\n", - " 0.482821\n", - " 0.059885\n", - " 2.232578\n", - " 0.994487\n", - " \n", - " \n", - " 0\n", " Ready_I-KNNBaseline\n", " 0.935327\n", " 0.737424\n", @@ -683,27 +572,6 @@ " \n", " \n", " 0\n", - " Self_TopRated\n", - " 1.033085\n", - " 0.822057\n", - " 0.000954\n", - " 0.000188\n", - " 0.000298\n", - " 0.000481\n", - " 0.000644\n", - " 0.000223\n", - " 0.001043\n", - " 0.000335\n", - " 0.003348\n", - " 0.496433\n", - " 0.009544\n", - " 0.699046\n", - " 0.005051\n", - " 1.945910\n", - " 0.995669\n", - " \n", - " \n", - " 0\n", " Self_BaselineUI\n", " 0.967585\n", " 0.762740\n", @@ -750,61 +618,43 @@ ], "text/plain": [ " Model RMSE MAE precision recall F_1 \\\n", - "0 Self_RP3Beta 3.702446 3.527273 0.282185 0.192092 0.186749 \n", "0 Self_TopPop 2.508258 2.217909 0.188865 0.116919 0.118732 \n", - "0 Ready_SVD 0.952784 0.750597 0.095228 0.047497 0.053142 \n", - "0 Self_SVDBaseline 0.913380 0.719974 0.105726 0.045055 0.054233 \n", - "0 Self_SVD 0.914400 0.718047 0.103393 0.043404 0.052920 \n", - "0 Ready_SVDBiased 0.940375 0.742264 0.092153 0.039645 0.046804 \n", + "0 Self_SVD 0.914856 0.718384 0.100424 0.040859 0.050523 \n", "0 Ready_Baseline 0.949459 0.752487 0.091410 0.037652 0.046030 \n", "0 Self_GlobalAvg 1.125760 0.943534 0.061188 0.025968 0.031383 \n", - "0 Ready_Random 1.518551 1.218784 0.050583 0.024085 0.027323 \n", + "0 Ready_Random 1.518964 1.222159 0.046554 0.020603 0.023679 \n", "0 Ready_I-KNN 1.030386 0.813067 0.026087 0.006908 0.010593 \n", - "0 Ready_U-KNNBaseline 0.935327 0.737424 0.002545 0.000755 0.001105 \n", "0 Ready_I-KNNBaseline 0.935327 0.737424 0.002545 0.000755 0.001105 \n", "0 Ready_U-KNN 1.023495 0.807913 0.000742 0.000205 0.000305 \n", - "0 Self_TopRated 1.033085 0.822057 0.000954 0.000188 0.000298 \n", "0 Self_BaselineUI 0.967585 0.762740 0.000954 0.000170 0.000278 \n", "0 Self_IKNN 1.018363 0.808793 0.000318 0.000108 0.000140 \n", "\n", " F_05 precision_super recall_super NDCG mAP MRR \\\n", - "0 0.216980 0.204185 0.240096 0.339114 0.204905 0.572157 \n", "0 0.141584 0.130472 0.137473 0.214651 0.111707 0.400939 \n", - "0 0.067082 0.084871 0.076457 0.109075 0.050124 0.241366 \n", - "0 0.071579 0.096674 0.075899 0.119979 0.059709 0.251389 \n", - "0 0.070119 0.093455 0.074901 0.107441 0.050770 0.200719 \n", - "0 0.061886 0.079399 0.055967 0.102017 0.047972 0.216876 \n", + "0 0.067431 0.090665 0.068368 0.101328 0.047917 0.183792 \n", "0 0.061286 0.079614 0.056463 0.095957 0.043178 0.198193 \n", "0 0.041343 0.040558 0.032107 0.067695 0.027470 0.171187 \n", - "0 0.034826 0.031223 0.026436 0.054902 0.020652 0.137928 \n", + "0 0.031216 0.028970 0.021179 0.050489 0.019185 0.123856 \n", "0 0.016046 0.021137 0.009522 0.024214 0.008958 0.048068 \n", "0 0.001602 0.002253 0.000930 0.003444 0.001362 0.011760 \n", - "0 0.001602 0.002253 0.000930 0.003444 0.001362 0.011760 \n", "0 0.000449 0.000536 0.000198 0.000845 0.000274 0.002744 \n", - "0 0.000481 0.000644 0.000223 0.001043 0.000335 0.003348 \n", "0 0.000463 0.000644 0.000189 0.000752 0.000168 0.001677 \n", "0 0.000189 0.000000 0.000000 0.000214 0.000037 0.000368 \n", "\n", " LAUC HR Reco in test Test coverage Shannon Gini \n", - "0 0.593544 0.875928 1.000000 0.077201 3.875892 0.974947 \n", "0 0.555546 0.765642 1.000000 0.038961 3.159079 0.987317 \n", - "0 0.520459 0.499470 0.992047 0.217893 4.405246 0.953484 \n", - "0 0.519270 0.476140 0.999788 0.115440 3.578129 0.980463 \n", - "0 0.518433 0.477200 0.866384 0.145743 3.860721 0.972299 \n", - "0 0.516515 0.441145 0.997455 0.167388 4.235348 0.962085 \n", + "0 0.517141 0.459173 0.860551 0.146465 3.853236 0.971798 \n", "0 0.515501 0.437964 1.000000 0.033911 2.836513 0.991139 \n", "0 0.509546 0.384942 1.000000 0.025974 2.711772 0.992003 \n", - "0 0.508570 0.353128 0.987699 0.183261 5.093805 0.908215 \n", + "0 0.506812 0.322375 0.987805 0.184704 5.103172 0.906873 \n", "0 0.499885 0.154825 0.402333 0.434343 5.133650 0.877999 \n", "0 0.496724 0.021209 0.482821 0.059885 2.232578 0.994487 \n", - "0 0.496724 0.021209 0.482821 0.059885 2.232578 0.994487 \n", "0 0.496441 0.007423 0.602121 0.010823 2.089186 0.995706 \n", - "0 0.496433 0.009544 0.699046 0.005051 1.945910 0.995669 \n", "0 0.496424 0.009544 0.600530 0.005051 1.803126 0.996380 \n", "0 0.496391 0.003181 0.392153 0.115440 4.174741 0.965327 " ] }, - "execution_count": 37, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -830,7 +680,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -850,7 +700,7 @@ " [0.6 , 0.8 ]])" ] }, - "execution_count": 24, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -863,7 +713,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -898,125 +748,137 @@ " \n", " \n", " 0\n", - " 257\n", + " 916\n", " 1.000000\n", - " 258\n", - " 258\n", - " Contact (1997)\n", - " Drama, Sci-Fi\n", + " 917\n", + " 917\n", + " Mercury Rising (1998)\n", + " Action, Drama, Thriller\n", " \n", " \n", " 1\n", - " 221\n", - " 0.739090\n", - " 222\n", - " 222\n", - " Star Trek: First Contact (1996)\n", - " Action, Adventure, Sci-Fi\n", + " 914\n", + " 0.991506\n", + " 915\n", + " 915\n", + " Primary Colors (1998)\n", + " Drama\n", " \n", " \n", " 2\n", - " 63\n", - " 0.736794\n", - " 64\n", - " 64\n", - " Shawshank Redemption, The (1994)\n", + " 908\n", + " 0.990078\n", + " 909\n", + " 909\n", + " Dangerous Beauty (1998)\n", " Drama\n", " \n", " \n", " 3\n", - " 1162\n", - " 0.736777\n", - " 1163\n", - " 1163\n", - " Portrait of a Lady, The (1996)\n", - " Drama\n", + " 690\n", + " 0.989487\n", + " 691\n", + " 691\n", + " Dark City (1998)\n", + " Film-Noir, Sci-Fi, Thriller\n", " \n", " \n", " 4\n", - " 125\n", - " 0.736246\n", - " 126\n", - " 126\n", - " Spitfire Grill, The (1996)\n", - " Drama\n", + " 359\n", + " 0.988384\n", + " 360\n", + " 360\n", + " Wonderland (1997)\n", + " Documentary\n", " \n", " \n", " 5\n", - " 309\n", - " 0.734523\n", - " 310\n", - " 310\n", - " Rainmaker, The (1997)\n", - " Drama\n", + " 810\n", + " 0.987781\n", + " 811\n", + " 811\n", + " Thirty-Two Short Films About Glenn Gould (1993)\n", + " Documentary\n", " \n", " \n", " 6\n", - " 1605\n", - " 0.733826\n", - " 1606\n", - " 1606\n", - " Deceiver (1997)\n", - " Crime\n", + " 917\n", + " 0.986770\n", + " 918\n", + " 918\n", + " City of Angels (1998)\n", + " Romance\n", " \n", " \n", " 7\n", - " 238\n", - " 0.731338\n", - " 239\n", - " 239\n", - " Sneakers (1992)\n", - " Crime, Drama, Sci-Fi\n", + " 869\n", + " 0.986746\n", + " 870\n", + " 870\n", + " Touch (1997)\n", + " Romance\n", " \n", " \n", " 8\n", - " 222\n", - " 0.724939\n", - " 223\n", - " 223\n", - " Sling Blade (1996)\n", - " Drama, Thriller\n", + " 756\n", + " 0.986005\n", + " 757\n", + " 757\n", + " Across the Sea of Time (1995)\n", + " Documentary\n", " \n", " \n", " 9\n", - " 266\n", - " 0.724812\n", - " 267\n", - " 267\n", - " unknown\n", - " unknown\n", + " 732\n", + " 0.985919\n", + " 733\n", + " 733\n", + " Go Fish (1994)\n", + " Drama, Romance\n", " \n", " \n", "\n", "" ], "text/plain": [ - " code score item_id id title \\\n", - "0 257 1.000000 258 258 Contact (1997) \n", - "1 221 0.739090 222 222 Star Trek: First Contact (1996) \n", - "2 63 0.736794 64 64 Shawshank Redemption, The (1994) \n", - "3 1162 0.736777 1163 1163 Portrait of a Lady, The (1996) \n", - "4 125 0.736246 126 126 Spitfire Grill, The (1996) \n", - "5 309 0.734523 310 310 Rainmaker, The (1997) \n", - "6 1605 0.733826 1606 1606 Deceiver (1997) \n", - "7 238 0.731338 239 239 Sneakers (1992) \n", - "8 222 0.724939 223 223 Sling Blade (1996) \n", - "9 266 0.724812 267 267 unknown \n", + " code score item_id id \\\n", + "0 916 1.000000 917 917 \n", + "1 914 0.991506 915 915 \n", + "2 908 0.990078 909 909 \n", + "3 690 0.989487 691 691 \n", + "4 359 0.988384 360 360 \n", + "5 810 0.987781 811 811 \n", + "6 917 0.986770 918 918 \n", + "7 869 0.986746 870 870 \n", + "8 756 0.986005 757 757 \n", + "9 732 0.985919 733 733 \n", "\n", - " genres \n", - "0 Drama, Sci-Fi \n", - "1 Action, Adventure, Sci-Fi \n", - "2 Drama \n", - "3 Drama \n", - "4 Drama \n", - "5 Drama \n", - "6 Crime \n", - "7 Crime, Drama, Sci-Fi \n", - "8 Drama, Thriller \n", - "9 unknown " + " title \\\n", + "0 Mercury Rising (1998) \n", + "1 Primary Colors (1998) \n", + "2 Dangerous Beauty (1998) \n", + "3 Dark City (1998) \n", + "4 Wonderland (1997) \n", + "5 Thirty-Two Short Films About Glenn Gould (1993) \n", + "6 City of Angels (1998) \n", + "7 Touch (1997) \n", + "8 Across the Sea of Time (1995) \n", + "9 Go Fish (1994) \n", + "\n", + " genres \n", + "0 Action, Drama, Thriller \n", + "1 Drama \n", + "2 Drama \n", + "3 Film-Noir, Sci-Fi, Thriller \n", + "4 Documentary \n", + "5 Documentary \n", + "6 Romance \n", + "7 Romance \n", + "8 Documentary \n", + "9 Drama, Romance " ] }, - "execution_count": 33, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -1075,7 +937,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -1109,7 +971,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -1136,29 +998,25 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "943it [00:00, 4850.60it/s]\n", - "943it [00:00, 4963.77it/s]\n", - "943it [00:00, 4500.32it/s]\n", - "943it [00:00, 5033.32it/s]\n", - "943it [00:00, 4491.41it/s]\n", - "943it [00:00, 5213.78it/s]\n", - "943it [00:00, 4930.11it/s]\n", - "943it [00:00, 4835.44it/s]\n", - "943it [00:00, 4567.62it/s]\n", - "943it [00:00, 4836.97it/s]\n", - "943it [00:00, 3965.34it/s]\n", - "943it [00:00, 4790.98it/s]\n", - "943it [00:00, 4721.85it/s]\n", - "943it [00:00, 4756.99it/s]\n", - "943it [00:00, 5004.97it/s]\n", - "943it [00:00, 4844.54it/s]\n" + "943it [00:00, 8010.33it/s]\n", + "943it [00:00, 7939.12it/s]\n", + "943it [00:00, 8331.15it/s]\n", + "943it [00:00, 8696.10it/s]\n", + "943it [00:00, 8172.62it/s]\n", + "943it [00:00, 8807.34it/s]\n", + "943it [00:00, 8646.67it/s]\n", + "943it [00:00, 7192.36it/s]\n", + "943it [00:00, 8888.67it/s]\n", + "943it [00:00, 8736.94it/s]\n", + "943it [00:00, 8047.44it/s]\n", + "943it [00:00, 8326.85it/s]\n" ] }, { @@ -1205,27 +1063,6 @@ " \n", " \n", " 0\n", - " Self_RP3Beta\n", - " 3.702446\n", - " 3.527273\n", - " 0.282185\n", - " 0.192092\n", - " 0.186749\n", - " 0.216980\n", - " 0.204185\n", - " 0.240096\n", - " 0.339114\n", - " 0.204905\n", - " 0.572157\n", - " 0.593544\n", - " 0.875928\n", - " 1.000000\n", - " 0.077201\n", - " 3.875892\n", - " 0.974947\n", - " \n", - " \n", - " 0\n", " Self_TopPop\n", " 2.508258\n", " 2.217909\n", @@ -1248,86 +1085,44 @@ " \n", " 0\n", " Ready_SVD\n", - " 0.951985\n", - " 0.749904\n", - " 0.105832\n", - " 0.054287\n", - " 0.059099\n", - " 0.074448\n", - " 0.093562\n", - " 0.085108\n", - " 0.124663\n", - " 0.060089\n", - " 0.275660\n", - " 0.523903\n", - " 0.527041\n", - " 0.999682\n", - " 0.214286\n", - " 4.410890\n", - " 0.953748\n", - " \n", - " \n", - " 0\n", - " Self_SVDBaseline\n", - " 0.913380\n", - " 0.719974\n", - " 0.105726\n", - " 0.045055\n", - " 0.054233\n", - " 0.071579\n", - " 0.096674\n", - " 0.075899\n", - " 0.119979\n", - " 0.059709\n", - " 0.251389\n", - " 0.519270\n", - " 0.476140\n", - " 0.999788\n", - " 0.115440\n", - " 3.578129\n", - " 0.980463\n", + " 0.952889\n", + " 0.750674\n", + " 0.098834\n", + " 0.047899\n", + " 0.053663\n", + " 0.068581\n", + " 0.087876\n", + " 0.076831\n", + " 0.113446\n", + " 0.054127\n", + " 0.242918\n", + " 0.520677\n", + " 0.488865\n", + " 0.998091\n", + " 0.204906\n", + " 4.440336\n", + " 0.952374\n", " \n", " \n", " 0\n", " Self_SVD\n", - " 0.914400\n", - " 0.718047\n", - " 0.103393\n", - " 0.043404\n", - " 0.052920\n", - " 0.070119\n", - " 0.093455\n", - " 0.074901\n", - " 0.107441\n", - " 0.050770\n", - " 0.200719\n", - " 0.518433\n", - " 0.477200\n", - " 0.866384\n", - " 0.145743\n", - " 3.860721\n", - " 0.972299\n", - " \n", - " \n", - " 0\n", - " Ready_SVDBiased\n", - " 0.940375\n", - " 0.742264\n", - " 0.092153\n", - " 0.039645\n", - " 0.046804\n", - " 0.061886\n", - " 0.079399\n", - " 0.055967\n", - " 0.102017\n", - " 0.047972\n", - " 0.216876\n", - " 0.516515\n", - " 0.441145\n", - " 0.997455\n", - " 0.167388\n", - " 4.235348\n", - " 0.962085\n", + " 0.914856\n", + " 0.718384\n", + " 0.100424\n", + " 0.040859\n", + " 0.050523\n", + " 0.067431\n", + " 0.090665\n", + " 0.068368\n", + " 0.101328\n", + " 0.047917\n", + " 0.183792\n", + " 0.517141\n", + " 0.459173\n", + " 0.860551\n", + " 0.146465\n", + " 3.853236\n", + " 0.971798\n", " \n", " \n", " 0\n", @@ -1352,6 +1147,27 @@ " \n", " \n", " 0\n", + " Ready_SVDBiased\n", + " 0.939807\n", + " 0.741610\n", + " 0.082078\n", + " 0.032691\n", + " 0.040611\n", + " 0.054503\n", + " 0.073391\n", + " 0.051400\n", + " 0.088531\n", + " 0.039739\n", + " 0.188187\n", + " 0.512998\n", + " 0.423118\n", + " 0.995864\n", + " 0.172439\n", + " 4.176612\n", + " 0.963967\n", + " \n", + " \n", + " 0\n", " Self_GlobalAvg\n", " 1.125760\n", " 0.943534\n", @@ -1374,23 +1190,23 @@ " \n", " 0\n", " Ready_Random\n", - " 1.518551\n", - " 1.218784\n", - " 0.050583\n", - " 0.024085\n", - " 0.027323\n", - " 0.034826\n", - " 0.031223\n", - " 0.026436\n", - " 0.054902\n", - " 0.020652\n", - " 0.137928\n", - " 0.508570\n", - " 0.353128\n", - " 0.987699\n", - " 0.183261\n", - " 5.093805\n", - " 0.908215\n", + " 1.518964\n", + " 1.222159\n", + " 0.046554\n", + " 0.020603\n", + " 0.023679\n", + " 0.031216\n", + " 0.028970\n", + " 0.021179\n", + " 0.050489\n", + " 0.019185\n", + " 0.123856\n", + " 0.506812\n", + " 0.322375\n", + " 0.987805\n", + " 0.184704\n", + " 5.103172\n", + " 0.906873\n", " \n", " \n", " 0\n", @@ -1415,27 +1231,6 @@ " \n", " \n", " 0\n", - " Ready_U-KNNBaseline\n", - " 0.935327\n", - " 0.737424\n", - " 0.002545\n", - " 0.000755\n", - " 0.001105\n", - " 0.001602\n", - " 0.002253\n", - " 0.000930\n", - " 0.003444\n", - " 0.001362\n", - " 0.011760\n", - " 0.496724\n", - " 0.021209\n", - " 0.482821\n", - " 0.059885\n", - " 2.232578\n", - " 0.994487\n", - " \n", - " \n", - " 0\n", " Ready_I-KNNBaseline\n", " 0.935327\n", " 0.737424\n", @@ -1478,27 +1273,6 @@ " \n", " \n", " 0\n", - " Self_TopRated\n", - " 1.033085\n", - " 0.822057\n", - " 0.000954\n", - " 0.000188\n", - " 0.000298\n", - " 0.000481\n", - " 0.000644\n", - " 0.000223\n", - " 0.001043\n", - " 0.000335\n", - " 0.003348\n", - " 0.496433\n", - " 0.009544\n", - " 0.699046\n", - " 0.005051\n", - " 1.945910\n", - " 0.995669\n", - " \n", - " \n", - " 0\n", " Self_BaselineUI\n", " 0.967585\n", " 0.762740\n", @@ -1545,61 +1319,49 @@ ], "text/plain": [ " Model RMSE MAE precision recall F_1 \\\n", - "0 Self_RP3Beta 3.702446 3.527273 0.282185 0.192092 0.186749 \n", "0 Self_TopPop 2.508258 2.217909 0.188865 0.116919 0.118732 \n", - "0 Ready_SVD 0.951985 0.749904 0.105832 0.054287 0.059099 \n", - "0 Self_SVDBaseline 0.913380 0.719974 0.105726 0.045055 0.054233 \n", - "0 Self_SVD 0.914400 0.718047 0.103393 0.043404 0.052920 \n", - "0 Ready_SVDBiased 0.940375 0.742264 0.092153 0.039645 0.046804 \n", + "0 Ready_SVD 0.952889 0.750674 0.098834 0.047899 0.053663 \n", + "0 Self_SVD 0.914856 0.718384 0.100424 0.040859 0.050523 \n", "0 Ready_Baseline 0.949459 0.752487 0.091410 0.037652 0.046030 \n", + "0 Ready_SVDBiased 0.939807 0.741610 0.082078 0.032691 0.040611 \n", "0 Self_GlobalAvg 1.125760 0.943534 0.061188 0.025968 0.031383 \n", - "0 Ready_Random 1.518551 1.218784 0.050583 0.024085 0.027323 \n", + "0 Ready_Random 1.518964 1.222159 0.046554 0.020603 0.023679 \n", "0 Ready_I-KNN 1.030386 0.813067 0.026087 0.006908 0.010593 \n", - "0 Ready_U-KNNBaseline 0.935327 0.737424 0.002545 0.000755 0.001105 \n", "0 Ready_I-KNNBaseline 0.935327 0.737424 0.002545 0.000755 0.001105 \n", "0 Ready_U-KNN 1.023495 0.807913 0.000742 0.000205 0.000305 \n", - "0 Self_TopRated 1.033085 0.822057 0.000954 0.000188 0.000298 \n", "0 Self_BaselineUI 0.967585 0.762740 0.000954 0.000170 0.000278 \n", "0 Self_IKNN 1.018363 0.808793 0.000318 0.000108 0.000140 \n", "\n", " F_05 precision_super recall_super NDCG mAP MRR \\\n", - "0 0.216980 0.204185 0.240096 0.339114 0.204905 0.572157 \n", "0 0.141584 0.130472 0.137473 0.214651 0.111707 0.400939 \n", - "0 0.074448 0.093562 0.085108 0.124663 0.060089 0.275660 \n", - "0 0.071579 0.096674 0.075899 0.119979 0.059709 0.251389 \n", - "0 0.070119 0.093455 0.074901 0.107441 0.050770 0.200719 \n", - "0 0.061886 0.079399 0.055967 0.102017 0.047972 0.216876 \n", + "0 0.068581 0.087876 0.076831 0.113446 0.054127 0.242918 \n", + "0 0.067431 0.090665 0.068368 0.101328 0.047917 0.183792 \n", "0 0.061286 0.079614 0.056463 0.095957 0.043178 0.198193 \n", + "0 0.054503 0.073391 0.051400 0.088531 0.039739 0.188187 \n", "0 0.041343 0.040558 0.032107 0.067695 0.027470 0.171187 \n", - "0 0.034826 0.031223 0.026436 0.054902 0.020652 0.137928 \n", + "0 0.031216 0.028970 0.021179 0.050489 0.019185 0.123856 \n", "0 0.016046 0.021137 0.009522 0.024214 0.008958 0.048068 \n", "0 0.001602 0.002253 0.000930 0.003444 0.001362 0.011760 \n", - "0 0.001602 0.002253 0.000930 0.003444 0.001362 0.011760 \n", "0 0.000449 0.000536 0.000198 0.000845 0.000274 0.002744 \n", - "0 0.000481 0.000644 0.000223 0.001043 0.000335 0.003348 \n", "0 0.000463 0.000644 0.000189 0.000752 0.000168 0.001677 \n", "0 0.000189 0.000000 0.000000 0.000214 0.000037 0.000368 \n", "\n", " LAUC HR Reco in test Test coverage Shannon Gini \n", - "0 0.593544 0.875928 1.000000 0.077201 3.875892 0.974947 \n", "0 0.555546 0.765642 1.000000 0.038961 3.159079 0.987317 \n", - "0 0.523903 0.527041 0.999682 0.214286 4.410890 0.953748 \n", - "0 0.519270 0.476140 0.999788 0.115440 3.578129 0.980463 \n", - "0 0.518433 0.477200 0.866384 0.145743 3.860721 0.972299 \n", - "0 0.516515 0.441145 0.997455 0.167388 4.235348 0.962085 \n", + "0 0.520677 0.488865 0.998091 0.204906 4.440336 0.952374 \n", + "0 0.517141 0.459173 0.860551 0.146465 3.853236 0.971798 \n", "0 0.515501 0.437964 1.000000 0.033911 2.836513 0.991139 \n", + "0 0.512998 0.423118 0.995864 0.172439 4.176612 0.963967 \n", "0 0.509546 0.384942 1.000000 0.025974 2.711772 0.992003 \n", - "0 0.508570 0.353128 0.987699 0.183261 5.093805 0.908215 \n", + "0 0.506812 0.322375 0.987805 0.184704 5.103172 0.906873 \n", "0 0.499885 0.154825 0.402333 0.434343 5.133650 0.877999 \n", "0 0.496724 0.021209 0.482821 0.059885 2.232578 0.994487 \n", - "0 0.496724 0.021209 0.482821 0.059885 2.232578 0.994487 \n", "0 0.496441 0.007423 0.602121 0.010823 2.089186 0.995706 \n", - "0 0.496433 0.009544 0.699046 0.005051 1.945910 0.995669 \n", "0 0.496424 0.009544 0.600530 0.005051 1.803126 0.996380 \n", "0 0.496391 0.003181 0.392153 0.115440 4.174741 0.965327 " ] }, - "execution_count": 40, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } diff --git a/P4. Matrix Factorization.pdf b/P4. Matrix Factorization.pdf new file mode 100644 index 0000000..a8e1459 Binary files /dev/null and b/P4. Matrix Factorization.pdf differ diff --git a/P5. Graph-based models.pdf b/P5. Graph-based models.pdf new file mode 100644 index 0000000..b600d85 Binary files /dev/null and b/P5. Graph-based models.pdf differ diff --git a/P5. Graph-based.ipynb b/P5. Graph-based.ipynb index 8d134d5..2ef1971 100644 --- a/P5. Graph-based.ipynb +++ b/P5. Graph-based.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -87,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -97,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -111,14 +111,14 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "943it [00:00, 7582.24it/s]\n" + "943it [00:00, 8810.70it/s]\n" ] }, { @@ -197,7 +197,7 @@ "0 0.875928 1.0 0.077201 3.875892 0.974947 " ] }, - "execution_count": 44, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -229,7 +229,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -238,29 +238,29 @@ "text": [ " 0%| | 0/8 [00:00" + "" ] }, "metadata": { @@ -577,7 +577,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -586,41 +586,34 @@ "text": [ " 0%| | 0/10 [00:00" + "" ] }, "metadata": { @@ -987,7 +980,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -1019,148 +1012,148 @@ " \n", " \n", " \n", - " 25689\n", - " 645\n", + " 66489\n", + " 344\n", " 5\n", - " Citizen Kane (1941)\n", + " Postino, Il (1994)\n", + " Drama, Romance\n", + " \n", + " \n", + " 15966\n", + " 344\n", + " 5\n", + " Godfather, The (1972)\n", + " Action, Crime, Drama\n", + " \n", + " \n", + " 50067\n", + " 344\n", + " 5\n", + " Mrs. Brown (Her Majesty, Mrs. Brown) (1997)\n", + " Drama, Romance\n", + " \n", + " \n", + " 65435\n", + " 344\n", + " 5\n", + " Speed (1994)\n", + " Action, Romance, Thriller\n", + " \n", + " \n", + " 50396\n", + " 344\n", + " 5\n", + " Close Shave, A (1995)\n", + " Animation, Comedy, Thriller\n", + " \n", + " \n", + " 13793\n", + " 344\n", + " 5\n", + " Local Hero (1983)\n", + " Comedy\n", + " \n", + " \n", + " 25784\n", + " 344\n", + " 5\n", + " Dead Man Walking (1995)\n", " Drama\n", " \n", " \n", - " 46234\n", - " 645\n", + " 15447\n", + " 344\n", " 5\n", - " Miller's Crossing (1990)\n", - " Drama\n", + " Blade Runner (1982)\n", + " Film-Noir, Sci-Fi\n", " \n", " \n", - " 29481\n", - " 645\n", - " 5\n", - " Psycho (1960)\n", - " Horror, Romance, Thriller\n", - " \n", - " \n", - " 29861\n", - " 645\n", - " 5\n", - " To Kill a Mockingbird (1962)\n", - " Drama\n", - " \n", - " \n", - " 24699\n", - " 645\n", + " 24693\n", + " 344\n", " 5\n", " One Flew Over the Cuckoo's Nest (1975)\n", " Drama\n", " \n", " \n", - " 64848\n", - " 645\n", + " 67385\n", + " 344\n", " 5\n", - " Taxi Driver (1976)\n", - " Drama, Thriller\n", + " Good Will Hunting (1997)\n", + " Drama\n", " \n", " \n", - " 31022\n", - " 645\n", + " 55907\n", + " 344\n", " 5\n", - " GoodFellas (1990)\n", - " Crime, Drama\n", + " My Life as a Dog (Mitt liv som hund) (1985)\n", + " Drama\n", " \n", " \n", - " 23585\n", - " 645\n", + " 23403\n", + " 344\n", " 5\n", - " Casablanca (1942)\n", - " Drama, Romance, War\n", + " Eat Drink Man Woman (1994)\n", + " Comedy, Drama\n", " \n", " \n", - " 18551\n", - " 645\n", + " 18500\n", + " 344\n", " 5\n", " Amadeus (1984)\n", " Drama, Mystery\n", " \n", " \n", - " 40333\n", - " 645\n", + " 23038\n", + " 344\n", " 5\n", - " Exotica (1994)\n", - " Drama\n", + " Apt Pupil (1998)\n", + " Drama, Thriller\n", " \n", " \n", - " 42006\n", - " 645\n", + " 57898\n", + " 344\n", " 5\n", - " Dr. Strangelove or: How I Learned to Stop Worr...\n", - " Sci-Fi, War\n", - " \n", - " \n", - " 27477\n", - " 645\n", - " 5\n", - " Young Frankenstein (1974)\n", - " Comedy, Horror\n", - " \n", - " \n", - " 43025\n", - " 645\n", - " 5\n", - " 2001: A Space Odyssey (1968)\n", - " Drama, Mystery, Sci-Fi, Thriller\n", - " \n", - " \n", - " 12217\n", - " 645\n", - " 5\n", - " Graduate, The (1967)\n", - " Drama, Romance\n", - " \n", - " \n", - " 42731\n", - " 645\n", - " 5\n", - " Brazil (1985)\n", - " Sci-Fi\n", + " Wrong Trousers, The (1993)\n", + " Animation, Comedy\n", " \n", " \n", "\n", "" ], "text/plain": [ - " user rating title \\\n", - "25689 645 5 Citizen Kane (1941) \n", - "46234 645 5 Miller's Crossing (1990) \n", - "29481 645 5 Psycho (1960) \n", - "29861 645 5 To Kill a Mockingbird (1962) \n", - "24699 645 5 One Flew Over the Cuckoo's Nest (1975) \n", - "64848 645 5 Taxi Driver (1976) \n", - "31022 645 5 GoodFellas (1990) \n", - "23585 645 5 Casablanca (1942) \n", - "18551 645 5 Amadeus (1984) \n", - "40333 645 5 Exotica (1994) \n", - "42006 645 5 Dr. Strangelove or: How I Learned to Stop Worr... \n", - "27477 645 5 Young Frankenstein (1974) \n", - "43025 645 5 2001: A Space Odyssey (1968) \n", - "12217 645 5 Graduate, The (1967) \n", - "42731 645 5 Brazil (1985) \n", + " user rating title \\\n", + "66489 344 5 Postino, Il (1994) \n", + "15966 344 5 Godfather, The (1972) \n", + "50067 344 5 Mrs. Brown (Her Majesty, Mrs. Brown) (1997) \n", + "65435 344 5 Speed (1994) \n", + "50396 344 5 Close Shave, A (1995) \n", + "13793 344 5 Local Hero (1983) \n", + "25784 344 5 Dead Man Walking (1995) \n", + "15447 344 5 Blade Runner (1982) \n", + "24693 344 5 One Flew Over the Cuckoo's Nest (1975) \n", + "67385 344 5 Good Will Hunting (1997) \n", + "55907 344 5 My Life as a Dog (Mitt liv som hund) (1985) \n", + "23403 344 5 Eat Drink Man Woman (1994) \n", + "18500 344 5 Amadeus (1984) \n", + "23038 344 5 Apt Pupil (1998) \n", + "57898 344 5 Wrong Trousers, The (1993) \n", "\n", - " genres \n", - "25689 Drama \n", - "46234 Drama \n", - "29481 Horror, Romance, Thriller \n", - "29861 Drama \n", - "24699 Drama \n", - "64848 Drama, Thriller \n", - "31022 Crime, Drama \n", - "23585 Drama, Romance, War \n", - "18551 Drama, Mystery \n", - "40333 Drama \n", - "42006 Sci-Fi, War \n", - "27477 Comedy, Horror \n", - "43025 Drama, Mystery, Sci-Fi, Thriller \n", - "12217 Drama, Romance \n", - "42731 Sci-Fi " + " genres \n", + "66489 Drama, Romance \n", + "15966 Action, Crime, Drama \n", + "50067 Drama, Romance \n", + "65435 Action, Romance, Thriller \n", + "50396 Animation, Comedy, Thriller \n", + "13793 Comedy \n", + "25784 Drama \n", + "15447 Film-Noir, Sci-Fi \n", + "24693 Drama \n", + "67385 Drama \n", + "55907 Drama \n", + "23403 Comedy, Drama \n", + "18500 Drama, Mystery \n", + "23038 Drama, Thriller \n", + "57898 Animation, Comedy " ] }, "metadata": {}, @@ -1195,106 +1188,106 @@ " \n", " \n", " \n", - " 284\n", - " 645.0\n", + " 158\n", + " 344.0\n", " 1\n", " Star Wars (1977)\n", " Action, Adventure, Romance, Sci-Fi, War\n", " \n", " \n", - " 7185\n", - " 645.0\n", + " 7055\n", + " 344.0\n", " 2\n", " Fargo (1996)\n", " Crime, Drama, Thriller\n", " \n", " \n", - " 620\n", - " 645.0\n", + " 2769\n", + " 344.0\n", " 3\n", - " Raiders of the Lost Ark (1981)\n", - " Action, Adventure\n", + " Return of the Jedi (1983)\n", + " Action, Adventure, Romance, Sci-Fi, War\n", " \n", " \n", - " 872\n", - " 645.0\n", + " 1078\n", + " 344.0\n", " 4\n", - " Silence of the Lambs, The (1991)\n", - " Drama, Thriller\n", + " English Patient, The (1996)\n", + " Drama, Romance, War\n", " \n", " \n", - " 2483\n", - " 645.0\n", + " 4535\n", + " 344.0\n", " 5\n", - " Godfather, The (1972)\n", - " Action, Crime, Drama\n", - " \n", - " \n", - " 6723\n", - " 645.0\n", - " 6\n", - " Empire Strikes Back, The (1980)\n", - " Action, Adventure, Drama, Romance, Sci-Fi, War\n", - " \n", - " \n", - " 1440\n", - " 645.0\n", - " 7\n", - " Fugitive, The (1993)\n", + " Air Force One (1997)\n", " Action, Thriller\n", " \n", " \n", - " 3288\n", - " 645.0\n", + " 6433\n", + " 344.0\n", + " 6\n", + " Pulp Fiction (1994)\n", + " Crime, Drama\n", + " \n", + " \n", + " 4851\n", + " 344.0\n", + " 7\n", + " Titanic (1997)\n", + " Action, Drama, Romance\n", + " \n", + " \n", + " 5110\n", + " 344.0\n", " 8\n", - " Toy Story (1995)\n", - " Animation, Children's, Comedy\n", + " Full Monty, The (1997)\n", + " Comedy\n", " \n", " \n", - " 8416\n", - " 645.0\n", + " 1553\n", + " 344.0\n", " 9\n", - " Indiana Jones and the Last Crusade (1989)\n", - " Action, Adventure\n", + " Schindler's List (1993)\n", + " Drama, War\n", " \n", " \n", - " 2062\n", - " 645.0\n", + " 6646\n", + " 344.0\n", " 10\n", - " Back to the Future (1985)\n", - " Comedy, Sci-Fi\n", + " Empire Strikes Back, The (1980)\n", + " Action, Adventure, Drama, Romance, Sci-Fi, War\n", " \n", " \n", "\n", "" ], "text/plain": [ - " user rec_nb title \\\n", - "284 645.0 1 Star Wars (1977) \n", - "7185 645.0 2 Fargo (1996) \n", - "620 645.0 3 Raiders of the Lost Ark (1981) \n", - "872 645.0 4 Silence of the Lambs, The (1991) \n", - "2483 645.0 5 Godfather, The (1972) \n", - "6723 645.0 6 Empire Strikes Back, The (1980) \n", - "1440 645.0 7 Fugitive, The (1993) \n", - "3288 645.0 8 Toy Story (1995) \n", - "8416 645.0 9 Indiana Jones and the Last Crusade (1989) \n", - "2062 645.0 10 Back to the Future (1985) \n", + " user rec_nb title \\\n", + "158 344.0 1 Star Wars (1977) \n", + "7055 344.0 2 Fargo (1996) \n", + "2769 344.0 3 Return of the Jedi (1983) \n", + "1078 344.0 4 English Patient, The (1996) \n", + "4535 344.0 5 Air Force One (1997) \n", + "6433 344.0 6 Pulp Fiction (1994) \n", + "4851 344.0 7 Titanic (1997) \n", + "5110 344.0 8 Full Monty, The (1997) \n", + "1553 344.0 9 Schindler's List (1993) \n", + "6646 344.0 10 Empire Strikes Back, The (1980) \n", "\n", " genres \n", - "284 Action, Adventure, Romance, Sci-Fi, War \n", - "7185 Crime, Drama, Thriller \n", - "620 Action, Adventure \n", - "872 Drama, Thriller \n", - "2483 Action, Crime, Drama \n", - "6723 Action, Adventure, Drama, Romance, Sci-Fi, War \n", - "1440 Action, Thriller \n", - "3288 Animation, Children's, Comedy \n", - "8416 Action, Adventure \n", - "2062 Comedy, Sci-Fi " + "158 Action, Adventure, Romance, Sci-Fi, War \n", + "7055 Crime, Drama, Thriller \n", + "2769 Action, Adventure, Romance, Sci-Fi, War \n", + "1078 Drama, Romance, War \n", + "4535 Action, Thriller \n", + "6433 Crime, Drama \n", + "4851 Action, Drama, Romance \n", + "5110 Comedy \n", + "1553 Drama, War \n", + "6646 Action, Adventure, Drama, Romance, Sci-Fi, War " ] }, - "execution_count": 36, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -1309,7 +1302,7 @@ "display(train_content[train_content['user']==user][['user', 'rating', 'title', 'genres']]\\\n", " .sort_values(by='rating', ascending=False)[:15])\n", "\n", - "reco = np.loadtxt('Recommendations generated/ml-100k/Self_RP3Beta_reco.csv', delimiter=',')\n", + "reco = np.loadtxt('Recommendations generated/ml-100k/Self_P3_reco.csv', delimiter=',')\n", "items=pd.read_csv('./Datasets/ml-100k/movies.csv')\n", "\n", "# Let's ignore scores - they are not used in evaluation: \n",