0. 结果
F1:1.65 Accuracy: 0.01
代码请见github:github.com/jady3356/MachineLearning/tree/master/Tianchi/fresh_offline
(注:几乎每行都有注释,但是不能直接跑,注释掉了很多特征提取的代码)
这样的结果几乎可以用excel过滤来得到,由于我是ML,数据挖掘,python都是业余小白,仅仅是做练习用,请轻拍~
1. 动机
看了Ng老师的视频,做了练习拿了证书,看了看Tensorflow的基础,玩了玩阿里的PI,也拿别人的代码跑了一些预测。总感觉没有属于自己的入手的实际的toy project。突然看到有个天池大赛,里面有新人离线赛。感觉可以练练手。
2. 初探
第一感觉挺简单的,这种推荐系统都是ML人不屑于搞的东东,推荐算法也算是ML的一个应用奇葩吧。但是,我拿到这个题目的时候根本没想清楚是解决一个什么问题,应该如何建模,只知道应该是一个逻辑回归的问题。然后一股脑的把user_id, item_id, geo_hash, time, item_cat,都作为特征,把behaviro_type作为label. 当然还花了大力气把time和geo_hash数字化,做到最后却不知道怎么预测。。。渐渐发现自己根本没有入门,要学的东西太多了。如何处理csv, 如何做特征工程,倒是是要解决什么问题,怎么建立模型...统统都是小白。
3. 入门
(1) Pandas
pd貌似是ML特征处理比较流行的工具,看到大师貌似都用spark, sql. 完全不懂, 感觉pd比较容易上手。主要用到的功能有,读写csv, 数据类型转换,去重, 统计,过滤,groupby, merge, join...要提前的特征并不复杂,但是基本上要用到pd常用的功能。我没有专门去学习每一个方法,都是每要实现一点就去百度,很多方法用的很多遍都还是不理解。不过最后各个问题都有解决办法了。过程是艰难的,曾经几度想放弃。
(2)模型构建
刚开始,自己一直想不明白怎么建模。百度了一圈,主要参考三个大神的帖子:
oilbeater.com/%E9%98%BF%E9%87%8C%E5%A4%A7%E6%95%B0%E6%8D%AE%E6%AF%94%E8%B5%9B/2014/04/04/the-bigdata-race-3.html
blog.csdn.net/wy250229163/article/details/53046006
blog.csdn.net/Snoopy_Yuan/article/details/75105724
首先,用1216-1217的特征和1218是否购买(label)构成了一个训练模型。然后把1217-1218的相同的特征代入训练好的模型(各种feature的weight)来预测1219是否购买。一种简单的建模就是:
index features label
user_id, item_id feature 1/0
index可以理解为总的输入数据的index, 类似与图像识别的每张图片的index, 不能算作特征。
feature就是购买行为,时间与user_id, item_id之前的对应的数据中提取出来的列。简单理解就是通过大量的用户-商品与特征的关系的模型。
比如,用户在1216和1217点击了且加了购物车,那么1218购买的概率就很大。表现在逻辑回归的角度来看就是点击和加购物车的weight就会很大,其他收藏,购买的weight很小,甚至为负的,因为买过的人就很可能不会再买了。
4. 总结
(1) 特征还可以扩充到100维,成绩应该还可以提高,有时间再研究;
(2) 特征工程占80%的工作量一点都不假;
(3) 最后提交结果一直是0,百度了一下用notepad++打开对比了样列,发现user_id和item_id保存成了float, 弄了好几天还以为是模型或者格式不对,超囧~
(4) 大神貌似都用spark+sklearn,有空应该再学习。
(5)tensorflow建的模型或者参数初始化有点问题,貌似有梯度消失的问题,训练到30次左右,accuracy就不变了,而且不稳定,有时候很差;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。