序
其实我发现我很多内容都是只有(一)
因为很多东西学了又懒得再发出来了,所以都只剩个开头。往往都觉得,开头必须开个好头,到了后面学了又什么也不想写了。但,总而言之,重要的东西还是记一记。自用自用。
这里是实验室朋友邀请去推荐系统比赛,但···我最近都在搞信号,好久没有做大数据了,得重新看起。首先,对推荐系统常用模型做一个整理吧。(协同那些我就略去了)
Baseline
以均值波动为例(我自己乱创的词)。
一般来说,大数据量的所有人的评分平均,就是一个比较合理的结果。
由于个人原因,每个人对每一个物品的评分都有一些个人化的波动。同时,有些特别烂或者特别好的东西会受到一致差评或好评。那么baseline就是做这样一件事:
- 求all平均值
- 求用户评分偏置(波动)
- 求物品评分偏置(波动)
预测评分= 均值+波动1+波动2
从而,整个问题变成了求均值,求偏置(user、item)问题。
均值很容易求,可以直接通过python的一些模块求出。
那么针对性的偏置呢?
做线性回归,构建损失函数(比如,均方差),优化损失(比如,梯度下降)。
优化的时候,可以加入正则化系数,避免过拟合。
所以我们要做的事情就是:
- 计算出所有用户对所有物品评分的平均值
- 在均值基础上+用户评分偏置+物品评分偏置作为预测评分(这就是我们采用的模型方程)
- 处理数据:groupby用户数据并聚合(agg)为list(list包含什么列:对不同类型物品的评分和物品id)(agg还可以进行统计操作比如max min等等),看到同个用户的行为统计。物品同理。然后计算global mean。(虽然如此清晰,还是先可视化一下数据再处理,对,还要注意data type)
- 划分数据集为训练集、测试集。
- 求解所有用户的评分偏置、所有物品的得分偏置
- 怎么求解呢?训练,用函