Χρήση μοντέλων LightGBM με το SynapseML στο Microsoft Fabric
Το πλαίσιο LightGBM ειδικεύεται στη δημιουργία αλγορίθμων δέντρου αποφάσεων υψηλής ποιότητας και με δυνατότητα GPU για κατάταξη, ταξινόμηση και πολλές άλλες εργασίες εκμάθησης μηχανής. Σε αυτό το άρθρο, χρησιμοποιείτε το LightGBM για να δημιουργήσετε μοντέλα ταξινόμησης, παλινδρόμησης και κατάταξης.
Το LightGBM είναι ένα πλαίσιο ενίσχυσης διαβάθμισης υψηλής απόδοσης (GBDT, GBRT, GBM ή MART) ανοιχτού κώδικα. Το LightGBM είναι μέρος του έργου DMTK της Microsoft. Μπορείτε να χρησιμοποιήσετε το LightGBM χρησιμοποιώντας τα LightGBMClassifier, LightGBMRegressor και LightGBMRanker. Το LightGBM παρέχεται με τα πλεονεκτήματα της ενσωμάτωσης σε υπάρχουσες διοχετεύσεις SparkML και της χρήσης για φόρτους εργασίας δέσμης, ροής και εξυπηρέτησης. Προσφέρει επίσης μια μεγάλη γκάμα παραμέτρων με δυνατότητα ρύθμισης, τις οποία μπορεί κανείς να χρησιμοποιήσει για να προσαρμόσει το σύστημα δέντρου αποφάσεων. Το LightGBM στο Spark υποστηρίζει επίσης νέους τύπους προβλημάτων, όπως ποσοτική παλινδρόμηση.
Προαπαιτούμενα στοιχεία
Λάβετε μια συνδρομή Microsoft Fabric. Εναλλακτικά, εγγραφείτε για μια δωρεάν δοκιμαστική έκδοση του Microsoft Fabric.
Εισέλθετε στο Microsoft Fabric.
Χρησιμοποιήστε την εναλλαγή εμπειρίας στην κάτω αριστερή πλευρά της αρχικής σελίδας σας για να μεταβείτε σε Fabric.
- Μεταβείτε στην εμπειρία επιστήμης δεδομένων στο Microsoft Fabric.
- Δημιουργήστε ένα νέο σημειωματάριο.
- Επισυνάψτε το σημειωματάριό σας σε ένα lakehouse. Στην αριστερή πλευρά του σημειωματάριού σας, επιλέξτε Προσθήκη για να προσθέσετε μια υπάρχουσα λίμνη ή να δημιουργήσετε μια νέα.
Χρήση LightGBMClassifier
για την εκπαίδευση ενός μοντέλου ταξινόμησης
Σε αυτή την ενότητα, χρησιμοποιείτε την LightGBM για να δημιουργήσετε ένα μοντέλο ταξινόμησης για την πρόβλεψη πτώχευσης.
Διαβάστε το σύνολο δεδομένων.
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)
Διαιρέστε το σύνολο δεδομένων σε σύνολα εκπαίδευσης και δοκιμών.
train, test = df.randomSplit([0.85, 0.15], seed=1)
Προσθέστε ένα πρόσθετο για να μετατρέψετε δυνατότητες σε διανυσματικά.
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"]
Ελέγξτε εάν τα δεδομένα δεν έχουν εξισορροπηθεί.
display(train_data.groupBy("Bankrupt?").count())
Εκπαιδεύστε το μοντέλο χρησιμοποιώντας
LightGBMClassifier
το .from synapse.ml.lightgbm import LightGBMClassifier model = LightGBMClassifier( objective="binary", featuresCol="features", labelCol="Bankrupt?", isUnbalance=True, dataTransferMode="bulk" )
model = model.fit(train_data)
Απεικόνιση σπουδαιότητας δυνατότητας
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()
Δημιουργία προβλέψεων με το μοντέλο
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)
Χρήση LightGBMRegressor
για την εκπαίδευση ενός μοντέλου ποσοτικής παλινδρόμησης
Σε αυτή την ενότητα, θα χρησιμοποιήσετε το LightGBM για να δημιουργήσετε ένα μοντέλο παλινδρόμησης για τον εντοπισμό φαρμάκων.
Διαβάστε το σύνολο δεδομένων.
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))
Διαιρέστε το σύνολο δεδομένων σε σύνολα εκπαίδευσης και δοκιμών.
train, test = triazines.randomSplit([0.85, 0.15], seed=1)
Εκπαιδεύστε το μοντέλο χρησιμοποιώντας
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())
Δημιουργία προβλέψεων με το μοντέλο.
scoredData = model.transform(test) display(scoredData)
from synapse.ml.train import ComputeModelStatistics metrics = ComputeModelStatistics( evaluationMetric="regression", labelCol="label", scoresCol="prediction" ).transform(scoredData) display(metrics)
Χρήση LightGBMRanker
για την εκπαίδευση ενός μοντέλου κατάταξης
Σε αυτή την ενότητα, χρησιμοποιείτε το LightGBM για να δημιουργήσετε ένα μοντέλο κατάταξης.
Διαβάστε το σύνολο δεδομένων.
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))
Εκπαιδεύστε το μοντέλο κατάταξης χρησιμοποιώντας το
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)
Δημιουργία προβλέψεων με το μοντέλο.
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()