แชร์ผ่าน


ใช้แบบจําลอง 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
  • สร้าง สมุดบันทึกใหม่
  • แนบสมุดบันทึกของคุณเข้ากับเลคเฮ้าส์ ทางด้านซ้ายของสมุดบันทึกของคุณ ให้เลือก เพิ่ม เพื่อเพิ่มเลคเฮ้าส์ที่มีอยู่แล้ว หรือสร้างขึ้นใหม่

ใช้ LightGBMClassifier เพื่อฝึกแบบจําลองการจัดประเภท

ในส่วนนี้คุณใช้ LightGBM เพื่อสร้างแบบจําลองการจําแนกประเภทสําหรับการคาดการณ์การล้มละลาย

  1. อ่านชุดข้อมูล

    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. แยกชุดข้อมูลลงในการฝึกและชุดการทดสอบ

    train, test = df.randomSplit([0.85, 0.15], seed=1)
    
  3. เพิ่มกระโปรงคุณสมบัติเพื่อแปลงคุณสมบัติเป็นเวกเตอร์

    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. ตรวจสอบว่าข้อมูลไม่สมดุลหรือไม่

    display(train_data.groupBy("Bankrupt?").count())
    
  5. ฝึกแบบจําลองโดยใช้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. แสดงภาพความสําคัญของคุณลักษณะ

    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. สร้างการคาดการณ์ด้วยแบบจําลอง

    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 เพื่อสร้างแบบจําลองการถดถอยสําหรับการค้นพบยา

  1. อ่านชุดข้อมูล

    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. แยกชุดข้อมูลลงในการฝึกและชุดการทดสอบ

    train, test = triazines.randomSplit([0.85, 0.15], seed=1)
    
  3. ฝึกแบบจําลองโดยใช้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. สร้างการคาดการณ์ด้วยแบบจําลอง

    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 เพื่อสร้างแบบจําลองการจัดอันดับ

  1. อ่านชุดข้อมูล

    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. ฝึกแบบจําลองการจัดอันดับโดยใช้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. สร้างการคาดการณ์ด้วยแบบจําลอง

    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()