[机器学习] LightGBM on Spark (MMLSpark) 使用完全手册
一 Spark上訓練模型優勢與劣勢
(1)機器學習算法一般都有很多個步驟迭代計算的過程,機器學習的計算需要在多次迭代后獲得足夠小的誤差或者足夠收斂才會停止,迭代時如果使用一般的Hadoop分布式計算框架,每次計算都要讀 / 寫磁盤以及任務的啟動等工作,這回導致非常大的 I/O 和 CPU 消耗。而 Spark 基于內存的計算模型天生就擅長迭代計算,多個步驟計算直接在內存中完成.
(2)從通信的角度講,如果使用 Hadoop分布式計算框架, 工作和任務之間由于是通過 heartbeat 的方式來進行的通信和傳遞數據,會導致非常慢的執行速度,正常來說會減緩機器學習的速度.spark通訊效率極高,可以解決這個問題.
目前發現的spark訓練模型的劣勢:
(1)配置繁瑣,使用之前要先配置spark集群,scala編譯器,java編譯器
(2)要按照spark指定的數據格式進行訓練,一般機器學習可以直接讀取數據例如csv,指定特征列后進行特征處理訓練,spark的訓練格式要把數據里面類型,標簽提前整理好
二 Lightgbm on Spark 介紹
LigthGBM訓練速度更快,效率更高。LightGBM比XGBoost快將近10倍。
降低內存使用率。內存占用率大約為XGBoost的1/6。
準確性有相應提升。
支持并行和GPU學習。
能夠處理大規模數據。
大部分使用和分析LigthGBM的都是在python單機版本上。要在spark上使用LightGBM,需要安裝微軟的MMLSpark包.
mmlspark
MMLSpark是一個工具生態系統,旨在將Apache Spark的分布式計算框架擴展到 幾個新的方向。MMLSpark為Spark生態系統添加了許多深度學習和數據科學工具,Microsoft Cognitive Toolkit(CNTK),LightGBM和?OpenCV的無縫集成。這些工具可為各種數據源提供功能強大且可高度擴展的預測和分析模型。
MMLSpark需要Scala 2.11,Spark 2.3+ (沒能測試過Spark 3.0, 應該還不支持) 以及Python 2.7或Python 3.5+
項目地址:https://github.com/Azure/mmlspark
在Python(或Conda)安裝上嘗試MMLSpark,首先通過pip安裝PySpark, pip安裝pyspark, mmlspark
(如果pip安裝后,運行時找不到部分py, 可以從mmlspark_2.11-0.18.1.jar) 下解壓出mmlspark包 copy到 python env site-packages中
1. 使用Spark packages (會自動下載依賴的jars)
spark.jars.packages ? com.microsoft.ml.spark:mmlspark_2.11:0.18.1
2.使用Spark jars (提前下載jars)??
Spark集群一般不能連接公網下載對應jars,一般是用戶自己提前下載好
spark.jars? ?lightgbmlib-2.2.350.jar,mmlspark_2.11-0.18.1.jar'
??
三 Lightgbm on Spark 代碼介紹
import findsparkfindspark.init()from mmlspark.lightgbm import LightGBMClassifier from pyspark.ml.feature import VectorAssembler # from pyspark.ml.tuning import CrossValidator, ParamGridBuilder from pyspark.ml.evaluation import BinaryClassificationEvaluator from pyspark.ml import Pipeline from pyspark.sql import SparkSession# spark = SparkSession \ # .builder \ # .appName("Python Lightgbm") \ # .config('spark.jars', # './jars/lightgbmlib-2.2.350.jar,./jars/mmlspark_2.11-0.18.1.jar') \ # .getOrCreate()spark = SparkSession \.builder \.appName("Python Lightgbm") \.config('spark.jars.packages', "com.microsoft.ml.spark:mmlspark_2.11:0.18.1") \.getOrCreate()df_train = spark.read.format("csv") \.option("inferSchema", "true") \.option("header", "true") \.option("sep", ",") \.load("./data/csv_data/train.csv") df_val = spark.read.format("csv") \.option("inferSchema", "true") \.option("header", "true") \.option("sep", ",") \.load("./data/csv_data/test.csv") df_test = spark.read.format("csv") \.option("inferSchema", "true") \.option("header", "true") \.option("sep", ",") \.load("./data/csv_data/test.csv")feature_cols = list(df_train.columns) feature_cols.remove("label") # 從列名當中刪除label才是真正的特征列表 assembler = VectorAssembler(inputCols=feature_cols, outputCol="features")lgb = LightGBMClassifier(objective="binary",boostingType='gbdt',isUnbalance=True,featuresCol='features',labelCol='label',maxBin=60,baggingFreq=1,baggingSeed=696,earlyStoppingRound=30,learningRate=0.1,lambdaL1=1.0,lambdaL2=45.0,maxDepth=3,numLeaves=128,baggingFraction=0.7,featureFraction=0.7,# minSumHessianInLeaf=1,numIterations=100,verbosity=50 )stages = [assembler, lgb] pipeline_model = Pipeline(stages=stages) model = pipeline_model.fit(df_train)train_preds = model.transform(df_train) val_preds = model.transform(df_val) test_preds = model.transform(df_test)binaryEvaluator = BinaryClassificationEvaluator() print("Train AUC: " + str(binaryEvaluator.evaluate(train_preds, {binaryEvaluator.metricName: "areaUnderROC"}))) print("Val AUC: " + str(binaryEvaluator.evaluate(val_preds, {binaryEvaluator.metricName: "areaUnderROC"}))) print("Test AUC: " + str(binaryEvaluator.evaluate(test_preds, {binaryEvaluator.metricName: "areaUnderROC"})))lightgbmlib-2.2.350.jar ?lightgbm_python.py ?mmlspark_2.11-0.18.1.jar
四 模型其他相關代碼
LibSVM訓練與評估
1. 數據讀取與切分
2. 模型訓練
3. 模型特征重要度,保存模型
4 模型指標計算
五 提交代碼到Spark集群中跑
需要準備文件
lightgbmlib-2.2.350.jar ?lightgbm_python.py ?mmlspark_2.11-0.18.1.jar lightgbm_python.py 代碼如上修改 load地址改成hdfs地址 最后提交任務: pylightgbm.tar.gz 這個pyenv的包可以在本地保存,也可以在hdfs上。需要安裝好python環境(numpy, pandas, mmlspark, pyspark) /home/work/cloud-hadoop-client/spark232/bin/spark-submit \ --master yarn \ --queue survey \ --deploy-mode cluster \ --name "development_lightgbm" \ --conf spark.yarn.dist.archives=hdfs://shanghai/tools/pylightgbm.tar.gz#pyenv \ --conf spark.pyspark.python=./pyenv/pylightgbm/bin/python \ --jars mmlspark_2.11-0.18.1.jar,lightgbmlib-2.2.350.jar \ --executor-memory 2G \ --driver-memory 4G \ --conf spark.driver.host=10.157.18.46 \ --conf spark.driver.maxResultSize=5g \ --executor-cores 2 \ --num-executors 2 \ lightgbm_python.py總結
以上是生活随笔為你收集整理的[机器学习] LightGBM on Spark (MMLSpark) 使用完全手册的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 印度好大的面子:三星上赶着去讨好
- 下一篇: [Spark]PySpark入门学习教程