前段时间参加了一次数据竞赛,做的是用户兴趣度预测。下面说说我做的时候的一些思路和想法。
首先说数据:官方给了大约700M的训练数据,数据为CSV格式,用python的pandas读入后观察数据,会发现一个行数大约为三千四百余万、列为4的Dataframe,每一行代表了一次评分记录,记录中包含的信息为uid、iid、‘score’、‘time' ,即(columns=['uid'、‘iid’、‘time’、‘score’])。
下面就可以说说我们的思路了~:我们先是使用各种平均值法(包括u_means,i_means,u_i_means方法)这种方法逼格Low,效果也不怎么样,所以这里详细说了,然后我们把用户和商品评分的方差(std)考虑了进来,以此表示评分的波动,希望可以建立一个数学模型,最终效果也不好,再然后我们使用了协同过滤算法~~,这是推荐系统里最常见的算法,不多解释了,可是我们在做的时候又遇到问题了,(稀疏性如何解决就不提了,因为我们根本就没有建立起计算相似度所需要的矩阵,原因是数据太多,用户多,商品也多,建立一个[iid_max,uid_max]的矩阵太耗内存~~,我的笔记本只有6G内存,无法存储如此大的数据),不过这个问题并不严重,毕竟我们可以分开计算物体的相似度,具体思想参考 http://data.qq.com/article?id=823,我尝试了如此做,先是借鉴了关联规则里的Aproari算法来做,可问题来了,这样太慢了,然后我选择用FP-Tree,以为会快好多,事实证明自己是在太天真,等了三小时,没有结束,我便强制停止了程序,所以协同过滤的效果会怎么样,我没有确切的知道,谁如果愿意的话可以自己找些数据做做~~,再然后我们选择了LFM算法,这是一个学习算法~~,具体如何理解可参考http://blog.youkuaiyun.com/zjxiaolu/article/details/44545885
不过对于LFM这个算法真正在用的时候依然会有问题~~,会遇到一些奇葩的问题~~,具体问题是什么,大家做的时候可能也会遇到,对此如何解决呢~~?我们想到的是在学习的过程中加入限制条件~~,这样便可以解决学习过程中的一些问题,下面贴代码: