XGBoost详细使⽤指南
xgboost参数
选择较⾼的学习速率(learning rate)。⼀般情况下,学习速率的值为0.1。但是,对于不同的问题,理想的学习速率有时候会在0.05到
0.3之间波动。选择对应于此学习速率的理想决策树数量。XGBoost有⼀个很有⽤的函数“cv”,这个函数可以在每⼀次迭代中使⽤交
叉验证,并返回理想的决策树数量。
对于给定的学习速率和决策树数量,进⾏决策树特定参数调优(max_depth, min_child_weight, gamma, subsample,
colsample_bytree)。在确定⼀棵树的过程中,我们可以选择不同的参数,待会⼉我会举例说明。
xgboost的正则化参数的调优。(lambda, alpha)。这些参数可以降低模型的复杂度,从⽽提⾼模型的表现。
降低学习速率,确定理想参数。
1.读取libsvm格式数据并指定参数建模
xgboost的使⽤⽅法
①使⽤xgboost⾃带的数据集格式 + xgboost⾃带的建模⽅式
把数据读取成xgb.DMatrix格式(libsvm/dataframe.values给定X和Y)
准备好⼀个watch_list(观测和评估的数据集)
xgb.predict(dtest)
②使⽤pandas的DataFrame格式 + xgboost的sklearn接⼝
estimator = xgb.XGBClassifier()/xgb.XGBRegressor()
estimator.fit(df_train.values, df_target.values)
import xgboost as xgb
# 基本例⼦,从libsvm⽂件中读取数据,做⼆分类
# 数据是libsvm的格式
#1 3:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
#0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
#0 1:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
dtrain = xgb.DMatrix('ain')
dtest = xgb.DMatrix('st')
#超参数设定
param ={'max_depth':2,'eta':1,'silent':1,'objective':'binary:logistic'}
# 设定watchlist⽤于查看模型状态
watchlist =[(dtest,'eval'),(dtrain,'train')]
num_round =2
bst = ain(param, dtrain, num_round, watchlist)
# 使⽤模型预测
preds = bst.predict(dtest)
# 判断准确率
labels = _label()
print('错误类为%f'% \
(sum(1for i in range(len(preds))if int(preds[i]>0.5)!=labels[i])/float(len(preds))))
'''
或者
((preds>0.5)*1 != labels).sum()/labels.shape
'''
#[15:49:14] 6513x127 matrix with 143286 entries loaded from ./ain
#[15:49:14] 1611x127 matrix with 35442 entries loaded from ./st
#[0] eval-error:0.042831 train-error:0.046522
#[1] eval-error:0.021726 train-error:0.022263
#错误类为0.021726
2.配合pandas DataFrame格式数据建模
# ⽪马印第安⼈糖尿病数据集包含很多字段:怀孕次数⼝服葡萄糖耐量试验中⾎浆葡萄糖浓度舒张压(mm Hg)三头肌组织褶厚度(mm)# 2⼩时⾎清胰岛素(µU/ ml)体重指数(kg/(⾝⾼(m)^2)糖尿病系统功能年龄(岁)
import pandas as pd
data = pd.read_csv('./data/Pima-Indians-Diabetes.csv')
data.head()
import xgboost as xgb
del_selection import train_test_split
# 基本例⼦,从csv⽂件中读取数据,做⼆分类
# ⽤pandas读⼊数据
data = pd.read_csv('Pima-Indians-Diabetes.csv')
# 做数据切分
train, test = train_test_split(data)
# 转换成Dmatrix格式
feature_columns =['Pregnancies','Glucose','BloodPressure','SkinThickness','Insulin','BMI','DiabetesPedigreeFunction','Age'] target_column ='Outcome'
xgtrain = xgb.DMatrix(train[feature_columns].values, train[target_column].values)
xgtest = xgb.DMatrix(test[feature_columns].values, test[target_column].values)
#参数设定
param ={'max_depth':5,'eta':0.1,'silent':1,'subsample':0.7,'colsample_bytree':0.7,'objective':'binary:logistic'}
# 设定watchlist⽤于查看模型状态
watchlist =[(xgtest,'eval'),(xgtrain,'train')]
num_round =10
bst = ain(param, xgtrain, num_round, watchlist)
# 使⽤模型预测
preds = bst.predict(xgtest)
# 判断准确率
labels = _label()
print('错误类为%f'% \
(sum(1for i in range(len(preds))if int(preds[i]>0.5)!=labels[i])/float(len(preds))))
#[0] eval-error:0.322917 train-error:0.21875
#[1] eval-error:0.244792 train-error:0.168403
#[2] eval-error:0.255208 train-error:0.182292
#[3] eval-error:0.270833 train-error:0.170139
#[4] eval-error:0.244792 train-error:0.144097
#[5] eval-error:0.25 train-error:0.145833
#[6] eval-error:0.229167 train-error:0.144097
#[7] eval-error:0.25 train-error:0.145833
#[8] eval-error:0.239583 train-error:0.147569
#[9] eval-error:0.234375 train-error:0.140625
#错误类为0.234375
3.使⽤xgboost的sklearn包
warnings.filterwarnings("ignore")
import numpy as np
import pandas as pd
import pickle
import xgboost as xgb
del_selection import train_test_split
als import joblib
# 基本例⼦,从csv⽂件中读取数据,做⼆分类
# ⽤pandas读⼊数据
data = pd.read_csv('Pima-Indians-Diabetes.csv')
# 做数据切分
train, test = train_test_split(data)
# 取出特征X和⽬标y的部分
feature_columns =['Pregnancies','Glucose','BloodPressure','SkinThickness','Insulin','BMI','DiabetesPedigreeFunction','Age'] target_column ='Outcome'
train_X = train[feature_columns].values
train_y = train[target_column].values
test_X = test[feature_columns].values
test_y = test[target_column].values
# 初始化模型
xgb_classifier = xgb.XGBClassifier(n_estimators=20,\
max_depth=4, \
learning_rate=0.1, \
subsample=0.7, \
colsample_bytree=0.7)
# 拟合模型
xgb_classifier.fit(train_X, train_y)
# 使⽤模型预测
preds = xgb_classifier.predict(test_X)import pickle
# 判断准确率
print('错误类为%f'%((preds!=test_y).sum()/float(test_y.shape[0])))
# 模型存储
joblib.dump(xgb_classifier,'./del')
#错误类为0.276042
#['./del']
4.交叉验证
xgb.cv(param, dtrain, num_round, nfold=5,metrics={'error'}, seed =0)
5.添加预处理的交叉验证
#### 5.添加预处理的交叉验证
#### 5.添加预处理的交叉验证
# 计算正负样本⽐,调整样本权重
def fpreproc(dtrain, dtest, param):
label = _label()
ratio =float(np.sum(label ==0))/ np.sum(label==1) param['scale_pos_weight']= ratio
return(dtrain, dtest, param)
# 先做预处理,计算样本权重,再做交叉验证
xgb.cv(param, dtrain, num_round, nfold=5,
metrics={'auc'}, seed =0, fpreproc = fpreproc)
6.⾃定义损失函数与评估准则
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论