在Spark中使用xgboost训练模型
spark上运行xgboost模型,具有内存运行,速度更快,减少数据传输的优势。
1、交互模式测试
使用spark运行xgboost首先需要下载依赖的jar包,下载地址https://github.com/criteo-forks/xgboost-jars/releases,
主要需要xgboost4j-0.72-criteo-20180518_2.10-linux.jar
在堡垒机中使用命令 spark-shell --jars xgboost*.jar,进入交互模式,可以编写代码进行测试。
退出shell环境命令 :quit
2、数据准备
xgboost模型需要将数据整理为libsvm格式。
本地可以使用python脚本将数据转化。
3、编写并运行程序
首先需要引入依赖
import ml.dmlc.xgboost4j.scala.{DMatrix, XGBoost}
4、IDEA
在IDEA中编写scala程序,需要定义好类名。
修改pom.xml文件,建立依赖。
<dependency>
<groupId>me.lyh</groupId>
<artifactId>xgboost4j</artifactId>
<version>0.71-20180420-230cb9b7</version>
</dependency>
5、maven打包命令:
mvn clean package -Pcluster
说明:clean是消除其他文件,package是打包,-Pcluster是指将依赖打包
6、生成jar包后执行
执行命令:spark-submit --class com.jd.iss.xgb.xgb_slass --jars xgboost4j-linux.jar,xgboost4j-spark.jar xgboostDemo.jar
--class是指定义执行的类名
--jars是引入依赖的jar包,因为线上环境一般没有xgboost的jar包
7、查看任务日志:
yarn logs --applicationId application_XXXX_XXXX >res.log
8、一些xgboost4j的函数说明
8、一些xgboost4j的函数说明
//模型训练:
booster = XGBoost.train(trainMax, paramMap, numRound, watches.toMap)
//获取特征重要性
val FeatureWeight=booster.getFeatureScore()
//决策树结果
val model_dump = booster.getModelDump()
//预测
val PredictResult = booster.predict(testMax).flatMap(x=>x)
注意:预测函数后要接 flatMap(x=>x)