Source code for ucas_dm.prediction_algorithms.baseline

from .base_algo import BaseAlgo
import numpy as np
import pandas as pd


[docs]class BaseLineAlgo(BaseAlgo): """ A simple recommend algorithm that recommend items in random. Use it as a base-line. """
[docs] def __init__(self): super().__init__() self._user_log = None
[docs] def train(self, train_set): self._user_log = pd.DataFrame(train_set) self._user_log.columns = ['user_id', 'item_id']
[docs] def top_k_recommend(self, u_id, k): specific_user_log = self._user_log[self._user_log['user_id'] == u_id] viewed_num = specific_user_log.shape[0] assert (viewed_num != 0), "User id doesn't exist" predict_rate_log = self._user_log.copy() predict_rate_log = predict_rate_log[['item_id']].drop_duplicates() predict_rate_log = predict_rate_log[~predict_rate_log['item_id'].isin(specific_user_log['item_id'])] predict_rate_log['prate'] = np.random.rand(predict_rate_log.shape[0]) predict_rate_log = predict_rate_log.sort_values(by=['prate'], ascending=False) predict_rate_log = predict_rate_log[:k] top_k_rate = predict_rate_log['prate'].values.tolist() top_k_item = predict_rate_log['item_id'].values.tolist() return top_k_rate, top_k_item
[docs] def to_dict(self): """ See :meth:`BaseAlgo.to_dict <base_algo.BaseAlgo.to_dict>` for more details. """ return {'type': 'BaseLineAlgo'}