我正在做一个具有300,000个用户和280,000个项目的推荐系统,人们通常通过将数据框旋转到表中来进行推荐系统:

df.pivot_table(index='User-ID',columns='Item-ID',values='Rating')

但是不可能将如此庞大的数据集转换为表格。解决此问题的常用方法是什么?还是人们使用其他结构来做推荐系统?

最佳答案

肯定有更好的方法来节省大量的计算和内存。我们创建的用户项矩阵通常是稀疏的,并且包含大量的零,这极大地增加了计算和内存的复杂性。
例如:

        Per1    Per2    Per3    Per4    Per5    Per6    Per7    per8
Item1    5        0        1     0       0        0       0       0
Ttem2    0        3        0     0       2        0       0       0


在此,矩阵中的零会增加计算量。

存储矩阵的更好方法是使用压缩的稀疏行矩阵算法存储矩阵。它删除所有零值并仅存储非零值,这是为推荐系统创建csr矩阵的简便函数:-

def create_matrix(data, user_col, item_col, rating_col):
    """
    creates the sparse user-item interaction matrix

    Parameters
    ----------
    data : DataFrame
        implicit rating data

    user_col : str
        user column name

    item_col : str
        item column name

    ratings_col : str
        implicit rating column name
    """



    # create a sparse matrix of using the (rating, (rows, cols)) format
    rows = data[user_col].cat.codes
    cols = data[item_col].cat.codes
    rating = data[rating_col]
    ratings = csr_matrix((rating, (rows, cols)))
    ratings.eliminate_zeros()
    return ratings, data


希望对您有所帮助!!!

07-26 07:01