LBO_full验证的意思是:

除了留出一份作为特定的验证集以外,

其余所有数据丢入训练中,每次训练都使用除了初始设定的验证集以外的所有数据进行训练,然后取平均

NUMBER_OF_MODELS=3

代码[1]如下:

def make_predictions2(train_df,test_df,features_columns, target, lgb_params, NFOLDS=2):SEED=42P = test_df[features_columns]#设定测试集print('#'*20)print('LBO full set training...') ## We need Divide Train Set by Time blocks## Convert TransactionDT to Months## And use last month as Validation ## to find best roundtrain_df['DT_M'] = train_df['TransactionDT'].apply(lambda x: (START_DATE + datetime.timedelta(seconds = x)))train_df['DT_M'] = (train_df['DT_M'].dt.year-2017)*12 + train_df['DT_M'].dt.month main_train_set = train_df[train_df['DT_M']<(train_df['DT_M'].max())].reset_index(drop=True)#前面几个月数据集作为训练集validation_set = train_df[train_df['DT_M']==train_df['DT_M'].max()].reset_index(drop=True) #最后一个月数据集作为验证集#训练集裸数据和类别标签分开X,y = main_train_set[features_columns], main_train_set[TARGET]#五个月的数据作为训练#验证集裸数据和类别标签分开v_X, v_y = validation_set[features_columns], validation_set[TARGET]#最后一个月的数据作为验证#---------------------下面是验证,获取最佳current_iteration()------------------------------------------------------------for current_model in range(3):print('Model:',current_model+1)SEED += 1seed_everything(SEED)corrected_lgb_params = lgb_params.copy()corrected_lgb_params['seed'] = SEEDtrain_data = lgb.Dataset(X, label=y)valid_data = lgb.Dataset(v_X, label=v_y)  estimator = lgb.train(corrected_lgb_params,train_data,valid_sets = [train_data, valid_data],verbose_eval = 1000,)estimators_bestround.append(estimator.current_iteration())#下面根据#---------------------下面是测试以及输出预测结果------------------------------------------------------------corrected_lgb_params = lgb_params.copy()corrected_lgb_params['n_estimators'] = int(np.mean(estimators_bestround))corrected_lgb_params['early_stopping_rounds'] = Noneprint('#'*10)print('Mean Best round:', corrected_lgb_params['n_estimators'])# 所有训练数据X,y = train_df[features_columns], train_df[TARGET]# 测试数据P = test_df[features_columns]RESULTS['lbo_full'] = 0NUMBER_OF_MODELS = 3for current_model in range(NUMBER_OF_MODELS):print('Model:',current_model+1)SEED += 1seed_everything(SEED)    train_data = lgb.Dataset(X, label=y)estimator = lgb.train(corrected_lgb_params,train_data)RESULTS['prediction'] += estimator.predict(P)/NUMBER_OF_MODELSreturn RESULTS    

LBO验证的意思是:

除了留出一份作为特定的验证集以外(这里与上面相同),其余进行交叉验证(N_SPLITS=3)

print('#'*20)
print('LBO training...') ## We need Divide Train Set by Time blocks
## Convert TransactionDT to Months
## And use last month as Validation
train_df['DT_M'] = train_df['TransactionDT'].apply(lambda x: (START_DATE + datetime.timedelta(seconds = x)))
train_df['DT_M'] = (train_df['DT_M'].dt.year-2017)*12 + train_df['DT_M'].dt.month main_train_set = train_df[train_df['DT_M']<(train_df['DT_M'].max())].reset_index(drop=True)
validation_set = train_df[train_df['DT_M']==train_df['DT_M'].max()].reset_index(drop=True)## We will use oof kfold to find "best round"
folds = KFold(n_splits=N_SPLITS, shuffle=True, random_state=SEED)# Main Data
X,y = main_train_set[features_columns], main_train_set[TARGET]# Validation Data
v_X, v_y = validation_set[features_columns], validation_set[TARGET]estimators_bestround = []
for fold_, (trn_idx, val_idx) in enumerate(folds.split(X, y)):print('Fold:',fold_+1)tr_x, tr_y = X.iloc[trn_idx,:], y[trn_idx]    train_data = lgb.Dataset(tr_x, label=tr_y)valid_data = lgb.Dataset(v_X, label=v_y)  estimator = lgb.train(lgb_params,train_data,valid_sets = [train_data, valid_data],verbose_eval = 1000,)estimators_bestround.append(estimator.current_iteration())## Now we have "mean Best round" and we can train model on full set
corrected_lgb_params = lgb_params.copy()
corrected_lgb_params['n_estimators'] = int(np.mean(estimators_bestround))
corrected_lgb_params['early_stopping_rounds'] = None
print('#'*10)
print('Mean Best round:', corrected_lgb_params['n_estimators'])# Main Data
X,y = train_df[features_columns], train_df[TARGET]# Test Data
P = test_df[features_columns]
RESULTS['lbo'] = 0for fold_, (trn_idx, val_idx) in enumerate(folds.split(X, y)):print('Fold:',fold_+1)tr_x, tr_y = X.iloc[trn_idx,:], y[trn_idx]train_data = lgb.Dataset(tr_x, label=tr_y)estimator = lgb.train(corrected_lgb_params,train_data)RESULTS['lbo'] += estimator.predict(P)/N_SPLITS#这里的P其实是验证集print('AUC score', metrics.roc_auc_score(RESULTS[TARGET], RESULTS['lbo']))
print('#'*20)   

