2017.07.31回顾 LabelEncoder xgb.cv

来源:互联网 发布:qq国际版for ubuntu 编辑:程序博客网 时间:2024/06/08 04:02

1、花了少量时间补充上周五的小结

2、然后开始继续抄作业

  • kernel去除outliers的方法是用的常数,-0.4和0.4,为什么这样设计,并没有给出说明,这个值是介于2 delta和3 delta之间
  • 缺失值处理方面,全部用-1填补
  • 对于类型为object的变量,使用了一个sklearn.preprocessing中的LabelEncoder,这个类使用上需要建立一个实例,使用方法很简单,一个fit产生编码,transform用编码去替代,从0开始编码到n-1
    lbl = LabelEncoder()lbl.fit(list(column.values))column = lbl.transform(list(column.values))
  • 这个kernel用到的算法就是单纯的xgb,这里多涉及到一个参数,base_score,这个其实就是init_score,就好比之前sklearn的GBDT用的初始预测就是logOdds
  • xgb最耗时的是,DMatrix的转换,应该是用控件换时间,我一个150M的数据集转换出来是1.2G,所以大的数据集转换了要序列化到硬盘,下次可以直接载入
  • cv_result = xgb.cv(xgb_params,                   dtrain,                   nfold=5,                   num_boost_round=1000,                   early_stopping_rounds=50,                   verbose_eval=10,                   show_stdv=False)
    xgb.cv用于交叉验证,num_boost_round是最大迭代次数,early_stopping_rounds,测试集50 round没有提升迭代停止,输出最好的轮数,verbose_eval每10轮打印一次评价指标,show_stdv不打印交叉验证的标准差。xgb.cv返回的是一个dataframe,这里以mae为例子,包含四列,分别是测试集mean-mae,std-mae,训练集mean-mae,std-mae
  • model = xgb.train(dict(xgb_params, silent=1), dtrain, num_boost_round=num_boost_rounds)
    我发现kaggle上这些写train方法的时候,喜欢dict(xgb_params, silent=1),但是前面已经设置了silent为1,这样不是多此一举吗?我去掉后,发现仍然是静默的训练过程,不明白这种写法有什么优势
  • xgb.plot_importance不会输出没有fscore的变量
  • 后来用了不同的去除离群点的方式试了几次,但是都达不到他0.4的效果在,但是我觉得比较make sence的是3 delta
3、iid独立同分布
4、整理了下7月的项目完成情况
差不多以上,今天还是星期一的老毛病,效率很低,做事不够专注,做事的时候不要碰那些聊天工具,别人问也不要回,还有就是要从周末的各种综艺和WOW中走出来,工作日就是全身心的战斗,这样,从星期一醒来就不要去碰和工作学习无关的东西,还有听中文说唱容易走神,因为太容易被歌词带起走,工作中少听中文说唱,一个领域没有感觉要灵活转换,不要在一棵树上吊死