'''内置建模方式
1.xgb.train训练方式
2.DMatrix数据形态,不是DataFrame
'''
import numpy as np
import scipy.sparse
import pickle
import xgboost as xgb
dtrain = xgb.DMatrix('data/agaricus.txt.train')
dtest = xgb.DMatrix('data/agaricus.txt.test')
#超参数设定
'''
max_depth:用于设置树的最大深度,默认为6,范围为:》1
eta:可以看作为学习率
为了防止过拟合,更新过程中用到的收缩步长,
再每次提升计算之后算法会直接获得新特征的权重。eta通过缩减特征的权重使提升计算过程更加保守。缺省值为0.3
取值范围为:[0,1]
silent:0表示输出信息, 1表示安静模式
objective:这个参数定义需要被最小化的损失函数。
binary:logistic:二分类的逻辑回归,返回预测的概率
'''
param = {'max_depth':2,'eta':1,'silent':1,'objective':'binary:logistic'}
#设定watchlist用于查看模型状态
watchlist = [(dtest,'eval'),(dtrain,'train')]
num_round = 2
bst = xgb.train(param,dtrain,num_round,watchlist)
#使用模型预测
preds = bst.predict(dtest)
#判断准确率
labels = dtest.get_label()
print("错误率为%f" % \
(sum(1 for i in range(len(preds)) if int(preds[i]>0.5)!=labels[i])/float(len(preds))))
#模型存储
bst.save_model('data/0001.model')