在 Microsoft Fabric 中搭配 SynapseML 使用 LightGBM 模型
LightGBM 架構專門針對排名、分類和其他許多機器學習工作建立高品質且已啟用 GPU 功能的判定樹演算法。 在本文中,您將使用 LightGBM 來建置分類、回歸和排名模型。
LightGBM 是開放原始碼、分散式、高效能漸層提升 (GBDT、GBRT、GBM 或 MART) 架構。 LightGBM 是 Microsoft DMTK 專案的一部分。 您可以使用 LightGBMClassifier、LightGBMRegressor 和 LightGBMRanker 來使用 LightGBM。 LightGBM 的優點是納入現有的 SparkML 管線,並用於批次、串流和服務工作負載。 它也提供各種不同的無法調整參數,可用來自定義其判定樹系統。 Spark 上的 LightGBM 也支援新類型的問題,例如分位數回歸。
必要條件
取得 Microsoft Fabric 訂用 帳戶。 或者,註冊免費的 Microsoft Fabric 試用版。
登入 Microsoft Fabric。
使用首頁左側的體驗切換器,切換至 Synapse 資料科學 體驗。
- 移至 Microsoft Fabric 中的 資料科學 體驗。
- 建立 新的筆記本。
- 將筆記本附加至 Lakehouse。 在筆記本左側,選取 [新增 ] 以新增現有的 Lakehouse 或建立新的湖屋。
使用 LightGBMClassifier
來定型分類模型
在本節中,您將使用 LightGBM 來建立分類模型來預測破產。
讀取數據集。
from pyspark.sql import SparkSession # Bootstrap Spark Session spark = SparkSession.builder.getOrCreate() from synapse.ml.core.platform import *
df = ( spark.read.format("csv") .option("header", True) .option("inferSchema", True) .load( "wasbs://publicwasb@mmlspark.blob.core.windows.net/company_bankruptcy_prediction_data.csv" ) ) # print dataset size print("records read: " + str(df.count())) print("Schema: ") df.printSchema()
display(df)
將數據集分割成定型集和測試集。
train, test = df.randomSplit([0.85, 0.15], seed=1)
新增特徵化工具,將特徵轉換成向量。
from pyspark.ml.feature import VectorAssembler feature_cols = df.columns[1:] featurizer = VectorAssembler(inputCols=feature_cols, outputCol="features") train_data = featurizer.transform(train)["Bankrupt?", "features"] test_data = featurizer.transform(test)["Bankrupt?", "features"]
檢查數據是否不平衡。
display(train_data.groupBy("Bankrupt?").count())
使用
LightGBMClassifier
來定型模型。from synapse.ml.lightgbm import LightGBMClassifier model = LightGBMClassifier( objective="binary", featuresCol="features", labelCol="Bankrupt?", isUnbalance=True, dataTransferMode="bulk" )
model = model.fit(train_data)
可視化特徵重要性
import pandas as pd import matplotlib.pyplot as plt feature_importances = model.getFeatureImportances() fi = pd.Series(feature_importances, index=feature_cols) fi = fi.sort_values(ascending=True) f_index = fi.index f_values = fi.values # print feature importances print("f_index:", f_index) print("f_values:", f_values) # plot x_index = list(range(len(fi))) x_index = [x / len(fi) for x in x_index] plt.rcParams["figure.figsize"] = (20, 20) plt.barh( x_index, f_values, height=0.028, align="center", color="tan", tick_label=f_index ) plt.xlabel("importances") plt.ylabel("features") plt.show()
使用模型產生預測
predictions = model.transform(test_data) predictions.limit(10).toPandas()
from synapse.ml.train import ComputeModelStatistics metrics = ComputeModelStatistics( evaluationMetric="classification", labelCol="Bankrupt?", scoredLabelsCol="prediction", ).transform(predictions) display(metrics)
用來 LightGBMRegressor
定型分位數回歸模型
在本節中,您將使用 LightGBM 來建置用於藥物探索的回歸模型。
讀取數據集。
triazines = spark.read.format("libsvm").load( "wasbs://publicwasb@mmlspark.blob.core.windows.net/triazines.scale.svmlight" )
# print some basic info print("records read: " + str(triazines.count())) print("Schema: ") triazines.printSchema() display(triazines.limit(10))
將數據集分割成定型集和測試集。
train, test = triazines.randomSplit([0.85, 0.15], seed=1)
使用
LightGBMRegressor
來定型模型。from synapse.ml.lightgbm import LightGBMRegressor model = LightGBMRegressor( objective="quantile", alpha=0.2, learningRate=0.3, numLeaves=31, dataTransferMode="bulk" ).fit(train)
print(model.getFeatureImportances())
使用模型產生預測。
scoredData = model.transform(test) display(scoredData)
from synapse.ml.train import ComputeModelStatistics metrics = ComputeModelStatistics( evaluationMetric="regression", labelCol="label", scoresCol="prediction" ).transform(scoredData) display(metrics)
用來 LightGBMRanker
定型排名模型
在本節中,您將使用 LightGBM 來建置排名模型。
讀取數據集。
df = spark.read.format("parquet").load( "wasbs://publicwasb@mmlspark.blob.core.windows.net/lightGBMRanker_train.parquet" ) # print some basic info print("records read: " + str(df.count())) print("Schema: ") df.printSchema() display(df.limit(10))
使用
LightGBMRanker
來定型排名模型。from synapse.ml.lightgbm import LightGBMRanker features_col = "features" query_col = "query" label_col = "labels" lgbm_ranker = LightGBMRanker( labelCol=label_col, featuresCol=features_col, groupCol=query_col, predictionCol="preds", leafPredictionCol="leafPreds", featuresShapCol="importances", repartitionByGroupingColumn=True, numLeaves=32, numIterations=200, evalAt=[1, 3, 5], metric="ndcg", dataTransferMode="bulk" )
lgbm_ranker_model = lgbm_ranker.fit(df)
使用模型產生預測。
dt = spark.read.format("parquet").load( "wasbs://publicwasb@mmlspark.blob.core.windows.net/lightGBMRanker_test.parquet" ) predictions = lgbm_ranker_model.transform(dt) predictions.limit(10).toPandas()
相關內容
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應