Bagikan melalui


Menggunakan model LightGBM dengan SynapseML di Microsoft Fabric

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

  • 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.

  1. 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)
    
  2. Pisahkan himpunan data menjadi kumpulan pelatihan dan pengujian.

    train, test = df.randomSplit([0.85, 0.15], seed=1)
    
  3. 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"]
    
  4. Periksa apakah data tidak seimbang.

    display(train_data.groupBy("Bankrupt?").count())
    
  5. 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)
    
  6. 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()
    
  7. 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.

  1. 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))
    
  2. Pisahkan himpunan data menjadi kumpulan pelatihan dan pengujian.

    train, test = triazines.randomSplit([0.85, 0.15], seed=1)
    
  3. 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())
    
  4. 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.

  1. 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))
    
  2. 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)
    
  3. 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()