确实很早就知道了这个比赛,但似乎一直没有开始。
之前也就刚打完一个泰迪杯,对于竞赛可以说是一无所知。
于是就等baseline,等到了麻婆豆腐1的那个版本。
5月20日开赛,我跑baseline大概都快6月中旬。
那时候一边忙着期末的各种大项目,一边找竞赛的各种指导和资料。
跑完麻婆豆腐那个,还是一头雾水,不知道这到底是怎么操作的。
当时为了LabelEncoder
、OneHotEncoder
都看了好久
后来找到了天才儿童(好像是这个名字)的baseline2,结构清晰
这里面的特征工程几乎都是由for
循环控制的,增添特征只需要在循环里面加入列名
这份代码有用到滑窗法,其详细的信息参考文章3
真正开始做,大概都是6月25日, 先读代码
弄清楚了结构,就调参、加特征
A榜基本在常规特征里面折腾,好像稍微加了点embedding
A榜结束的那天晚上我还在疯狂做特征,意图冲击B榜
然后就出问题了,特征太多,我那会儿都搞到了将近1000+
从周周星的分享4来看,似乎最多500+?
当时做到用户的兴趣特征,就是把用户看过的那些tag
和keyword
求平均
但是贪心,减了一部分,尝试,炸了,再减,再尝试
由于疯狂做出来的特征没经过验证,质量也不好,所以一致炸
这也就导致了…我B榜根本就没提交,因为没跑出来
血泪的教训啊…一定是做加法而不是减法
应当先跑个基础版本提交,说不好还能中奖
后来复盘的时候,觉得还是经验不足,好在此次有收获
首先是,做加法,一定要按照顺序做
先去挖基础特征,再去做复杂特征
可以参考这篇文章当中对于往瓶子里面加石头的比喻5
然后,做出的特征最好离线保存
一是方便后面可以直接载入,而不用再做特征
二是方便调整方案,对不同的特征进行组合验证
因为训练的时间可能很长,如果能节省做特征的时间,就能充分利用提交次数
关于特征的离线保存,CSV确实有点慢,可以换别的试试6
对于做完所有的那个好大的数据框
我当时尝试过pickle
、parquet
、feather
,都炸了
不仅炸了,还浪费了时间,因为我是在B榜那天做的
猜测是数据规模的问题,可能他们无法处理?
但是也不对啊,parquet
可是Hadoop
那套系统里面的,例子6也是2.5GB
当然可能这个总的、所有特征的数据框远超2.5GB
不太清楚发生了啥,我也很疑惑
后面可以试试分拆数据,然后用其他格式保存,提高I/O
啊啊啊啊找到原因了!我在本地跑的时候报错,,缺少相关组件。果然还是不熟悉这些工具
这是parquet
ImportError: Unable to find a usable engine; tried using: 'pyarrow', 'fastparquet'.
A suitable version of pyarrow or fastparquet is required for parquet support.
Trying to import the above resulted in these errors:
- Missing optional dependency 'pyarrow'. pyarrow is required for parquet support. Use pip or conda to install pyarrow.
- Missing optional dependency 'fastparquet'. fastparquet is required for parquet support. Use pip or conda to install fastparquet.
这是feather
ImportError: Missing optional dependency 'pyarrow'. Use pip or conda to install pyarrow.
Pandas
的Pickle
倒是可以直接用,其模块的后缀为.pkl.gzip
,在这篇博文当中有说明,不同于Pickle
原生格式的文件类型7
但如果是原生的.pkl
的后缀,好像是可以直接用Pickle
模块,而不用装别的库。
.pkl.gzip
的后缀还没有尝试过
这个测评看起来是parquet
比较省内存,有压缩文件。不过单纯考虑速度的话,自带的Pickle
就够用了。毕竟parquet
还要装其他的库
还有一个神奇的东西,reduce_mem
好像是对数据格式进行变换,反正很省内存
对了,LightGBM也有过一个报错
word2vec也有报错
关于保存并实时查看训练过程
这里也放一下相关的比赛的参考吧