Używanie modeli LightGBM z usługą SynapseML w usłudze Microsoft Fabric
Struktura LightGBM specjalizuje się w tworzeniu wysokiej jakości i obsługujących procesor GPU algorytmów drzewa decyzyjnego na potrzeby klasyfikowania, klasyfikacji i wielu innych zadań uczenia maszynowego. W tym artykule tworzysz modele klasyfikacji, regresji i klasyfikowania przy użyciu rozwiązania LightGBM.
LightGBM to platforma typu open source, rozproszona, zwiększająca gradient o wysokiej wydajności (GBDT, GBRT, GBM lub MART). LightGBM jest częścią projektu DMTK firmy Microsoft. Możesz użyć technologii LightGBM za pomocą klasyfikatora LightGBMClassifier, LightGBMRegressor i LightGBMRanker. Rozwiązanie LightGBM oferuje zalety dołączania do istniejących potoków SparkML i używane do obsługi obciążeń wsadowych, przesyłanych strumieniowo i obsługujących. Oferuje również szeroką gamę parametrów dostrajania, których można użyć do dostosowania systemu drzewa decyzyjnego. Funkcja LightGBM na platformie Spark obsługuje również nowe typy problemów, takich jak regresja kwantylu.
Wymagania wstępne
Uzyskaj subskrypcję usługi Microsoft Fabric. Możesz też utworzyć konto bezpłatnej wersji próbnej usługi Microsoft Fabric.
Zaloguj się do usługi Microsoft Fabric.
Użyj przełącznika doświadczenia w lewej dolnej części strony głównej, aby przełączyć się na Fabric.
- Przejdź do środowiska Nauka o danych w usłudze Microsoft Fabric.
- Utwórz nowy notes.
- Dołącz notes do magazynu lakehouse. Po lewej stronie notesu wybierz pozycję Dodaj , aby dodać istniejący magazyn lakehouse lub utworzyć nowy.
Używanie LightGBMClassifier
do trenowania modelu klasyfikacji
W tej sekcji użyjesz rozwiązania LightGBM do utworzenia modelu klasyfikacji na potrzeby przewidywania upadłości.
Przeczytaj zestaw danych.
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)
Podziel zestaw danych na zestawy trenowania i testowania.
train, test = df.randomSplit([0.85, 0.15], seed=1)
Dodaj cechę, aby przekonwertować cechy na wektory.
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"]
Sprawdź, czy dane nie są zrównoważone.
display(train_data.groupBy("Bankrupt?").count())
Trenowanie modelu przy użyciu polecenia
LightGBMClassifier
.from synapse.ml.lightgbm import LightGBMClassifier model = LightGBMClassifier( objective="binary", featuresCol="features", labelCol="Bankrupt?", isUnbalance=True, dataTransferMode="bulk" )
model = model.fit(train_data)
Wizualizowanie ważności funkcji
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()
Generowanie przewidywań za pomocą modelu
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)
Używanie LightGBMRegressor
do trenowania modelu regresji kwantylu
W tej sekcji użyjesz rozwiązania LightGBM do utworzenia modelu regresji na potrzeby odnajdywania narkotyków.
Przeczytaj zestaw danych.
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))
Podziel zestaw danych na zestawy trenowania i testowania.
train, test = triazines.randomSplit([0.85, 0.15], seed=1)
Trenowanie modelu przy użyciu polecenia
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())
Generowanie przewidywań za pomocą modelu.
scoredData = model.transform(test) display(scoredData)
from synapse.ml.train import ComputeModelStatistics metrics = ComputeModelStatistics( evaluationMetric="regression", labelCol="label", scoresCol="prediction" ).transform(scoredData) display(metrics)
Używanie LightGBMRanker
do trenowania modelu klasyfikacji
W tej sekcji użyjesz programu LightGBM do utworzenia modelu klasyfikacji.
Przeczytaj zestaw danych.
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))
Trenowanie modelu klasyfikacji przy użyciu polecenia
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)
Generowanie przewidywań za pomocą modelu.
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()