kaggle竞赛实战8——其他方案之XGBOOST及NLP特征优化

之前都用的集成算法,发现差异不大,考虑在特征优化上提升数据质量,用NLP算法优化id列

有两种方法,分别是countervector和TF-IDF,前者就是词频,后者由TF(词频)和IDF(反文档词频)两部分组成,具体理论部分可参考推荐算法课程学习笔记2:文本特征提取基础_countervector-CSDN博客这篇文章

from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer 
from sklearn.preprocessing import OneHotEncoder, LabelEncoder 
from scipy import sparse


      # 创建空DataFrame用于保存NLP特征 
      train_x = pd.DataFrame() 
      test_x = pd.DataFrame() 


      # 实例化CountVectorizer评估器与TfidfVectorizer评估器 
      cntv = CountVectorizer() 
      tfv = TfidfVectorizer(ngram_range=(1, 2), min_df=3, max_df=0.9, use_idf=1, smooth_idf=1, sublinear_tf=1) #max_df指词汇表中超过这个阈值的词会被剔除

  # 创建空列表用户保存修正后的列名称 

vector_feature=[]

 for co in ['merchant_id', 'merchant_category_id', 'state_id', 'subsector_id', 'city_id']: 
          vector_feature.extend([co+'_new', co+'_hist', co+'_all']) #


      # 提取每一列进行新特征衍生 
      for feature in vector_feature: 
          print(feature) 
          cntv.fit([feature].append(test[feature])) #统计词频
          train_x = sparse.hstack((train_x, cntv.transform(train[feature]))).tocsr() #tocsr作用是保存成稀疏矩阵的格式,sparse.hstack
          test_x = sparse.hstack((test_x, cntv.transform(test[feature]))).tocsr() 
           
          tfv.fit(train[feature].append(test[feature])) 
          train_x = sparse.hstack((train_x, tfv.transform(train[feature]))).tocsr() 
          test_x = sparse.hstack((test_x, tfv.transform(test[feature]))).tocsr() 


      # 保存NLP特征衍生结果 
      sparse.save_npz(\  preprocess/train_nlp.npz\  , train_x) 
      sparse.save_npz(\  preprocess/test_nlp.npz\  , test_x)  

接下来进行xgboost训练,先导入包
      import xgboost as xgb 
      from sklearn.feature_selection import f_regression 
      from numpy.random import RandomState 
      from bayes_opt import BayesianOptimization  

然后读数据

  train = pd.read_csv('preprocess/train.csv') 
      test = pd.read_csv('preprocess/test.csv')  

注意由于xgboost会自动做特征筛选,因此自己不会去筛

导入特征名和训练数据集

      features = train.columns.tolist() 
      features.remove('card_id') 
      features.remove('target') 

   train_x = sparse.load_npz(\  preprocess/train_nlp.npz\  ) 
      test_x = sparse.load_npz(\  preprocess/test_nlp.npz\  ) 
       
      train_x = sparse.hstack((train_x, train[features])).tocsr() 
      test_x = sparse.hstack((test_x, test[features])).tocsr()  
 

模型训练与优化

参数回调函数 (声明那些固定的参数)
      def params_append(params): 
          \  \  \   
       
          :param params: 
          :return: 
          \  \  \   
          params['objective'] = 'reg:squarederror' 
          params['eval_metric'] = 'rmse' 
          params['min_child_weight' ] = int(params[\  min_child_weight\  ]) 
          params['max_depth'] = int(params['max_depth']) 
          return params 

声明贝叶斯优化过程:

  def param_beyesian(train): 

          # Part 1.数据准备 
          train_y = pd.read_csv(\  data/train.csv\  )['target'] 
          # 数据封装 
          sample_index = train_y.sample(frac=0.1, random_state=2020).index.tolist() #随机抽取一些样例
          train_data = xgb.DMatrix(train.tocsr()[sample_index, : ], train_y.loc[sample_index].values, silent=True) 
           
          # 借助cv过程构建目标函数 :即输入一组超参数
          def xgb_cv(colsample_bytree, subsample, min_child_weight, max_depth, 
                     reg_alpha, eta, 
                     reg_lambda): 
           
              params = {'objective': 'reg:squarederror', 
                        'early_stopping_round': 50, 
                        'eval_metric': 'rmse'} 
              params['colsample_bytree'] = max(min(colsample_bytree, 1), 0) 
              params['subsample'] = max(min(subsample, 1), 0) 
              params['min_child_weight'] = int(min_child_weight) 
              params['max_depth'] = int(max_depth) 
              params['eta'] = float(eta) 
              params['reg_alpha'] = max(reg_alpha, 0) 
              params['reg_lambda'] = max(reg_lambda, 0) 
              print(params) 
              cv_result = xgb.cv(params, train_data, 
                                 num_boost_round=1000, 
                                 nfold=2, seed=2, 
                                 stratified=False, 
                                 shuffle=True, 
                                 early_stopping_rounds=30, 
                                 verbose_eval=False) 
              return -min(cv_result['test-rmse-mean']) 

          # 调用贝叶斯优化器进行模型优化 
          xgb_bo = BayesianOptimization( 
              xgb_cv, 
              {'colsample_bytree': (0.5, 1), 
               'subsample': (0.5, 1), 
               'min_child_weight': (1, 30), 
               'max_depth': (5, 12), 
               'reg_alpha': (0, 5), 
               'eta':(0.02, 0.2), 
               'reg_lambda': (0, 5)} 
          ) 

