不多废话,直接上代码
# -*- 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自己