注意事项:

根据[2],不要在特征工程阶段,把验证集也包括进来,因为这会导致leakage.

Reference:

[1]https://www.kaggle.com/kyakovlev/ieee-cv-options

[2]https://www.kaggle.com/c/ieee-fraud-detection/discussion/107728#latest-627879

LBO验证与LBO_full验证的区别相关推荐

  1. Spring Validation验证框架参数验证 @Validated 和 @Valid 的区别

    参数验证 @Validated 和 @Valid 的区别 Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR- ...

  2. 验证和确认的区别_验证与确认之间的区别

    验证和确认的区别 Today we are going to cover the topic difference between Verification and Validation. 今天,我们 ...

  3. Windows身份验证和混合验证的区别

    两个验证方式的不同主要集中在信任连接和非信任连接. windows 身份验证相对于混合模式更加安全,使用本连接模式时候,sql不判断sa密码,而仅根据用户的windows权限来进行身份验证,我们称为& ...

  4. 【转】ASP.NET验证控件详解(非空验证,比较验证,范围验证,正则表达式,自定义验证)...

    [转]ASP.NET验证控件详解(非空验证,比较验证,范围验证,正则表达式,自定义验证) ASP.NET验证控件详解 现在ASP.NET,你不但可以轻松的实现对用户输入的验证,而且,还可以选择验证在服 ...

  5. 【Block-Level Verification】 芯片开发通识_验证目标_ 验证语言_ 验证职业前景 _挑战和瓶颈_验证周期_功能描述文档_验证计划_回归测试_硅后测试_逃逸分析...

    SystemVerilog验证通识 1. 芯片开发概述 不同于通用电路,专用集成电路为了专门解决或者优化相关工程问题,例如专用算法的电路实现,如芯片里加入人工智能处理单元,为CPU\GPU减负,目的是 ...

  6. 机器学习中为什么需要验证集,验证集与测试集的区别是什么?

    目录 1.为什么需要验证集 2.验证集与测试集的区别 3.如何使用验证集 4.为什么验证集和测试集都需要? 参考链接 1.为什么需要验证集 在机器学习中,训练模型时需要调节模型的参数来提高模型的性能, ...

  7. 交叉验证方法汇总【附代码】(留一法、K折交叉验证、分层交叉验证、对抗验证、时间序列交叉验证)

    目录 交叉验证是什么? 留一验证(LOOCV,Leave one out cross validation ) LOOCC代码 验证集方法 验证集方法代码 K折交叉验证(k-fold cross va ...

  8. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

  9. 计算机系统验证课件,回顾性验证及再验证简介(ppt 42页)

    回顾性验证及再验证简介目录: 一. 验证-生命周期 二. 验证的方法及适用条件 三. 验证状态的维持-生命周期法 四. 变更控制 五. 变更控制 六. 回顾性验证 七. 再验证 八. 工艺用水 九.  ...

最新文章

  1. 匿名函数应用-多线程测试代码
  2. React 16.8.6 发布,构建用户界面的 JavaScript 库
  3. 关于对接保税仓物流系统或支付系统推送报关单的一些琐碎的问题
  4. 北京80后整体亮相《北京作家》
  5. 【POJ - 3744】Scout YYF I(概率dp,矩阵快速幂优化dp)
  6. 外部函数获取内部函数变量_一维随机变量的分布函数
  7. 设计模式学习笔记——命令模式
  8. 触发器和存储过程的使用
  9. Linux安装mysql-5.7.17
  10. qpython3h数字雨代码,html开发数字雨特效代码
  11. 推荐几款好用的国产操作系统
  12. 大麦支持选座位、定时等功能
  13. Secondary NameNode工作机制
  14. cocos:MotionStreak拖尾渐隐效果
  15. UE4 奇怪灯光阴影
  16. npm 安装 node-sass 失败问题分析及解决方案
  17. linux 对应 网口_linux 查看网口类型
  18. Echarts3实例 map地图选中高亮显示
  19. 第一个被赋予公明身份的机器人_机器人被赋予公民身份引发舆论关注
  20. VBA中引用单元格与区域

热门文章

  1. hdu 1247 字典树
  2. android应用框架与原理之应用框架
  3. Tomcat无法启动,报错java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
  4. java开发常用jar包_Java开发中常用jar包整理及使用
  5. Angular2-关闭占用的4200端口
  6. (二)面试前的准备【要知己知彼,不打无准备之仗】
  7. 解决Windows环境下Git Bash 不能输入中文的问题
  8. Qt与OpenCV结合:图像显示
  9. 为什么已有Elasticsearch,我们还要重造实时分析引擎AresDB?
  10. css3实现流星坠落效果