xgb_bo.maximize(init_points=21, n_iter=5)  # init_points表示初始点,n_iter代表迭代次数(即采样数) 
          print(xgb_bo.max['target'], xgb_bo.max['params']) 
          return xgb_bo.max['params'] 

      def train_predict(train, test, params): 
          \  \  \   
       
          :param train: 
          :param test: 
          :param params: 
          :return: 
          \  \  \   
          train_y = pd.read_csv(\  data/train.csv\  )['target'] 
          test_data = xgb.DMatrix(test) 
       
          params = params_append(params) 
          kf = KFold(n_splits=5, random_state=2020, shuffle=True) 
          prediction_test = 0 
          cv_score = [] 
          prediction_train = pd.Series() 
          ESR = 30 
          NBR = 10000 
          VBE = 50 
          for train_part_index, eval_index in kf.split(train, train_y): 
              # 模型训练 
              train_part = xgb.DMatrix(train.tocsr()[train_part_index, :], 
                                       train_y.loc[train_part_index]) 
              eval = xgb.DMatrix(train.tocsr()[eval_index, :], 
                                 train_y.loc[eval_index]) 
              bst = xgb.train(params, train_part, NBR, [(train_part, 'train'), 
                                                                (eval, 'eval')], verbose_eval=VBE, 
                              maximize=False, early_stopping_rounds=ESR, ) 
              prediction_test += bst.predict(test_data) 
              eval_pre = bst.predict(eval) 
              prediction_train = prediction_train.append(pd.Series(eval_pre, index=eval_index)) 
              score = np.sqrt(mean_squared_error(train_y.loc[eval_index].values, eval_pre)) 
              cv_score.append(score) 
          print(cv_score, sum(cv_score) / 5) 
          pd.Series(prediction_train.sort_index().values).to_csv(\  preprocess/train_xgboost.csv\  , index=False) 
          pd.Series(prediction_test / 5).to_csv(" preprocess/test_xgboost.csv" , index=False) 
          test = pd.read_csv('data/test.csv') 
          test['target'] = prediction_test / 5 
          test[['card_id', 'target']].to_csv(" result/submission_xgboost.csv" , index=False) 
          return  

发现私榜分数3.62,公榜3.72,提升了
             
       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/25475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

群体优化算法----树蛙优化算法介绍以及应用于资源分配示例

介绍 树蛙优化算法(Tree Frog Optimization Algorithm, TFO)是一种基于群体智能的优化算法,模拟了树蛙在自然环境中的跳跃和觅食行为。该算法通过模拟树蛙在树枝间的跳跃来寻找最优解,属于近年来发展起来的自然启发式算法的一种 …

抽象的java入门1.3.2

前言: 全新版本的函数(方法)定义,更简单 1.优化了验证过程,直击本质 2.新增目前一图流 正片: 函数的结构可以分为三部分:函数名,参数,函数体 一生二,二生…

6.9总结

Vue生命周期 生命周期:指一个对象从创建到销毁的整个过程生命周期的八个阶段:每触发一个生命周期事件,会自动执行一个生命周期的方法(钩子) mounted:挂载完成,Vue初始化成功,HTML渲…

Linux 35.5 + JetPack v5.1.3@Fast-Planner编译安装

Linux 35.5 JetPack v5.1.3Fast-Planner安装 1. 源由2. 编译&安装Step 1:依赖库安装Step 2:建立工程Step 3:编译工程Step 4:安装工程 3. 问题汇总3.1 Eigen3 组件问题3.2 pcl_conversions 组件问题3.3 cv_bridge组件问题3.4 …

ssm629基于SSM的二手交易平台设计与开发+jsp【已测试】

前言:👩‍💻 计算机行业的同仁们,大家好!作为专注于Java领域多年的开发者,我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源: 👩‍💻 SpringBoot…

智慧社区整体解决方案

1.智慧社区整体建设方案内容 2.整体功能介绍

linux动态调试 dev_dbg

动态调试使用方法 打开内核动态调试开关,make menuconfig选中CONFIG_DYNAMIC_DEBUG以及CONFIG_DEBUG_FS Linux启动后,使用命令行挂载上dbgfs 1. mkdir /mnt/dbg 2. mount -t debugfs none /mnt/dbg 1.控制某个文件所有dev_dbg(), echo -n &q…

