Använda LightGBM-modeller med SynapseML i Microsoft Fabric
LightGBM-ramverket är specialiserat på att skapa beslutsträdsalgoritmer av hög kvalitet och GPU-aktiverade för rangordning, klassificering och många andra maskininlärningsuppgifter. I den här artikeln använder du LightGBM för att skapa klassificerings-, regressions- och rangordningsmodeller.
LightGBM är ett ramverk med öppen källkod, distribuerad toning med höga prestanda (GBDT, GBRT, GBM eller MART). LightGBM är en del av Microsofts DMTK-projekt . Du kan använda LightGBM med hjälp av LightGBMClassifier, LightGBMRegressor och LightGBMRanker. LightGBM har fördelarna med att införlivas i befintliga SparkML-pipelines och användas för batch-, strömnings- och serveringsarbetsbelastningar. Det erbjuder också ett brett utbud av justerbara parametrar, som man kan använda för att anpassa sitt beslutsträdssystem. LightGBM på Spark stöder också nya typer av problem, till exempel kvantilregression.
Förutsättningar
Skaffa en Microsoft Fabric-prenumeration. Eller registrera dig för en kostnadsfri utvärderingsversion av Microsoft Fabric.
Logga in på Microsoft Fabric.
Använd upplevelseväxlaren längst ned till vänster på startsidan för att växla till Fabric.
- Gå till den Datavetenskap upplevelsen i Microsoft Fabric.
- Skapa en ny notebook-fil.
- Bifoga anteckningsboken till ett sjöhus. Till vänster i anteckningsboken väljer du Lägg till för att lägga till ett befintligt lakehouse eller skapa ett nytt.
Använda LightGBMClassifier
för att träna en klassificeringsmodell
I det här avsnittet använder du LightGBM för att skapa en klassificeringsmodell för att förutsäga konkurs.
Läs datauppsättningen.
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)
Dela upp datamängden i tränings- och testuppsättningar.
train, test = df.randomSplit([0.85, 0.15], seed=1)
Lägg till en featurizer för att konvertera funktioner till vektorer.
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"]
Kontrollera om data är obalanserade.
display(train_data.groupBy("Bankrupt?").count())
Träna modellen med .
LightGBMClassifier
from synapse.ml.lightgbm import LightGBMClassifier model = LightGBMClassifier( objective="binary", featuresCol="features", labelCol="Bankrupt?", isUnbalance=True, dataTransferMode="bulk" )
model = model.fit(train_data)
Visualisera funktionsvikt
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()
Generera förutsägelser med modellen
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)
Använd LightGBMRegressor
för att träna en kvantilregressionsmodell
I det här avsnittet använder du LightGBM för att skapa en regressionsmodell för läkemedelsidentifiering.
Läs datauppsättningen.
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))
Dela upp datamängden i tränings- och testuppsättningar.
train, test = triazines.randomSplit([0.85, 0.15], seed=1)
Träna modellen med .
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())
Generera förutsägelser med modellen.
scoredData = model.transform(test) display(scoredData)
from synapse.ml.train import ComputeModelStatistics metrics = ComputeModelStatistics( evaluationMetric="regression", labelCol="label", scoresCol="prediction" ).transform(scoredData) display(metrics)
Använda LightGBMRanker
för att träna en rangordningsmodell
I det här avsnittet använder du LightGBM för att skapa en rangordningsmodell.
Läs datauppsättningen.
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))
Träna rangordningsmodellen med .
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)
Generera förutsägelser med modellen.
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()