概述
序
其实我发现我很多内容都是只有(一)
因为很多东西学了又懒得再发出来了,所以都只剩个开头。往往都觉得,开头必须开个好头,到了后面学了又什么也不想写了。但,总而言之,重要的东西还是记一记。自用自用。
这里是实验室朋友邀请去推荐系统比赛,但···我最近都在搞信号,好久没有做大数据了,得重新看起。首先,对推荐系统常用模型做一个整理吧。(协同那些我就略去了)
Baseline
以均值波动为例(我自己乱创的词)。
一般来说,大数据量的所有人的评分平均,就是一个比较合理的结果。
由于个人原因,每个人对每一个物品的评分都有一些个人化的波动。同时,有些特别烂或者特别好的东西会受到一致差评或好评。那么baseline就是做这样一件事:
- 求all平均值
- 求用户评分偏置(波动)
- 求物品评分偏置(波动)
预测评分= 均值+波动1+波动2
从而,整个问题变成了求均值,求偏置(user、item)问题。
均值很容易求,可以直接通过python的一些模块求出。
那么针对性的偏置呢?
做线性回归,构建损失函数(比如,均方差),优化损失(比如,梯度下降)。
优化的时候,可以加入正则化系数,避免过拟合。
所以我们要做的事情就是:
- 计算出所有用户对所有物品评分的平均值
- 在均值基础上+用户评分偏置+物品评分偏置作为预测评分(这就是我们采用的模型方程)
- 处理数据:groupby用户数据并聚合(agg)为list(list包含什么列:对不同类型物品的评分和物品id)(agg还可以进行统计操作比如max min等等),看到同个用户的行为统计。物品同理。然后计算global mean。(虽然如此清晰,还是先可视化一下数据再处理,对,还要注意data type)
- 划分数据集为训练集、测试集。
- 求解所有用户的评分偏置、所有物品的得分偏置
- 怎么求解呢?训练,用函数评价好坏,用算法进行优化。函数即Loss Function, 算法即优化算法。(最简单的:均方差、梯度下降、交替最小二乘法)。
- 求解时怎么更新偏置?推导上面说的公式,知道实际上在算什么(原理理解,上述例子就是求偏导,求偏导)。用代码复现:生成偏置矩阵or dict(分别的,全零矩阵,长度就是各自数量,如果是dict 可以zip进索引 评分 id,然后用itertuple查看 )。指定迭代次数,传和设置对应参数。
- 怎么看效果?用验证集评判。测试集的预测也就是globalmean + 偏置1 + 偏置2。用真实值-预测值看损失。(or均方差··都可以)
- 善于用封装好的东西,比如sklearn。
- 怎么确定参数呢?根据loss曲线or accuracy曲线等针对性改改改。
- 最后进行封装。把不是函数的变为函数(甚至类),就可以了。
最后
以上就是暴躁中心为你收集整理的推荐系统整理(一)Baseline序Baseline的全部内容,希望文章能够帮你解决推荐系统整理(一)Baseline序Baseline所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复