基于Python的Xgboost模型实现_山谷來客的博客-程序员宝宝

技术标签: 集成学习  python  

# -*- coding: utf-8 -*-
"""
Created on Mon Nov 28 13:22:08 2016
@author: yy
"""

## part1: 模型训练
import pandas as pd
import numpy as np
import os
from datetime import datetime
import xgboost as xgb

traindata=pd.read_csv("/home/op1/yy/traindata.csv")
traindata["add_date"]= pd.to_datetime(traindata["orderdate"]) #转化为日期格式

#时间过滤
traindata_a=traindata[(traindata["add_date"]<'2016-10-31')] #训练集
testdata_a=traindata[(traindata["add_date"]>='2016-10-31') & (traindata["add_date"]<='2016-11-06') & (traindata["rank1"]<=500)] #预测集
                     
#特征列表
colnames=[ 
#'masterhotel'
'order_cii_notcancelcii'        
,'city'             
,'order_cii_ahead_1day'
,'order_cii_ahead_3days_avg'
,'order_cii_ahead_7days_avg'
,'order_cii_30days_avg'
,'order_cii_ahead_sameoneweek'
,'order_cii_ahead_sametwoweeks_avg'
,'star'                
,'goldstar'            
,'level'      
,'ratingservice'       
,'novoters'            
,'week_day'       
,'working_day'
,'cii_ahead_sameoneweek'
,'cii_ahead_sametwoweeks_avg'
,'cii_ahead_samethreeweeks_avg'
,'cii_ahead_samefourweeks_avg'
,'simple_estimate_constant'
,'cii_ahead_1day_avg'
,'cii_ahead_3days_avg'
,'cii_ahead_7days_avg'
,'order_ahead_lt_1days'
,'order_ahead_lt_2days'
,'order_ahead_lt_3days'
,'order_ahead_lt_7days'
,'order_ahead_lt_14days'
,'order_alldays'     
,'click_ahead_1day'    
,'click_ahead_2days'   
,'click_ahead_3days'   
,'click_ahead_7days'   
,'click_ahead_14days'  
,'browse_0day_uv'      
,'browse_1day_uv'      
,'browse_2day_uv'      
,'browse_3day_uv'      
,'browse_4day_uv'      
,'browse_5day_uv'      
,'browse_6day_uv'      
,'browse_7_14day_uv'   
,'browse_14daymore_uv' 
,'order_cii_14days_avg'               
,'order_cii_21days_avg' 
,'order_cii_ahead_samethreeweeks_avg' 
,'order_cii_ahead_samefourweeks_avg']

#dtrain = xgb.DMatrix( data, label=label)
#dtrain = xgb.DMatrix(data, label=label)
#训练集构建

label=traindata_a[colnames[0]]
dtrain = xgb.DMatrix(traindata_a[colnames[1:]], label=traindata_a[colnames[0]])

num_round=800
params = {} 
params["objective"] = "reg:linear" 
params["eta"] = 0.1
params["max_depth"] = 4 
params["eval_metric"] = "rmse"
params["silent"] = 0
plst = list(params.items()) #Using 5000 rows for early stopping. 

bst = xgb.train( plst, dtrain, num_round)

#预测集构建
dtest=xgb.DMatrix(testdata_a[colnames[1:]])

#结果预测
y_bar=bst.predict(dtest)

#y.shape
##  评价指标
#testdata_a[colnames[0,]]
#testdata_a.columns
actual_values=testdata_a[["masterhotel","add_date","order_cii_notcancelcii","rank1"]]
actual_values["y_bar"]=y_bar
actual_values["mae"]=abs(actual_values["y_bar"]-actual_values["order_cii_notcancelcii"])

top100=actual_values[actual_values["rank1"]<=100]
mae100=top100.groupby("add_date").mean()
mae500=actual_values.groupby("add_date").mean()

## part2: 存储模型,方便后续直接调用
bst.save_model('xgb.model') # 用于存储训练出的模型

#模型初始化
bst=xgb.Booster() #注意:名字要保持一致,否则报错!
bst.load_model('/home/op1/yuanmin/xgb.model')

y_bar=bst.predict(dtest)


## 参数重要性

pd.Series(bst.get_fscore()).sort_values(ascending=False)

pd.Series(bst.get_fscore()).sort_values(ascending=False)/sum(pd.Series(bst.get_fscore()).sort_values(ascending=False)) #重要性归一化


附两篇参考文章:

1、https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/

2、http://www.cnblogs.com/haobang008/p/5909207.html


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010035907/article/details/53418486

智能推荐

反卷积 deconvolution_今天刷leetcode了吗的博客-程序员宝宝

简书:https://www.jianshu.com/p/a5831e6d1d3fCSDN:https://blog.csdn.net/qq_16234613/article/details/79387345?spm=1001.2101.3001.6650.1&amp;utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&amp;depth_1-utm_source

用AI「驯服」人类幼崽,手头有娃的可以试试_博文视点的博客-程序员宝宝

为了能安心追剧,技术宅奶爸都做了些什么……选自 Medium,编译 机器之心长期以来,「奶爸」+「萌娃」一直是一个不被看好的组合,甚至有人说,「父爱如山体滑坡」。不信的话,以下都是证据:人类幼崽似乎是台永动机,在一天 24 小时任何时间段里都有可能向你发难。你能让自己睡个安稳觉的方法看来是在白天消耗他们的精力,因此人们想出了各种各样的方法。当然,并不是所有的奶爸都这么不靠谱,也有人带起娃来挺正常的,Agustinus Nalwan 就是其中之一。Agusti...

