kaggle PredictingRedHatBusinessValue 简单的xgboost的交叉验证
PredictingRedHatBusinessValue 这个超级简单的比赛
随手在一个kernels上面随便改了改,交叉验证的xgboost:
感觉还是稍微有一点借鉴意义的(x
注释的部分是OneHot+线性模型的结果,非注释的就是随机森林。
线性模型跑的比随即森林的结果好很多,至于为什么,我也不知道。
import numpy as np
import pandas as pd
import xgboost as xgb
from sklearn.preprocessing import OneHotEncoder
def reduce_dimen(dataset,column,toreplace):
for index,i in dataset[column].duplicated(keep=False).iteritems():
if i==False:
dataset.set_value(index,column,toreplace)
return dataset
def act_data_treatment(dsname):
dataset = dsname
for col in list(dataset.columns):
if col not in ['people_id', 'activity_id', 'date', 'char_38', 'outcome']:
if dataset[col].dtype == 'object':
dataset[col].fillna('type 0', inplace=True)
dataset[col] = dataset[col].apply(lambda x: x.split(' ')[1]).astype(np.int32)
elif dataset[col].dtype == 'bool':
dataset[col] = dataset[col].astype(np.int8)
dataset['year'] = dataset['date'].dt.year
dataset['month'] = dataset['date'].dt.month
dataset['day'] = dataset['date'].dt.day
dataset['isweekend'] = (dataset['date'].dt.weekday >= 5).astype(int)
dataset = dataset.drop('date', axis = 1)
return dataset
act_train_data = pd.read_csv("D://kaggle//PredictingRedHatBusinessValue//data//act_train.csv",dtype={'people_id': np.str, 'activity_id': np.str, 'outcome': np.int8}, parse_dates=['date'])
act_test_data = pd.read_csv("D://kaggle//PredictingRedHatBusinessValue//data//act_test.csv", dtype={'people_id': np.str, 'activity_id': np.str}, parse_dates=['date'])
people_data = pd.read_csv("D://kaggle//PredictingRedHatBusinessValue//data//people.csv", dtype={'people_id': np.str, 'activity_id': np.str, 'char_38': np.int32}, parse_dates=['date'])
act_train_data=act_train_data.drop('char_10',axis=1)
act_test_data=act_test_data.drop('char_10',axis=1)
print("Train data shape: " + format(act_train_data.shape))
print("Test data shape: " + format(act_test_data.shape))
print("People data shape: " + format(people_data.shape))
act_train_data = act_data_treatment(act_train_data)
act_test_data = act_data_treatment(act_test_data)
people_data = act_data_treatment(people_data)
train = act_train_data.merge(people_data, on='people_id', how='left', left_index=True)
test = act_test_data.merge(people_data, on='people_id', how='left', left_index=True)
del act_train_data
del act_test_data
del people_data
train=train.sort_values(['people_id'], ascending=[1])
test=test.sort_values(['people_id'], ascending=[1])
train_columns = train.columns.values
test_columns = test.columns.values
features = list(set(train_columns) & set(test_columns))
train.fillna('NA', inplace=True)
test.fillna('NA', inplace=True)
y = train.outcome
train=train.drop('outcome',axis=1)
whole=pd.concat([train,test],ignore_index=True)
categorical=['group_1','activity_category','char_1_x','char_2_x','char_3_x','char_4_x','char_5_x','char_6_x','char_7_x','char_8_x','char_9_x','char_2_y','char_3_y','char_4_y','char_5_y','char_6_y','char_7_y','char_8_y','char_9_y']
for category in categorical:
whole=reduce_dimen(whole,category,9999999)
Len = int(0.3*len(train))
X_train=whole[:Len]
Y_train=y[:Len]
X=whole[:len(train)]
Y=y[:len(train)]
X_test=whole[len(train):]
del train
del whole
X=X.sort_values(['people_id'], ascending=[1])
X_train = X_train.sort_values(['people_id'], ascending=[1])
X_train = X_train[features].drop(['people_id', 'activity_id'], axis = 1)
X = X[features].drop(['people_id', 'activity_id'], axis = 1)
X_test = X_test[features].drop(['people_id', 'activity_id'], axis = 1)
categorical=['group_1','activity_category','char_1_x','char_2_x','char_3_x','char_4_x','char_5_x','char_6_x','char_7_x','char_8_x','char_9_x','char_2_y','char_3_y','char_4_y','char_5_y','char_6_y','char_7_y','char_8_y','char_9_y']
not_categorical=[]
for category in X.columns:
if category not in categorical:
not_categorical.append(category)
# enc = OneHotEncoder(handle_unknown='ignore')
# enc=enc.fit(pd.concat([X[categorical],X_test[categorical]]))
# X_cat_sparse=enc.transform(X[categorical])
# X_test_cat_sparse=enc.transform(X_test[categorical])
# from scipy.sparse import hstack
# X_sparse=hstack((X[not_categorical], X_cat_sparse))
# X_test_sparse=hstack((X_test[not_categorical], X_test_cat_sparse))
# print("Training data: " + format(X_sparse.shape))
# print("Test data: " + format(X_test_sparse.shape))
# print("###########")
# print("One Hot enconded Test Dataset Script")
# dtrain = xgb.DMatrix(X_sparse,label=y)
# dtest = xgb.DMatrix(X_test_sparse)
# param = {'max_depth':10, 'eta':0.02, 'silent':1, 'objective':'binary:logistic' }
# param['nthread'] = 4
# param['eval_metric'] = 'auc'
# param['subsample'] = 0.7
# param['colsample_bytree']= 0.7
# param['min_child_weight'] = 0
# param['booster'] = "gblinear"
# watchlist = [(dtrain,'train')]
# num_round = 300
# early_stopping_rounds=10
# bst = xgb.train(param, dtrain, num_round, watchlist,early_stopping_rounds=early_stopping_rounds)
dtrain2 = xgb.DMatrix(X_train,label=Y_train)
dtrain = xgb.DMatrix(X,label=Y)
dtest = xgb.DMatrix(X_test)
eta = 0.9
max_depth = 5
subsample = 0.8
colsample_bytree = 0.8
print('XGBoost params. ETA: {}, MAX_DEPTH: {}, SUBSAMPLE: {}, COLSAMPLE_BY_TREE: {}'.format(eta, max_depth, subsample, colsample_bytree))
params = {
"objective": "binary:logistic",
"booster" : "gbtree",
"eval_metric": "auc",
"eta": eta,
"max_depth": max_depth,
"subsample": subsample,
"colsample_bytree": colsample_bytree,
"silent": 1,
"seed": 19960429
}
watchlist = [(dtrain,'train'),(dtrain2,'val')]
num_round = 300
early_stopping_rounds=10
bst = xgb.train(params, dtrain, num_round, watchlist,early_stopping_rounds=early_stopping_rounds)
ypred = bst.predict(dtest)
output = pd.DataFrame({ 'activity_id' : test['activity_id'], 'outcome': ypred })
output.head()
output.to_csv('D://kaggle//PredictingRedHatBusinessValue//data//without_leak.csv', index = False)
kaggle PredictingRedHatBusinessValue 简单的xgboost的交叉验证的更多相关文章
- 小白学习之pytorch框架(7)之实战Kaggle比赛:房价预测(K折交叉验证、*args、**kwargs)
本篇博客代码来自于<动手学深度学习>pytorch版,也是代码较多,解释较少的一篇.不过好多方法在我以前的博客都有提,所以这次没提.还有一个原因是,这篇博客的代码,只要好好看看肯定能看懂( ...
- MATLAB曲面插值及交叉验证
在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点.插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值.曲面插值是对三维数据进行离 ...
- 交叉验证(Cross Validation)原理小结
交叉验证是在机器学习建立模型和验证模型参数时常用的办法.交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏. ...
- 交叉验证 Cross validation
来源:CSDN: boat_lee 简单交叉验证 hold-out cross validation 从全部训练数据S中随机选择s个样例作为训练集training set,剩余的作为测试集testin ...
- paper 35 :交叉验证(CrossValidation)方法思想
交叉验证(CrossValidation)方法思想简介 以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(da ...
- 交叉验证(cross validation)
转自:http://www.vanjor.org/blog/2010/10/cross-validation/ 交叉验证(Cross-Validation): 有时亦称循环估计, 是一种统计学上将数据 ...
- 如何调用sklearn模块做交叉验证
终于搞明白了如何用sklearn做交叉验证!!! 一般在建立完模型之后,我们要预测模型的好坏,为了试验的可靠性(排除一次测试的偶然性)我们要进行多次测试验证,这时就要用交叉验证. sklearn中的s ...
- 交叉验证(CrossValidation)方法
分类器模型通常在特定的数据上进行训练,由于所得模型可能存在过拟合的现象.因此,模型训练完成之后通常需要进行检验,以验证分类模型在未知数据集上的预测能力,即我们通常所说的"模型泛化" ...
- 机器学习——交叉验证,GridSearchCV,岭回归
0.交叉验证 交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set) ...
随机推荐
- Mashup
简介 mashup是糅合,是当今网络上新出现的一种网络现象,将两种以上使用公共或者私有数据库的web应用,加在一起,形成一个整合应用.一般使用源应用的API接口,或者是一些rss输出(含atom)作为 ...
- unbuntu 16.04.2 安装 Eclipse C++开发环境
1.安装JAVA (1)首先添加源: sudo gedit /etc/apt/sources.list 在打开的文件中添加如下内容并保存: deb http://ppa.launchpad.net/w ...
- oracle instantclient_11_2 配置文件tnsnames.ora
文件所在位置(不同版本位置可能不同): oracle\product\10.2.0\client_1\NETWORK\ADMIN\tnsnames.ora WDDB = (DESCRIPTION = ...
- CentOS 6.5自动化运维之基于cobbler服务的自动化安装操作系统详解
一.Cobbler安装 前提:cobbler由epel源提供,故此需要事先配置指向epel的yum源方可进行类似下面的安装过程. # yum install -y epel-release # yum ...
- centos6.5环境使用RPM包离线安装MariaDB 10.0.20
1. 进入MariaDB官网下载MariaDB需要的RPM包 2. 使用下载软件下载所需要的RPM包, 总共4个, 并上传到CentOS主机指定目录. MariaDB-10.0.20-centos6- ...
- Expm 7_1树中的最大独立集问题
[问题描述] 给定一个无回路的无向图(即树),设计一个动态规划算法,求出该图的最大独立集,并输出该集合中的各个顶点值. package org.xiu68.exp.exp7; import java. ...
- citySelect省市区jQuery联动插件
参考地址:http://blog.csdn.net/qq_33556185/article/details/50704446 参考地址:http://www.lanrenzhijia.com/jque ...
- python接口自动化测试十五:解决密码动态,无法登录情况
解决问题:每次密码都是变化的,无法通过账号密码登录 (总不能每次去fiddler复制吧????) 解决思路: 1.先用selenium调用浏览器(不会selenium的自己想办法了), 2.登录后从浏 ...
- LeetCode 4. Median of Two Sorted Arrays (分治)
两个有序的数组 nums1 和 nums2 维数分别为m,n.找所有数的中位数,复杂度 O(log (m+n)) 注意:奇偶个数,分治法求解,递归出口特殊处理.取Kth smallest数时,分治取m ...
- Vijos1910 NOIP2014提高组 Day2T3 解方程 其他
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - Vijos1910 题意概括 已知多项式方程: a0+a1x+a2x2+...+anxn=0 求这个方程在[1 ...