1 说在前面 在看过了yin和神秘的yesboy!的赛后分享后,我们小组都从中学到了很多。算法部分已有很好的分享了,我们小组就不在班门弄斧了。我们小组就主要分享下我们在数据分析和一些赛后感言。
2 数据分析
首先对训练数据和测试数据的数据分布进行分析,见表2-1,其中有效长度为数据项值的非空统计得到。
表2-1数据分布分析
train |
test |
||||
uid |
iid |
time |
uid |
iid |
|
最小值 |
0 |
0 |
0 |
0 |
0 |
最大值 |
223969 |
14725 |
1346 |
223969 |
14725 |
有效长度 |
157949 |
14620 |
1347 |
142740 |
12321 |
从表2-1可以看出,训练数据比较稀疏,并不是每个用户ID都有对应的训练数据。
接下来对训练数据和待预测数据进行绘图分析:图2-1为用户已评分物品统计图,其横轴为用户uid,纵轴对应为用户以评分物品的个数(从train.csv统计);图2-2为用户待预测物品统计图,其横轴为用户uid,纵轴对应为用户待评分物品的个数(从test.csv统计);图2-3为已评分物品频次图,其横轴为物品iid,纵轴对应为物品以评分次数(从train.csv统计);图2-4为评分时间频次图,其横轴为评分时间,纵轴对应为该时间评分的物品个数(从train.csv统计)。
图1-图4中的水平直线表示对应的均值,图2-3中的曲线为排序后的结果。
图2-3以评分物品频次图
图2-4评分时间与评分次数统计图
从初步的分析得出,数据集的整体分布满足80/20规律,说明数据集分布均匀,使用常用的推荐系统方法可以得到目标结果。但与Movielens数据集相比,比赛数据集在规模上更大,包含的信息量也更多。
3 解决方案 我们小组最初尝试使用平均值来代替预测结果,最优得分是7.59。之后使用了SVD和LFM来进行尝试,得分在7.8。在yin分享代码之后,我们使用模型结果平均加权,得到的结果是7.859。
4 比赛回归和感言 其实我们小组花在比赛上面的时间并不多,要感谢yin分享的代码,让我们躺进了前五名。在比赛过程中我们也积累了很多想法,走过很多弯路,从最开始对推荐系统的模糊认识到思路的清晰理解,有很多值得总结的地方:
(1) 书本教材很重要,但不会涉及到复杂的或近期出现的算法,导致上升空间很小。还需要阅读开源项目已经相关的学术论文,否则很难有满意的成绩。
(2) 线下评测环境非常重要,是直接衡量算法优劣和调整算法的依据。每天的提交次数有限,要抓住宝贵的评测机会。线下评测环境也是直接评价算法拟合和过拟合的依据,所以非常重要。
(3) 做好文档记录,每种算法的实现以及提交的结果文件,都需要组好记录,方便算法模型改进和模型融合。
(4) 算法运行过程中,尽量保存中间计算结果,缩短计算时间。
(5) 比赛算法都是有相关论文的,所以比赛并不难,难的是积极思考和脚踏实地。
[猜你喜欢]竞赛分享
- DataCastle -