Microsoft Fabric에서 SynapseML에서 LightGBM 모델 사용하기
LightGBM 프레임워크는 순위, 분류 및 기타 많은 기계 학습 작업을 위한 고품질 및 GPU 지원 의사 결정 트리 알고리즘을 만드는 것을 전문으로 합니다. 이 문서에서는 LightGBM을 사용하여 분류, 회귀 및 순위 모델을 빌드합니다.
LightGBM은 빠르고 분산된 고성능 경사 부스팅(GBDT, GBRT, GBM 또는 MART) 오픈소스입니다. LightGBM은 Microsoft의 DMTK 프로젝트에 포함됩니다. LightGBMClassifier, LightGBMRegressor 및 LightGBMRanker를 사용하여 LightGBM을 사용할 수 있습니다. LightGBM은 기존 SparkML 파이프라인에 통합되고 일괄 처리, 스트리밍 및 서비스 워크로드에 사용되는 장점이 있습니다. 또한 의사 결정 트리 시스템을 사용자 지정하는 데 사용할 수 있는 다양한 튜닝 가능한 매개 변수를 제공합니다. Spark의 LightGBM은 분위수 회귀와 같은 새로운 유형의 문제도 지원합니다.
필수 조건
Microsoft Fabric 구독을 구매합니다. 또는 무료 Microsoft Fabric 평가판에 등록합니다.
Microsoft Fabric에 로그인합니다.
홈페이지 왼쪽의 환경 전환기를 사용하여 Synapse 데이터 과학 환경으로 전환합니다.
- Microsoft Fabric의 데이터 과학 환경으로 이동합니다.
- 새 Notebook을 만듭니다.
- 레이크하우스에 Notebook을 첨부합니다. Notebook 왼쪽에서 추가를 선택하여 기존 레이크하우스를 추가하거나 새 레이크하우스를 만듭니다.
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()