m0_56062032 2024-05-11 00:26 采纳率: 68%
浏览 2
已结题

电影推荐系统求准确率和召回率

对基线baseline的推荐系统,已经求出其RMSE,怎样求他的准确率和召回率或者损失函数值呢?

import numpy as np
import pandas as pd
title=['user_id', 'item_id', 'rating', 'timestamp']
df = pd.read_csv("D:/Datamovies/ml-100k/u3.base",sep='\t',names = title)
test_df=pd.read_csv('D:/Datamovies/ml-100k/u3.test',sep='\t',names=title)
print (np.max(df['user_id']),np.max(df['item_id']))
ratings = np.zeros((943, 1682))
for row in df.itertuples():
    ratings[row[1]-1,row[2]-1] = row[3]
sparsity = float(len(ratings.nonzero()[0]))
sparsity /= (ratings.shape[0] * ratings.shape[1])
sparsity *= 100
print('训练集矩阵密度为: {:4.2f}%'.format(sparsity))
all_mean = np.mean(ratings[ratings!=0])
user_mean = sum(ratings.T)/sum((ratings!=0).T)
item_mean = sum(ratings)/sum((ratings!=0))
#用all_mean填充user_mean和item_mean可能存在的空值Nan
user_mean = np.where(np.isnan(user_mean), all_mean, user_mean)
item_mean = np.where(np.isnan(item_mean), all_mean, item_mean)
def predict_naive(user, item):
    prediction = item_mean[item] + user_mean[user] - all_mean
    return prediction
def rmse(pred, actual):
    '''计算预测结果的rmse'''
    from sklearn.metrics import mean_squared_error
    pred = pred[actual.nonzero()].flatten()
    actual = actual[actual.nonzero()].flatten()
    return np.sqrt(mean_squared_error(pred, actual))
# 用测试集测试
for row in test_df.itertuples():
    user,item,actual = row[1]-1,row[2]-1,row[3]
    predictions=[]
    predictions.append(predict_naive(user, item))
    actuals=[]
    actuals.append(actual)
print('测试结果的rmse为 %.4f' % rmse(np.array(predictions), np.array(actuals)))
  • 写回答

2条回答 默认 最新

  • 笑面虎 2024-05-11 00:26
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您提问的目的是想要了解如何基于一个基线推荐系统,该系统已经计算出了均方根误差(RMSE),进一步计算该系统的准确率(Precision)和召回率(Recall)或者损失函数值。

    【问题出现原因】:在推荐系统中,准确率和召回率通常是评估分类问题模型性能的指标,而在推荐系统中,更常用的是其他指标,如RMSE、MAE(平均绝对误差)等。由于推荐系统的目标是预测用户对物品的评分,而不是分类,因此准确率和召回率不是直接适用的指标。然而,如果您想要评估推荐系统的性能,可以通过其他方式定义准确率和召回率,或者使用其他更适合推荐系统的指标。

    【问题解决方案】:为了评估推荐系统的性能,我们可以使用以下几种方法:

    1. 准确率和召回率的变体:在推荐系统中,可以定义准确率和召回率的变体,例如,对于每个用户,预测评分高于某个阈值(如平均评分)的物品被认为是用户可能喜欢的。然后,可以根据这些预测来计算准确率和召回率。

    2. 其他推荐系统指标:使用更适合推荐系统的指标,如点击率(CTR)、覆盖率(Coverage)、多样性(Diversity)和新颖性(Novelty)。

    3. 损失函数:如果您想要计算损失函数值,可以使用诸如均方误差(MSE)、平均绝对误差(MAE)或RMSE等指标。

    【提供代码】:以下是一个示例,展示如何计算推荐系统中的准确率和召回率的变体:

    from sklearn.metrics import precision_score, recall_score
    
    # 假设predictions和actuals是预测评分和实际评分的数组
    threshold = all_mean  # 以所有评分的平均值为阈值
    predicted_likes = (predictions > threshold).astype(int)  # 用户是否喜欢某个物品
    actual_likes = (actuals > threshold).astype(int)  # 用户实际是否喜欢某个物品
    
    # 计算准确率和召回率
    precision = precision_score(actual_likes, predicted_likes, average='micro')
    recall = recall_score(actual_likes, predicted_likes, average='micro')
    
    print(f'Precision: {precision:.4f}')
    print(f'Recall: {recall:.4f}')
    

    【代码运行方式】:您需要在Python环境中运行上述代码,确保已经安装了scikit-learn库。

    【代码预期运行结果】:代码将输出基于您提供的数据集和模型的准确率和召回率。

    【推荐相关链接】:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月19日
  • 已采纳回答 5月11日
  • 创建了问题 5月11日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见