Usare modelli LightGBM con SynapseML in Microsoft Fabric
Il framework LightGBM è specializzato nella creazione di algoritmi di albero delle decisioni abilitati per GPU e di alta qualità per la classificazione, la classificazione e molte altre attività di Machine Learning. In questo articolo si userà LightGBM per compilare modelli di classificazione, regressione e classificazione.
LightGBM è un framework open source, distribuito e ad alte prestazioni con boosting delle sfumature (GBDT, GBRT, GBM o MART). LightGBM fa parte del progetto DMTK di Microsoft. È possibile usare LightGBM usando LightGBMClassifier, LightGBMRegressor e LightGBMRanker. LightGBM offre i vantaggi dell'incorporazione nelle pipeline SparkML esistenti e usata per batch, streaming e gestione dei carichi di lavoro. Offre anche un'ampia gamma di parametri ottimizzabili, che è possibile usare per personalizzare il sistema di albero delle decisioni. LightGBM in Spark supporta anche nuovi tipi di problemi, ad esempio la regressione quantile.
Prerequisiti
Ottenere una sottoscrizione di Microsoft Fabric. In alternativa, iscriversi per ottenere una versione di valutazione gratuita di Microsoft Fabric.
Accedere a Microsoft Fabric.
Usare il commutatore esperienza sul lato sinistro della home page per passare all'esperienza di data science di Synapse.
- Passare all'esperienza di data science in Microsoft Fabric.
- Creare un nuovo notebook.
- Collegare il notebook a una lakehouse. Sul lato sinistro del notebook selezionare Aggiungi per aggiungere una lakehouse esistente o crearne una nuova.
Usare LightGBMClassifier
per eseguire il training di un modello di classificazione
In questa sezione si userà LightGBM per creare un modello di classificazione per la stima del fallimento.
Leggere il set di dati.
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)
Suddividere il set di dati in set di training e test.
train, test = df.randomSplit([0.85, 0.15], seed=1)
Aggiungere un predefinito per convertire le funzionalità in vettori.
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"]
Controllare se i dati sono sbilanciati.
display(train_data.groupBy("Bankrupt?").count())
Eseguire il training del modello usando
LightGBMClassifier
.from synapse.ml.lightgbm import LightGBMClassifier model = LightGBMClassifier( objective="binary", featuresCol="features", labelCol="Bankrupt?", isUnbalance=True, dataTransferMode="bulk" )
model = model.fit(train_data)
Visualizzare l'importanza della funzionalità
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()
Generare stime con il modello
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)
Usare LightGBMRegressor
per eseguire il training di un modello di regressione quantile
In questa sezione si userà LightGBM per creare un modello di regressione per l'individuazione dei farmaci.
Leggere il set di dati.
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))
Suddividere il set di dati in set di training e test.
train, test = triazines.randomSplit([0.85, 0.15], seed=1)
Eseguire il training del modello usando
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())
Generare stime con il modello.
scoredData = model.transform(test) display(scoredData)
from synapse.ml.train import ComputeModelStatistics metrics = ComputeModelStatistics( evaluationMetric="regression", labelCol="label", scoresCol="prediction" ).transform(scoredData) display(metrics)
Usare LightGBMRanker
per eseguire il training di un modello di classificazione
In questa sezione si userà LightGBM per creare un modello di classificazione.
Leggere il set di dati.
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))
Eseguire il training del modello di classificazione usando
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)
Generare stime con il modello.
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()
Contenuto correlato
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per