xgboost使用笔记

本文记录个人使用xgboost过程中的代码记录(调用sklearn库方式)

安装xgboost: pip install xgboost即可

from numpy import loadtxt
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
import xgboost
import numpy as np
import operator

(一)加载数据,划分训练集以及测试集:

train_dataset = loadtxt('./dataset/feature.csv', delimiter=",")

X_ = train_dataset[:,0:60]   # 特征

Y = train_dataset[:,60]       # 标签

X_train, X_valid, y_train, y_valid = train_test_split(X, Y, test_size=0.15, random_state=42)

print("Train data length:", len(X_train))

print("Valid data length:", len(X_valid))

(二)模型训练,参数设置,使用早停法

model = XGBClassifier(
        learning_rate=0.1,    # 学习率
        n_estimators=1000,    # 总体迭代轮数, 对于多分类问题每次迭代会建k颗回归树(k为类别数)
        max_depth=10,
        min_child_weight=1,
        gamma=0.1,
        subsample=1,
        colsample_bytree=1,
        reg_alpha=1,
        objective='multi:softmax', # 多分类, 和 num_class一起使用
        num_class=9,    # 9分类
        nthread=-1,
        scale_pos_weight=1,
        seed=27
    )

eval_set = [(X_valid, y_valid)]
model.fit(X_train, y_train, early_stopping_rounds=150, eval_metric="mlogloss", eval_set=eval_set, verbose=True)

(三)模型保存
model.get_booster().save_model('./checkpoints/xgb.model')
print ('save finish!')

注意, 该保存模型的方法只会在整体全部迭代之后进行保存,若想在每一次迭代后保存一个模型,可以找到sklearn实现fit函数的代码文件sklearn.py(按住ctrl点击fit即可跳转到其声明的位置), 观察fit函数可知模型训练在以下部分实现

self._Booster = train(xgb_options, train_dmatrix, self.get_num_boosting_rounds(),
                      evals=evals, early_stopping_rounds=early_stopping_rounds,
                      evals_result=evals_result, obj=obj, feval=feval,
                      verbose_eval=verbose, xgb_model=xgb_model,callbacks=callbacks)

再按如上方法查找train函数声明位置(training.py),发现又调用了模型训练在_train_internal函数中实现,只需要在

for i in range(start_iteration, num_boost_round) 该循环的末尾加上
bst.save_model('./checkpoints/' + str(i) + '.model')就可以实现每一次迭代保存一个模型到checkpoints文件夹.

(四)模型测试

# 加载测试集
test_path = './test.csv'
dataset = loadtxt(test_path, delimiter=",")
X_te = dataset[:,0:60] 

# 加载训练好的模型
model = xgb.Booster(model_file='./checkpoints/xgb.model')
X_te = xgb.DMatrix(X_te)
y_pred = model.predict(X_te, ntree_limit=1291) # 1291是早停法得到的最好迭代次数,本人使用ntree_limit = model.best_ntree_limit保存,貌似是说Booster没有best_ntree_limit属性,可能是模型保存的方式问题导致的,也可以使用joblib保存模型尝试,本人记录了模型最后输出的最好迭代测试为1291,若没有记录,也可以使用print (model.attributes())的方式打印查看最好的迭代轮数(需要加1).
predictions = [np.argmax(value) for value in y_pred]   # 模型预测类别结果

(五)查看特征的重要性

# 加载模型
model = xgb.Booster(model_file='./checkpoints/xgb.model')

# 取得重要性
importance = model.get_fscore()
feature_num = 30  # 查看前30个特征的重要性
importance = sorted(importance.items(), key=operator.itemgetter(1), reverse=True)
importance = importance[:feature_num]
print (importance)

# 特征id和相应重要性保存到csv文件中
high_feat = []
with open('feature_id.csv', 'a', newline='') as out:
    csv_write = csv.writer(out, dialect='excel')
    for line in importance:
        high_feat.append(int(str(line[0])[1:]))
        csv_write.writerow([str(str(line[0])[1:]),str(line[1])])
print (high_feat)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值