Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kerangka kerja LightGBM mengkhususkan diri dalam membuat algoritma pohon keputusan berkualitas tinggi dan berkemampuan GPU untuk peringkat, klasifikasi, dan banyak tugas pembelajaran mesin lainnya. Dalam artikel ini, Anda menggunakan LightGBM untuk membangun model klasifikasi, regresi, dan peringkat.
LightGBM adalah kerangka kerja peningkatan gradien bersumber terbuka, terdistribusi, dan berkinerja tinggi (GBDT, GBRT, GBM, atau MART). LightGBM adalah bagian dari proyek DMTK Microsoft. Anda dapat menggunakan LightGBM dengan menggunakan LightGBMClassifier, LightGBMRegressor, dan LightGBMRanker. LightGBM hadir dengan keuntungan dimasukkan ke dalam alur SparkML yang ada dan digunakan untuk beban kerja batch, streaming, dan penyajian. Ini juga menawarkan berbagai parameter yang dapat disetel, yang dapat digunakan untuk menyesuaikan sistem pohon keputusan mereka. LightGBM di Spark juga mendukung jenis masalah baru seperti regresi kuantil.
Prasyarat
Dapatkan langganan Microsoft Fabric. Atau, daftar untuk uji coba Microsoft Fabric gratis.
Masuk ke Microsoft Fabric.
Gunakan pengalih pengalaman di sisi kiri bawah halaman beranda Anda untuk beralih ke Fabric.
- Buka pengalaman Ilmu Data di Microsoft Fabric.
- Buat buku catatan baru.
- Lampirkan buku catatan Anda ke lakehouse. Di sisi kiri buku catatan Anda, pilih Tambahkan untuk menambahkan lakehouse yang sudah ada atau buat yang baru.
Gunakan LightGBMClassifier
untuk melatih model klasifikasi
Di bagian ini, Anda menggunakan LightGBM untuk membangun model klasifikasi untuk memprediksi kebangkrutan.
Baca himpunan data.
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)
Pisahkan himpunan data menjadi kumpulan pelatihan dan pengujian.
train, test = df.randomSplit([0.85, 0.15], seed=1)
Tambahkan featurizer untuk mengonversi fitur menjadi vektor.
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"]
Periksa apakah data tidak seimbang.
display(train_data.groupBy("Bankrupt?").count())
Latih model menggunakan
LightGBMClassifier
.from synapse.ml.lightgbm import LightGBMClassifier model = LightGBMClassifier( objective="binary", featuresCol="features", labelCol="Bankrupt?", isUnbalance=True, dataTransferMode="bulk" )
model = model.fit(train_data)
Memvisualisasikan kepentingan fitur
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()
Hasilkan prediksi dengan 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)
Gunakan LightGBMRegressor
untuk melatih model regresi kuantil
Di bagian ini, Anda menggunakan LightGBM untuk membangun model regresi untuk penemuan obat.
Baca himpunan data.
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))
Pisahkan himpunan data menjadi kumpulan pelatihan dan pengujian.
train, test = triazines.randomSplit([0.85, 0.15], seed=1)
Latih model menggunakan
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())
Hasilkan prediksi dengan 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)
Gunakan LightGBMRanker
untuk melatih model peringkat
Di bagian ini, Anda menggunakan LightGBM untuk membangun model peringkat.
Baca himpunan data.
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))
Latih model peringkat menggunakan
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)
Hasilkan prediksi dengan 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()