• 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调参参数解释

  • 相关阅读:
    7-279 字符串输入输出练习7-284 倒立的杨辉三角形
    Linux中输出输入重定向
    2024 年的 Node.js 生态系统
    数据库设计与前端框架
    VOC和COCO数据集讲解
    uniapp editor组件添加插入超链接
    第六章:利用dumi搭建组件文档【前端工程化入门-----从零实现一个react+ts+vite+tailwindcss组件库】
    稳压二极管的原理,它有什么作用?
    Redis持久化 (RDB和AOF) 梳理
    【车间调度】基于改进鲸鱼算法解决柔性车间调度多目标问题附matlab代码
  • 原文地址:https://blog.csdn.net/eylier/article/details/126327102