Použití modelů LightGBM se službou SynapseML v Microsoft Fabric
Architektura LightGBM se specializuje na vytváření vysoce kvalitních algoritmů rozhodovacího stromu s podporou GPU pro řazení, klasifikaci a mnoho dalších úloh strojového učení. V tomto článku použijete LightGBM k sestavení modelů klasifikace, regrese a řazení.
LightGBM je opensourcový, distribuovaný, vysoce výkonný přechodový nárůst (GBDT, GBRT, GBM nebo MART). LightGBM je součástí projektu DMTK Od Microsoftu. LightGBM můžete použít pomocí LightGBMClassifier, LightGBMRegressor a LightGBMRanker. LightGBM přináší výhody začlenění do stávajících kanálů SparkML a používaných pro dávkové, streamování a obsluhu úloh. Nabízí také širokou škálu vyladěných parametrů, které lze použít k přizpůsobení systému rozhodovacího stromu. LightGBM ve Sparku také podporuje nové typy problémů, jako je regrese quantile.
Požadavky
Získejte předplatné Microsoft Fabric. Nebo si zaregistrujte bezplatnou zkušební verzi Microsoft Fabricu.
Přihlaste se k Microsoft Fabric.
Pomocí přepínače prostředí na levé straně domovské stránky přepněte na prostředí Synapse Datová Věda.
- Přejděte do prostředí Datová Věda v Microsoft Fabric.
- Vytvořte nový poznámkový blok.
- Připojte poznámkový blok k jezeru. Na levé straně poznámkového bloku vyberte Přidat a přidejte existující jezero nebo vytvořte nový.
Slouží LightGBMClassifier
k trénování klasifikačního modelu.
V této části použijete LightGBM k vytvoření klasifikačního modelu pro predikci bankrotu.
Přečtěte si datovou sadu.
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)
Rozdělte datovou sadu na trénovací a testovací sady.
train, test = df.randomSplit([0.85, 0.15], seed=1)
Přidejte featurizátor pro převod funkcí na vektory.
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"]
Zkontrolujte, jestli jsou data nevyvážená.
display(train_data.groupBy("Bankrupt?").count())
Trénování modelu pomocí
LightGBMClassifier
.from synapse.ml.lightgbm import LightGBMClassifier model = LightGBMClassifier( objective="binary", featuresCol="features", labelCol="Bankrupt?", isUnbalance=True, dataTransferMode="bulk" )
model = model.fit(train_data)
Vizualizace důležitosti funkcí
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()
Generování předpovědí 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)
Slouží LightGBMRegressor
k trénování regresního modelu quantile.
V této části použijete LightGBM k vytvoření regresního modelu pro zjišťování drog.
Přečtěte si datovou sadu.
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))
Rozdělte datovou sadu na trénovací a testovací sady.
train, test = triazines.randomSplit([0.85, 0.15], seed=1)
Trénování modelu pomocí
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())
Generování předpovědí 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)
Použití LightGBMRanker
k trénování modelu řazení
V této části použijete LightGBM k vytvoření modelu řazení.
Přečtěte si datovou sadu.
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énování modelu řazení pomocí
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)
Generování předpovědí 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()