天池新人离线赛:移动端推荐--Python+tensorflow小白实现

0. 结果

F1=1.65%, 准确率=0.01 总排名197

天池新人离线赛:移动端推荐--Python+tensorflow小白实现_第1张图片


代码请见github:https://github.com/jady3356/MachineLearning/tree/master/Tianchi/fresh_offline

(注:几乎每行都有注释,但是不能直接跑,注释掉了很多特征提取的代码)

这样的结果几乎可以用excel过滤来得到,由于我是ML,数据挖掘,python都是业余小白,仅仅是做练习用,请轻拍~


1. 动机

看了Ng老师的视频,做了练习拿了证书,看了看Tensorflow的基础,玩了玩阿里的PI,也拿别人的代码跑了一些预测。总感觉没有属于自己的入手的实际的toy project。突然看到有个天池大赛,里面有新人离线赛。感觉可以练练手。

2. 初探

赛题:

https://tianchi.aliyun.com/getStart/information.htm?spm=5176.11165320.5678.2.29aa6e5cENX7ky&raceId=231522

第一感觉挺简单的,这种推荐系统都是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)模型构建

刚开始,自己一直想不明白怎么建模。百度了一圈,主要参考三个大神的帖子:

http://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

https://blog.csdn.net/wy250229163/article/details/53046006

https://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) tensor建的模型或者参数初始化有点问题,貌似有梯度消失的问题,训练到30次左右,accuracy就不变了,而且不稳定,有时候很差;

(2)特征还可以扩充到100维,成绩应该还可以提高,有时间再研究;

(3) 特征工程占80%的工作量一点都不假;

(4) 最后提交结果一直是0,百度了一下用notepad++打开对比了样列,发现user_id和item_id保存成了float, 弄了好几天还以为是模型或者格式不对,超囧~

(5) 大神貌似都用spark+sklearn,有空应该再学习。

你可能感兴趣的:(AI)