LightGBM-modellen gebruiken met SynapseML in Microsoft Fabric
Het LightGBM-framework is gespecialiseerd in het maken van beslissingsstructuuralgoritmen met hoge kwaliteit en GPU voor classificatie, classificatie en vele andere machine learning-taken. In dit artikel gebruikt u LightGBM om classificatie-, regressie- en classificatiemodellen te bouwen.
LightGBM is een opensource-framework voor gedistribueerde, gedistribueerde, hoogwaardige gradiƫntverhoging (GBDT, GBRT, GBM of MART). LightGBM maakt deel uit van het DMTK-project van Microsoft. U kunt LightGBM gebruiken met behulp van LightGBMClassifier, LightGBMRegressor en LightGBMRanker. LightGBM wordt geleverd met de voordelen van het integreren in bestaande SparkML-pijplijnen en wordt gebruikt voor batch-, streaming- en serverworkloads. Het biedt ook een breed scala aan niet-instelbare parameters, die u kunt gebruiken om hun beslissingsstructuursysteem aan te passen. LightGBM op Spark ondersteunt ook nieuwe typen problemen, zoals kwantielregressie.
Vereisten
Haal een Microsoft Fabric-abonnement op. Of meld u aan voor een gratis proefversie van Microsoft Fabric.
Meld u aan bij Microsoft Fabric.
Gebruik de ervaringswisselaar aan de linkerkant van de startpagina om over te schakelen naar Fabric.
- Ga naar de Datawetenschap ervaring in Microsoft Fabric.
- Maak een nieuw notitieblok.
- Koppel uw notitieblok aan een lakehouse. Selecteer aan de linkerkant van uw notitieblok Toevoegen om een bestaand lakehouse toe te voegen of maak een nieuw lakehouse.
Gebruiken LightGBMClassifier
om een classificatiemodel te trainen
In deze sectie gebruikt u LightGBM om een classificatiemodel te bouwen voor het voorspellen van faillissementen.
Lees de gegevensset.
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)
Splits de gegevensset in trainings- en testsets.
train, test = df.randomSplit([0.85, 0.15], seed=1)
Voeg een featurizer toe om functies om te zetten in vectoren.
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"]
Controleer of de gegevens onevenwichtig zijn.
display(train_data.groupBy("Bankrupt?").count())
Train het model met behulp van
LightGBMClassifier
.from synapse.ml.lightgbm import LightGBMClassifier model = LightGBMClassifier( objective="binary", featuresCol="features", labelCol="Bankrupt?", isUnbalance=True, dataTransferMode="bulk" )
model = model.fit(train_data)
Het belang van de functie visualiseren
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()
Voorspellingen genereren met het model
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)
Gebruiken LightGBMRegressor
om een kwantiel-regressiemodel te trainen
In deze sectie gebruikt u LightGBM om een regressiemodel te bouwen voor drugsdetectie.
Lees de gegevensset.
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))
Splits de gegevensset in trainings- en testsets.
train, test = triazines.randomSplit([0.85, 0.15], seed=1)
Train het model met behulp van
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())
Voorspellingen genereren met het model.
scoredData = model.transform(test) display(scoredData)
from synapse.ml.train import ComputeModelStatistics metrics = ComputeModelStatistics( evaluationMetric="regression", labelCol="label", scoresCol="prediction" ).transform(scoredData) display(metrics)
Gebruiken LightGBMRanker
om een classificatiemodel te trainen
In deze sectie gebruikt u LightGBM om een classificatiemodel te bouwen.
Lees de gegevensset.
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))
Train het classificatiemodel met behulp van
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)
Voorspellingen genereren met het model.
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()