随笔之xgboost的简单使用

不多废话,直接上代码

# -*- coding: utf-8 -*-
# @Author: Phill
# @Date:   2019-03-14 14:43:10
# @Last Modified by:   Phill
# @Last Modified time: 2019-03-14 14:57:02

import numpy as np 
import pandas as pd     
import xgboost as xgb

def readData(fileName,sheetName):
    data = pd.read_excel(fileName,index=None,sheetName=sheetName,header=None)
    return np.array(data)

def getXY(data):
    data = data.T
    return np.transpose(data[:-1]),np.transpose([data[-1]])

def trainFunction(x_data,y_data,params,numRounds,modelPath):
    trainData=xgb.DMatrix(x_data,label=y_data)
    model=xgb.train(params,trainData,numRounds)
    model.save_model(modelPath)

def predictFunction(x_data,params,modelPath):
    model=xgb.Booster(params)
    model.load_model(modelPath)
    ypred = model.predict(xgb.DMatrix(x_data))
    return np.array(ypred)

def main():
    train = readData("test.xlsx","Sheet1")
    test = readData("test.xlsx","Sheet2")
    trainX,trainY = getXY(train)
    testX,testY = getXY(test)
    params = {"nthreed":4,"max_depth":5,"eta":0.05,"silent":0,"gamma":0.1,"lambda":1,"objective":"reg:linear","booster":"gbtree"}
    trainFunction(trainX,trainY,params,100,".\\model")
    print(predictFunction(testX,{"nthreed":4},".\\model"))

if __name__ == '__main__':
    main()

其中参数配置需要注意,参数的具体说明如下:
1、训练参数
“y_data”:label数据,Array类型
“numRounds”:迭代次数
“params”:JSON格式,其中nthreed表示线程数;max_depth表示树的最大深度;eta类似学习率;silent可以设置为1或0,表示输出或不输出运行过程;gamma表示决策树剪枝的力度,一般设为0.1或0.2;lambda表示正则化,设置为1或2,表示L1和L2;objective’表示模型方式,二分类设置’binary:logistic’,回归设置’reg:linear’,多分类设置为softmax;booster表示模型结构,可以设置为gbtree;还有很多参数,具体请查看xgboost docment。

2、预测模式
“params”:JSON格式,仅需设置nthreed线程数即可

明眼警告:脚本名称不要命名为xgboost,会出错误的,因为脚本顶端有一个import xgboost,会导致自己import自己

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章