{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Self made SVD" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import helpers\n", "import pandas as pd\n", "import numpy as np\n", "import scipy.sparse as sparse\n", "from collections import defaultdict\n", "from itertools import chain\n", "import random\n", "\n", "train_read=pd.read_csv('./Datasets/ml-100k/train.csv', sep='\\t', header=None)\n", "test_read=pd.read_csv('./Datasets/ml-100k/test.csv', sep='\\t', header=None)\n", "train_ui, test_ui, user_code_id, user_id_code, item_code_id, item_id_code = helpers.data_to_csr(train_read, test_read)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Done similarly to https://github.com/albertauyeung/matrix-factorization-in-python\n", "from tqdm import tqdm\n", "\n", "class SVD():\n", " \n", " def __init__(self, train_ui, learning_rate, regularization, nb_factors, iterations):\n", " self.train_ui=train_ui\n", " self.uir=list(zip(*[train_ui.nonzero()[0],train_ui.nonzero()[1], train_ui.data]))\n", " \n", " self.learning_rate=learning_rate\n", " self.regularization=regularization\n", " self.iterations=iterations\n", " self.nb_users, self.nb_items=train_ui.shape\n", " self.nb_ratings=train_ui.nnz\n", " self.nb_factors=nb_factors\n", " \n", " self.Pu=np.random.normal(loc=0, scale=1./self.nb_factors, size=(self.nb_users, self.nb_factors))\n", " self.Qi=np.random.normal(loc=0, scale=1./self.nb_factors, size=(self.nb_items, self.nb_factors))\n", "\n", " def train(self, test_ui=None):\n", " if test_ui!=None:\n", " self.test_uir=list(zip(*[test_ui.nonzero()[0],test_ui.nonzero()[1], test_ui.data]))\n", " \n", " self.learning_process=[]\n", " pbar = tqdm(range(self.iterations))\n", " for i in pbar:\n", " pbar.set_description(f'Epoch {i} RMSE: {self.learning_process[-1][1] if i>0 else 0}. Training epoch {i+1}...')\n", " np.random.shuffle(self.uir)\n", " self.sgd(self.uir)\n", " if test_ui==None:\n", " self.learning_process.append([i+1, self.RMSE_total(self.uir)])\n", " else:\n", " self.learning_process.append([i+1, self.RMSE_total(self.uir), self.RMSE_total(self.test_uir)])\n", " \n", " def sgd(self, uir):\n", " \n", " for u, i, score in uir:\n", " # Computer prediction and error\n", " prediction = self.get_rating(u,i)\n", " e = (score - prediction)\n", " \n", " # Update user and item latent feature matrices\n", " Pu_update=self.learning_rate * (e * self.Qi[i] - self.regularization * self.Pu[u])\n", " Qi_update=self.learning_rate * (e * self.Pu[u] - self.regularization * self.Qi[i])\n", " \n", " self.Pu[u] += Pu_update\n", " self.Qi[i] += Qi_update\n", " \n", " def get_rating(self, u, i):\n", " prediction = self.Pu[u].dot(self.Qi[i].T)\n", " return prediction\n", " \n", " def RMSE_total(self, uir):\n", " RMSE=0\n", " for u,i, score in uir:\n", " prediction = self.get_rating(u,i)\n", " RMSE+=(score - prediction)**2\n", " return np.sqrt(RMSE/len(uir))\n", " \n", " def estimations(self):\n", " self.estimations=\\\n", " np.dot(self.Pu,self.Qi.T)\n", "\n", " def recommend(self, user_code_id, item_code_id, topK=10):\n", " \n", " top_k = defaultdict(list)\n", " for nb_user, user in enumerate(self.estimations):\n", " \n", " user_rated=self.train_ui.indices[self.train_ui.indptr[nb_user]:self.train_ui.indptr[nb_user+1]]\n", " for item, score in enumerate(user):\n", " if item not in user_rated and not np.isnan(score):\n", " top_k[user_code_id[nb_user]].append((item_code_id[item], score))\n", " result=[]\n", " # Let's choose k best items in the format: (user, item1, score1, item2, score2, ...)\n", " for uid, item_scores in top_k.items():\n", " item_scores.sort(key=lambda x: x[1], reverse=True)\n", " result.append([uid]+list(chain(*item_scores[:topK])))\n", " return result\n", " \n", " def estimate(self, user_code_id, item_code_id, test_ui):\n", " result=[]\n", " for user, item in zip(*test_ui.nonzero()):\n", " result.append([user_code_id[user], item_code_id[item], \n", " self.estimations[user,item] if not np.isnan(self.estimations[user,item]) else 1])\n", " return result" ] }, { "cell_type": "code", "execution_count": 12, "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" ] } ], "source": [ "model=SVD(train_ui, learning_rate=0.005, regularization=0.02, nb_factors=100, iterations=40)\n", "model.train(test_ui)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "df=pd.DataFrame(model.learning_process).iloc[:,:2]\n", "df.columns=['epoch', 'train_RMSE']\n", "plt.plot('epoch', 'train_RMSE', data=df, color='blue')\n", "plt.legend()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "df=pd.DataFrame(model.learning_process[10:], columns=['epoch', 'train_RMSE', 'test_RMSE'])\n", "plt.plot('epoch', 'train_RMSE', data=df, color='blue')\n", "plt.plot('epoch', 'test_RMSE', data=df, color='yellow', linestyle='dashed')\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Saving and evaluating recommendations" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "model.estimations()\n", "\n", "top_n=pd.DataFrame(model.recommend(user_code_id, item_code_id, topK=10))\n", "\n", "top_n.to_csv('Recommendations generated/ml-100k/Self_SVD_reco.csv', index=False, header=False)\n", "\n", "estimations=pd.DataFrame(model.estimate(user_code_id, item_code_id, test_ui))\n", "estimations.to_csv('Recommendations generated/ml-100k/Self_SVD_estimations.csv', index=False, header=False)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "943it [00:00, 4912.25it/s]\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
RMSEMAEprecisionrecallF_1F_05precision_superrecall_superNDCGmAPMRRLAUCHRReco in testTest coverageShannonGini
00.91440.7180470.1033930.0434040.052920.0701190.0934550.0749010.1074410.050770.2007190.5184330.47720.8663840.1457433.8607210.972299
\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", "\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", "\n", " Test coverage Shannon Gini \n", "0 0.145743 3.860721 0.972299 " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import evaluation_measures as ev\n", "\n", "estimations_df=pd.read_csv('Recommendations generated/ml-100k/Self_SVD_estimations.csv', header=None)\n", "reco=np.loadtxt('Recommendations generated/ml-100k/Self_SVD_reco.csv', delimiter=',')\n", "\n", "ev.evaluate(test=pd.read_csv('./Datasets/ml-100k/test.csv', sep='\\t', header=None),\n", " estimations_df=estimations_df, \n", " reco=reco,\n", " super_reactions=[4,5])" ] }, { "cell_type": "code", "execution_count": 37, "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" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ModelRMSEMAEprecisionrecallF_1F_05precision_superrecall_superNDCGmAPMRRLAUCHRReco in testTest coverageShannonGini
0Self_RP3Beta3.7024463.5272730.2821850.1920920.1867490.2169800.2041850.2400960.3391140.2049050.5721570.5935440.8759281.0000000.0772013.8758920.974947
0Self_TopPop2.5082582.2179090.1888650.1169190.1187320.1415840.1304720.1374730.2146510.1117070.4009390.5555460.7656421.0000000.0389613.1590790.987317
0Ready_SVD0.9527840.7505970.0952280.0474970.0531420.0670820.0848710.0764570.1090750.0501240.2413660.5204590.4994700.9920470.2178934.4052460.953484
0Self_SVDBaseline0.9133800.7199740.1057260.0450550.0542330.0715790.0966740.0758990.1199790.0597090.2513890.5192700.4761400.9997880.1154403.5781290.980463
0Self_SVD0.9144000.7180470.1033930.0434040.0529200.0701190.0934550.0749010.1074410.0507700.2007190.5184330.4772000.8663840.1457433.8607210.972299
0Ready_SVDBiased0.9403750.7422640.0921530.0396450.0468040.0618860.0793990.0559670.1020170.0479720.2168760.5165150.4411450.9974550.1673884.2353480.962085
0Ready_Baseline0.9494590.7524870.0914100.0376520.0460300.0612860.0796140.0564630.0959570.0431780.1981930.5155010.4379641.0000000.0339112.8365130.991139
0Self_GlobalAvg1.1257600.9435340.0611880.0259680.0313830.0413430.0405580.0321070.0676950.0274700.1711870.5095460.3849421.0000000.0259742.7117720.992003
0Ready_Random1.5185511.2187840.0505830.0240850.0273230.0348260.0312230.0264360.0549020.0206520.1379280.5085700.3531280.9876990.1832615.0938050.908215
0Ready_I-KNN1.0303860.8130670.0260870.0069080.0105930.0160460.0211370.0095220.0242140.0089580.0480680.4998850.1548250.4023330.4343435.1336500.877999
0Ready_U-KNNBaseline0.9353270.7374240.0025450.0007550.0011050.0016020.0022530.0009300.0034440.0013620.0117600.4967240.0212090.4828210.0598852.2325780.994487
0Ready_I-KNNBaseline0.9353270.7374240.0025450.0007550.0011050.0016020.0022530.0009300.0034440.0013620.0117600.4967240.0212090.4828210.0598852.2325780.994487
0Ready_U-KNN1.0234950.8079130.0007420.0002050.0003050.0004490.0005360.0001980.0008450.0002740.0027440.4964410.0074230.6021210.0108232.0891860.995706
0Self_TopRated1.0330850.8220570.0009540.0001880.0002980.0004810.0006440.0002230.0010430.0003350.0033480.4964330.0095440.6990460.0050511.9459100.995669
0Self_BaselineUI0.9675850.7627400.0009540.0001700.0002780.0004630.0006440.0001890.0007520.0001680.0016770.4964240.0095440.6005300.0050511.8031260.996380
0Self_IKNN1.0183630.8087930.0003180.0001080.0001400.0001890.0000000.0000000.0002140.0000370.0003680.4963910.0031810.3921530.1154404.1747410.965327
\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.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_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_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.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.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.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.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, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import imp\n", "imp.reload(ev)\n", "\n", "import evaluation_measures as ev\n", "dir_path=\"Recommendations generated/ml-100k/\"\n", "super_reactions=[4,5]\n", "test=pd.read_csv('./Datasets/ml-100k/test.csv', sep='\\t', header=None)\n", "\n", "ev.evaluate_all(test, dir_path, super_reactions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Embeddings" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 2],\n", " [3, 4]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "array([[0.4472136 , 0.89442719],\n", " [0.6 , 0.8 ]])" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x=np.array([[1,2],[3,4]])\n", "display(x)\n", "x/np.linalg.norm(x, axis=1)[:,None]" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
codescoreitem_ididtitlegenres
02571.000000258258Contact (1997)Drama, Sci-Fi
12210.739090222222Star Trek: First Contact (1996)Action, Adventure, Sci-Fi
2630.7367946464Shawshank Redemption, The (1994)Drama
311620.73677711631163Portrait of a Lady, The (1996)Drama
41250.736246126126Spitfire Grill, The (1996)Drama
53090.734523310310Rainmaker, The (1997)Drama
616050.73382616061606Deceiver (1997)Crime
72380.731338239239Sneakers (1992)Crime, Drama, Sci-Fi
82220.724939223223Sling Blade (1996)Drama, Thriller
92660.724812267267unknownunknown
\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", "\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 " ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "item=random.choice(list(set(train_ui.indices)))\n", "\n", "embeddings_norm=model.Qi/np.linalg.norm(model.Qi, axis=1)[:,None] # we do not mean-center here\n", "# omitting normalization also makes sense, but items with a greater magnitude will be recommended more often\n", "\n", "similarity_scores=np.dot(embeddings_norm,embeddings_norm[item].T)\n", "top_similar_items=pd.DataFrame(enumerate(similarity_scores), columns=['code', 'score'])\\\n", ".sort_values(by=['score'], ascending=[False])[:10]\n", "\n", "top_similar_items['item_id']=top_similar_items['code'].apply(lambda x: item_code_id[x])\n", "\n", "items=pd.read_csv('./Datasets/ml-100k/movies.csv')\n", "\n", "result=pd.merge(top_similar_items, items, left_on='item_id', right_on='id')\n", "\n", "result" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# project task 5: implement SVD on top baseline (as it is in Surprise library)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "# making changes to our implementation by considering additional parameters in the gradient descent procedure \n", "# seems to be the fastest option\n", "# please save the output in 'Recommendations generated/ml-100k/Self_SVDBaseline_reco.csv' and\n", "# 'Recommendations generated/ml-100k/Self_SVDBaseline_estimations.csv'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Ready-made SVD - Surprise implementation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SVD" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Generating predictions...\n", "Generating top N recommendations...\n", "Generating predictions...\n" ] } ], "source": [ "import helpers\n", "import surprise as sp\n", "import imp\n", "imp.reload(helpers)\n", "\n", "algo = sp.SVD(biased=False) # to use unbiased version\n", "\n", "helpers.ready_made(algo, reco_path='Recommendations generated/ml-100k/Ready_SVD_reco.csv',\n", " estimations_path='Recommendations generated/ml-100k/Ready_SVD_estimations.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SVD biased - on top baseline" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Generating predictions...\n", "Generating top N recommendations...\n", "Generating predictions...\n" ] } ], "source": [ "import helpers\n", "import surprise as sp\n", "import imp\n", "imp.reload(helpers)\n", "\n", "algo = sp.SVD() # default is biased=True\n", "\n", "helpers.ready_made(algo, reco_path='Recommendations generated/ml-100k/Ready_SVDBiased_reco.csv',\n", " estimations_path='Recommendations generated/ml-100k/Ready_SVDBiased_estimations.csv')" ] }, { "cell_type": "code", "execution_count": 40, "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" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ModelRMSEMAEprecisionrecallF_1F_05precision_superrecall_superNDCGmAPMRRLAUCHRReco in testTest coverageShannonGini
0Self_RP3Beta3.7024463.5272730.2821850.1920920.1867490.2169800.2041850.2400960.3391140.2049050.5721570.5935440.8759281.0000000.0772013.8758920.974947
0Self_TopPop2.5082582.2179090.1888650.1169190.1187320.1415840.1304720.1374730.2146510.1117070.4009390.5555460.7656421.0000000.0389613.1590790.987317
0Ready_SVD0.9519850.7499040.1058320.0542870.0590990.0744480.0935620.0851080.1246630.0600890.2756600.5239030.5270410.9996820.2142864.4108900.953748
0Self_SVDBaseline0.9133800.7199740.1057260.0450550.0542330.0715790.0966740.0758990.1199790.0597090.2513890.5192700.4761400.9997880.1154403.5781290.980463
0Self_SVD0.9144000.7180470.1033930.0434040.0529200.0701190.0934550.0749010.1074410.0507700.2007190.5184330.4772000.8663840.1457433.8607210.972299
0Ready_SVDBiased0.9403750.7422640.0921530.0396450.0468040.0618860.0793990.0559670.1020170.0479720.2168760.5165150.4411450.9974550.1673884.2353480.962085
0Ready_Baseline0.9494590.7524870.0914100.0376520.0460300.0612860.0796140.0564630.0959570.0431780.1981930.5155010.4379641.0000000.0339112.8365130.991139
0Self_GlobalAvg1.1257600.9435340.0611880.0259680.0313830.0413430.0405580.0321070.0676950.0274700.1711870.5095460.3849421.0000000.0259742.7117720.992003
0Ready_Random1.5185511.2187840.0505830.0240850.0273230.0348260.0312230.0264360.0549020.0206520.1379280.5085700.3531280.9876990.1832615.0938050.908215
0Ready_I-KNN1.0303860.8130670.0260870.0069080.0105930.0160460.0211370.0095220.0242140.0089580.0480680.4998850.1548250.4023330.4343435.1336500.877999
0Ready_U-KNNBaseline0.9353270.7374240.0025450.0007550.0011050.0016020.0022530.0009300.0034440.0013620.0117600.4967240.0212090.4828210.0598852.2325780.994487
0Ready_I-KNNBaseline0.9353270.7374240.0025450.0007550.0011050.0016020.0022530.0009300.0034440.0013620.0117600.4967240.0212090.4828210.0598852.2325780.994487
0Ready_U-KNN1.0234950.8079130.0007420.0002050.0003050.0004490.0005360.0001980.0008450.0002740.0027440.4964410.0074230.6021210.0108232.0891860.995706
0Self_TopRated1.0330850.8220570.0009540.0001880.0002980.0004810.0006440.0002230.0010430.0003350.0033480.4964330.0095440.6990460.0050511.9459100.995669
0Self_BaselineUI0.9675850.7627400.0009540.0001700.0002780.0004630.0006440.0001890.0007520.0001680.0016770.4964240.0095440.6005300.0050511.8031260.996380
0Self_IKNN1.0183630.8087930.0003180.0001080.0001400.0001890.0000000.0000000.0002140.0000370.0003680.4963910.0031810.3921530.1154404.1747410.965327
\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.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_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_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.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.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.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.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, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import imp\n", "imp.reload(ev)\n", "\n", "import evaluation_measures as ev\n", "dir_path=\"Recommendations generated/ml-100k/\"\n", "super_reactions=[4,5]\n", "test=pd.read_csv('./Datasets/ml-100k/test.csv', sep='\\t', header=None)\n", "\n", "ev.evaluate_all(test, dir_path, super_reactions)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 4 }