sqli-labs 靶场 less-11~14 第十一关、第十二关、第十三关、第十四关详解:联合注入、错误注入

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它,我们可以学习如何识别和利用不同类型的SQL注入漏洞,并了解如何修复和防范这些漏洞。Less 11 SQLI DUMB SERIES-11判断注入点 尝试在用户名这个字段实施注入,且试出SQL语句闭合方式为单…

电子阅览室有何作用

随着互联网的快速发展,电子阅览室逐渐成为人们获取知识的新方式。它为读者提供了便捷、高效的阅读体验,具有诸多作用。首先,电子阅览室拥有丰富的电子书籍资源,涵盖了各个领域的知识。无论是文学作品还是学术论文,读者…

解决Win10系统ping不通、无法远程的问题

1、概述 某天要使用微软的远程桌面程序mstsc.exe远程到旁边的一台测试电脑上,结果远程不了,ping都ping不通,于是详细研究了这个问题。在此大概地记录一下该问题排查的过程,以供参考。 2、ping不通 使用mstsc.exe远程到测试电脑,远程不了,没有反应。于是手动ping一…

英语学习笔记33——A fine day

A fine day 风和日丽 词汇 Vocabulary day n. 日子,白天 复数:days 常见节日:Mothers’ Day 母亲节      Fathers’ Day 父亲节      Teachers’ Day 教师节      Children’s Day 儿童节      Women’s Day 妇女节 c…

html--宇航员404

<!doctype html> <html> <head> <meta charset"utf-8"> <title>太空404</title><style> html {margin: 0;padding: 0;background-color: white; }body, html {width: 100%;height: 100%;overflow: hidden; }#svgContainer…

【数据库】SQL--DDL(初阶)

文章目录 DDL1. 数据库操作1.1. 表操作1.1.1 创建1.1.2. 查询 2. 数据类型及案例2.1 数值类型2.2 字符串类型2.3 日期时间类型2.4 案例练习 3. 表操作--修改3.1 添加字段3.2 修改字段3.3 修改表名 4. 表操作-删除4.1 删除字段4.2 删除表 5. DDL小结 更多数据库MySQL系统内容就在…

Pytorch 实现目标检测二(Pytorch 24)

一 实例操作目标检测 下面通过一个具体的例子来说明锚框标签。我们已经为加载图像中的狗和猫定义了真实边界框&#xff0c;其中第一个 元素是类别&#xff08;0代表狗&#xff0c;1代表猫&#xff09;&#xff0c;其余四个元素是左上角和右下角的(x, y)轴坐标&#xff08;范围…

Java数据结构与算法(盛水的容器)

前言 针对此类算法题&#xff0c;最基本是暴力算法求解&#xff0c;暴力算法基本是固定的套路。在暴力算法基础上寻求优化思路&#xff0c;是否可以单词遍历能否得到所要的结果。此时需要观察数据的特征&#xff0c;推演数据变化对结果的影响&#xff0c;从而找到合理的解题思…

Web前端Text:深入解析与实践应用

Web前端Text&#xff1a;深入解析与实践应用 在Web前端开发中&#xff0c;Text作为页面内容的重要组成部分&#xff0c;其处理和展示方式直接关系到用户体验和页面效果。本文将围绕Web前端Text的四个方面、五个方面、六个方面和七个方面进行详细解析&#xff0c;带您领略其奥秘…

【网络安全】【深度学习】【入侵检测】SDN模拟网络入侵攻击并检测,实时检测,深度学习

文章目录 1. 前言2. Mininet 和 Ryu 的区别2.1 Mininet2.2 Ryu2.3 总结 3. 模拟攻击3.1 环境准备3.2 创建 Mininet 网络拓扑3.2 启动 Ryu 控制器3.3 模拟网络攻击3.4 捕获流量 4. 实时异常检测4.1 在 Ryu 控制器中4.2 在 h2 机器上的实验结果4.3 深度学习模型部署上h2机器 帮助…

leetcode 数组排序

leetcode: 排序数组 排序算法包括基础的选择排序、插入排序、交换排序&#xff1b;也包括快速排序&#xff0c;堆排序&#xff0c;归并排序等。其中快速排序是交换排序的升级版&#xff1b;堆排序是选择排序的升级版。那插入排序有没有升级版呢&#xff0c;也是有的&#xff0…

修改菜品——后端Java

s1.交互逻辑&#xff1a; 页面发送ajax请求&#xff0c;请求服务端获取分类数据&#xff0c;用于菜品分类下拉框中数据显示&#xff0c;由于修改也在add.html和服务端进行交互&#xff0c;之前添加菜品的时候该请求已经得到处理&#xff1b; 页面发送ajax请求&#xff0c;请求服…

电感十大供应商

电感品牌-电感器品牌排行榜-电感十大品牌-Maigoo品牌榜