评分算法_协同过滤推荐算法:评分预测准确性评估

纸上得来终觉浅,绝知此事要躬行 -- 宋.陆游《冬夜读书示子聿》

对于评分预测常用的准确性评测指标是均方根误差RMSE和平均绝对误差MAE。

RMSE: 均方根误差(对大的偏差更敏感)

MAE: 平均绝对值误差

注意:|R|表示数据集合的长度

准确性指标计算函数:

from math import sqrt

def rmse(data):
    length = 0
    _rmse_sum = 0
    for uid, iid, real_rating, pred_rating in data:
        length += 1
        _rmse_sum += (pred_rating - real_rating) ** 2
    return round(sqrt(_rmse_sum / length), 4)

def mae(data):
    length = 0
    _mae_sum = 0
    for uid, iid, real_rating, pred_rating in data:
        length += 1
        _mae_sum += abs(pred_rating - real_rating)
    return round(_mae_sum / length, 4)

def maeAndRmse(data):
    length = 0
    _rmse_sum = 0
    _mae_sum = 0
    for uid, iid, real_rating, pred_rating in data:
        length += 1
        _rmse_sum += (pred_rating - real_rating) ** 2
        _mae_sum += abs(pred_rating - real_rating)
    return round(_mae_sum / length, 4), round(sqrt(_rmse_sum / length), 4)

接下来我们就利用这两个指标来评估我们前面实现User-Based CF和Item-Based CF算法

为了防止过拟合,我们可以将数据集拆分为训练集和测试集来试验:

数据集拆分

data_split函数将ratings.csv数据集按比例拆分为训练集和数据集,这里的拆分逻辑主要考虑的是控制用户数量不变,从每位用户的评分数据中按比例抽取,

这样能保证训练集和测试集用户是一致的,但是物品不一致,也就是说测试集中存在部分物品,训练集中不存在,而协同过滤一个最大的特点就是对于训练集中不存在的物品是不可能作出预测的。

def data_split(dat
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值