• pyspark使用xgboost做模型训练


    1、添加依赖jar包

    在Maven仓库中找到符合你spark版本的jar包,
    ​​​​​​​Xgboost4j , 这里我选择了1.6.0以上的版本

     xgboost4j-spark ,  同上面选定的版本
    如果是scala,可以在pml文件中指定依赖,通过MAVEN库自动下载。这里我是手动下载jar包后使用的。


    2、从github上找到能用的sparkxgb脚本
    (1)推荐下载的sparkxgb代码
    在spark 2.12版本之后,推荐下载使用的sparkxgb是 spark-xgboost  或者 xgboost-on-pyspark
    这两个的sparkxgb代码是一样的,都是2020年左右更新的。 

     (2)在开发代码中引用sparkxgb的模块
    这里有两种方式,第一种是直接把zip包加载到hdfs上,添加到分布式的环境中去使用。
     

    1. os.environ['PYSPARK_SUBMIT_ARGS'] = '--jars xgboost4j-spark-1.6.0.jar,xgboost4j-1.6.0.jar pyspark-shell'
    2. spark.sparkContext.addPyFile("sparkxgb.zip")


    第二种把sparkxgb.zip文件解压后,修改下引用路径,添加到你自己的脚本中去用。
    我使用的是这种方式,因为我需要写的工程脚本比较多,放在一起打包更方便。

    3、代码使用示例
     

    1. #!/usr/bin/env python
    2. # -*- coding: utf-8 -*-
    3. # @Time: 2022/8/14 02:30 上午
    4. # @Author: gaoToby
    5. "训练Xgboost模型"
    6. import sys,os
    7. from sys import argv
    8. import datetime
    9. from pyspark.sql.functions import countDistinct
    10. from pyspark.ml.feature import RFormula
    11. from pyspark.ml.tuning import ParamGridBuilder,CrossValidator
    12. from pyspark.ml.evaluation import BinaryClassificationEvaluator
    13. from src.cvr_model.util_cvr import *
    14. def spark_xgb_model(train_data, test_data, save_model_path):
    15. from src.sparkxgb.xgboost import XGBoostClassifier
    16. rf = RFormula(formula="label ~ .")
    17. rf_model = rf.fit(train_data)
    18. dataset = rf_model.transform(train_data)
    19. # Define and train model
    20. xgboost = XGBoostClassifier(featuresCol="features",
    21. labelCol="label",
    22. predictionCol="prediction",
    23. objective="binary:logistic",
    24. missing=0.0)
    25. xgboost_model = xgboost.fit(dataset)
    26. # Write model/classifier
    27. xgboost_model.write().overwrite().save(save_model_path)
    28. df1 = xgboost_model.transform(dataset)
    29. df1.cache()
    30. df1.groupBy("prediction","label").agg(
    31. countDistinct("user").alias("user_cnt")).show(200)
    32. evaluator = BinaryClassificationEvaluator(metricName ="areaUnderROC")\
    33. .setLabelCol("label").setRawPredictionCol("rawPrediction")
    34. print("XGB model train data AUC:", evaluator.evaluate(df1))
    35. print("XGB model test data AUC:", evaluator.evaluate(xgboost_model.transform(rf_model.transform(test_data))))
    36. if __name__ == '__main__':
    37. init_py = '__init__.py'
    38. script, calc_time = argv
    39. # os.environ[
    40. # 'PYSPARK_SUBMIT_ARGS'] = '--jars ../xgboost4j-spark_2.12-1.6.0.jar,../xgboost4j_2.12-1.6.0.jar pyspark_v1-shell'
    41. from pyspark.conf import SparkConf
    42. from pyspark.sql import SparkSession
    43. sparkConf = SparkConf()
    44. spark = SparkSession.builder.config(
    45. conf=sparkConf).enableHiveSupport().getOrCreate()
    46. # 获取样本
    47. featurePath = getFeaturesPath("train_data")
    48. trainData = spark.read.format("parquet").load(featurePath)
    49. #拆分训练/测试样本
    50. train_data, test_data = trainData.randomSplit([0.7, 0.3])
    51. train_data.cache()
    52. train_data.show()
    53. # 3-搭建训练模型、模型训练和保存
    54. xgb_model_path = getModelPath(model_version="2022-08-14",model_type="xgb")
    55. spark_xgb_model(train_data, test_data, xgb_model_path)
    56. trainData.unpersist()

    4、Xgboost参数理解和调参

    官方文档 :XGBoost Parameters — xgboost 2.0.0-dev documentation

    其他博文:XGBoost参数解释_m_buddy的博客-CSDN博客_xgboost参数解释

    xgboost参数含义及调参scala_林木木子的博客-CSDN博客_xgboost调参参数解释

  • 相关阅读:
    杰理之关于 TWS 声道配置【篇】
    C++ Reference: Standard C++ Library reference: C Library: cwchar: mbsinit
    家政小程序有哪些功能 怎么制作
    每日一题~中序后序遍历构造二叉树
    【ffmpeg】音频采集
    perl学习笔记(十五)智能匹配
    CSS之常用属性、元素的显示模式、盒模型
    制作含有音频、视频的网页
    java 可变个数形参
    springboot json在线转换为实体类
  • 原文地址:https://blog.csdn.net/eylier/article/details/126327102