Delen via


LightGBM-modellen gebruiken met SynapseML in Microsoft Fabric

Het LightGBM-framework is gespecialiseerd in het maken van beslissingsstructuuralgoritmen met hoge kwaliteit en GPU voor classificatie, classificatie en vele andere machine learning-taken. In dit artikel gebruikt u LightGBM om classificatie-, regressie- en classificatiemodellen te bouwen.

LightGBM is een opensource-framework voor gedistribueerde, gedistribueerde, hoogwaardige gradiƫntverhoging (GBDT, GBRT, GBM of MART). LightGBM maakt deel uit van het DMTK-project van Microsoft. U kunt LightGBM gebruiken met behulp van LightGBMClassifier, LightGBMRegressor en LightGBMRanker. LightGBM wordt geleverd met de voordelen van het integreren in bestaande SparkML-pijplijnen en wordt gebruikt voor batch-, streaming- en serverworkloads. Het biedt ook een breed scala aan niet-instelbare parameters, die u kunt gebruiken om hun beslissingsstructuursysteem aan te passen. LightGBM op Spark ondersteunt ook nieuwe typen problemen, zoals kwantielregressie.

Vereisten

  • Ga naar de Datawetenschap ervaring in Microsoft Fabric.
  • Maak een nieuw notitieblok.
  • Koppel uw notitieblok aan een lakehouse. Selecteer aan de linkerkant van uw notitieblok Toevoegen om een bestaand lakehouse toe te voegen of maak een nieuw lakehouse.

Gebruiken LightGBMClassifier om een classificatiemodel te trainen

In deze sectie gebruikt u LightGBM om een classificatiemodel te bouwen voor het voorspellen van faillissementen.

  1. Lees de gegevensset.

    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. Splits de gegevensset in trainings- en testsets.

    train, test = df.randomSplit([0.85, 0.15], seed=1)
    
  3. Voeg een featurizer toe om functies om te zetten in vectoren.

    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. Controleer of de gegevens onevenwichtig zijn.

    display(train_data.groupBy("Bankrupt?").count())
    
  5. Train het model met behulp van 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. Het belang van de functie visualiseren

    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. Voorspellingen genereren met het 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)
    

Gebruiken LightGBMRegressor om een kwantiel-regressiemodel te trainen

In deze sectie gebruikt u LightGBM om een regressiemodel te bouwen voor drugsdetectie.

  1. Lees de gegevensset.

    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. Splits de gegevensset in trainings- en testsets.

    train, test = triazines.randomSplit([0.85, 0.15], seed=1)
    
  3. Train het model met behulp van 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. Voorspellingen genereren met het 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)
    

Gebruiken LightGBMRanker om een classificatiemodel te trainen

In deze sectie gebruikt u LightGBM om een classificatiemodel te bouwen.

  1. Lees de gegevensset.

    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. Train het classificatiemodel met behulp van 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. Voorspellingen genereren met het 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()