基础算法学习——快速排序_梵高先生敲代码的博客-程序员宝宝

题目描述快速排序思想快排是基于“分治”来做的1)首先在要排序的一串数里找出一个数x作为分界点,使该数左边的数都小于等于x,右边的数都大于等于x。2)然后采用同样的方法递归,给左右两边分别排序。题解第一步:将要排序的数存到一个数组下标为从l到r的数组q[]里for ( i = 0; i &lt; n; i++) { scanf("%d ",&amp;q[i]); }第二步:选取一个分界点x,在这里我直接选中间的那个数作为分界点x = q[(l+r)/2]//注意:选取分界点时

centos7.6修改分辨率_centos7.6分辨率修改_gusijin的博客-程序员宝宝

centos7.6修改分辨率编辑文件修改默认运行命令行重启即可编辑文件vim /boot/grub2/grub.cfg找到以linux16开头行(以linux16 /vmlinuz-后接版本号开头)。linux16 /vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm....

SwiftUI AVFoundation教程之 01在Mac OS上请求媒体捕获的授权_知识大胖的博客-程序员宝宝

在Mac OS上请求媒体捕获的授权提示用户授权访问摄像头和麦克风。总览在macOS 10.14及更高版本中,用户必须明确授予每个应用程序访问摄像头和麦克风的权限。在您的应用程序首次使用捕获系统之前,macOS会显示一条警报,要求用户向您的应用程序授予对相机的访问权限,如下所示。macOS会记住用户对该警报的响应,因此后续使用捕获系统不会使它再次出现。用户可以在系统偏好设置&gt;安全性和隐私中更改您的应用程序的权限设置。授权请求看起来与iOS中的警报UI不同。要确保您的应用在捕获媒体之前具有权

随便推点

java点名系统实现增删改查_课堂智能点名系统.doc_胡钥的博客-程序员宝宝

课堂智能点名系统南 阳 理 工 学 院本科生毕业设计(论文)学院(系): 软件学院专 业: 软件工程学 生: 王 姗指导教师: 曹 蕾完成日期 二〇一一 年 四 月南阳理工学院本科生毕业设计(论文)课堂智能点名系统Intelligent Systems of Class Registration总计: 毕业设计(论文)31 页表 格 : 0 ...

优秀的Linux文本编辑器 (转载)_Pipci的博客-程序员宝宝

 想要挑起狂热Linux爱好者之间的激烈争辩吗?那就问问他们最喜欢的文本编辑器是什么吧。在开源社区中,选择一个用来写文本,或者更进一步,用来写代码的编辑器,比选择一个球队或者游戏控制器还要重要。但是任何一个Linux新手都不该为过多的建议和各种各样的煽动而感到焦虑不安,取而代之,先去试着熟悉熟悉一堆不同的文本编辑器吧。所以今天我将要给你建议一个简单主题的列表,里面的编辑器都可以在Linux下编...

Antd的TreeTransfer按照父级筛选数据_antd transfer tree_吴迪98的博客-程序员宝宝

我们看antd的官方示例demo中有普通的transfer按照条件筛选数据,可是并没有提供TreeTransfer的demo示例。普通的筛选数据的demo:那么我们就只好看看他这个组件的API。发现了这俩个东西是我们要的,showSearch用来展示搜索框,onSearch用来改变我们的数据。比较简单的一个实现思路就是在你的onSearch里面去筛选你的dataSource数据:...

使用PyQt5从零进行大数据app构建(十三)pyinstaller打包讲解 -F,-D,-w,-c,以及--hidden-import的用法_pyinstaller -f_王负剑!王负剑!的博客-程序员宝宝

教程合集地址:https://blog.csdn.net/infent/column/info/30927代码下载地址:https://download.csdn.net/download/infent/10846010最终应用来到了打包阶段,这里坑点居多,因此拿出一节来记录一下我这两天的历程。我只能说没有解决不了的问题只有定义不清晰的问题,只要方向对了,问题会随着了解的加深而迎刃而解。...

从0到1教你写UCOS-III 第九部分:临界段_Sumjess的博客-程序员宝宝

9.1 临界段简介: 临界段代码,也称作临界域,是一段不可分割的代码。 uCOS 中包含了很多临界段代码。如果临界段可能被中断,那么就需要关中断以保护临界段。如果临界段可能被任务级代码打断,那么需要锁调度器保护临界段。 临界段用一句话概括就是一段在执行的时候不能被中断的代码段。在 uCOS 里面,这个临界段最常出现的就是对全局变量的操作,全局变量就好像是一个枪把子,...

Ansible Tower Quick Demo / Ansible Tower快速展示_Christina Zhang的博客-程序员宝宝

本文展示的是超级用户登录Loginhttp:// + ip addressAfter your login, here we are.模板 Templates作业模板将一个项目中的 Ansible playbook 和启动它所需的设置合并在一起。通过点击左侧导航栏中的 Templates 图标来查看现有作业或创建新作业模板。Details 细节Permissions 权限Notification 通知Schedules 计划Credential 凭证凭.