하이퍼 매개 변수 조정 - 유방암 퇴치

이 자습서에서는 SynapseML을 사용하여 선택한 분류자를 위한 최상의 하이퍼 매개 변수 조합을 식별하여 궁극적으로 보다 정확하고 신뢰할 수 있는 모델을 만드는 방법을 보여 줍니다. 이를 입증하기 위해 분산 무작위 그리드 검색 하이퍼 매개 변수 튜닝을 수행하여 유방암을 식별하는 모델을 빌드하는 방법을 보여 줍니다.

1 - 종속성 설정

먼저 pandas를 가져오고 Spark 세션을 설정합니다.

import pandas as pd
from pyspark.sql import SparkSession

# Bootstrap Spark Session
spark = SparkSession.builder.getOrCreate()

다음으로, 데이터를 읽고 튜닝 및 테스트 집합으로 분할합니다.

data = spark.read.parquet(
    "wasbs://publicwasb@mmlspark.blob.core.windows.net/BreastCancer.parquet"
).cache()
tune, test = data.randomSplit([0.80, 0.20])
tune.limit(10).toPandas()

사용할 모델을 정의합니다.

from synapse.ml.automl import TuneHyperparameters
from synapse.ml.train import TrainClassifier
from pyspark.ml.classification import (
    LogisticRegression,
    RandomForestClassifier,
    GBTClassifier,
)

logReg = LogisticRegression()
randForest = RandomForestClassifier()
gbt = GBTClassifier()
smlmodels = [logReg, randForest, gbt]
mmlmodels = [TrainClassifier(model=model, labelCol="Label") for model in smlmodels]

2 - AutoML을 사용하여 최상의 모델 찾기

에서 SynapseML의 AutoML 클래스를 가져옵니다 synapse.ml.automl. 를 사용하여 하이퍼 매개 변수를 HyperparamBuilder지정합니다. DiscreteHyperParam 하이퍼 매개 변수를 RangeHyperParam 추가합니다. TuneHyperparameters 는 균일한 분포에서 임의로 값을 선택합니다.

from synapse.ml.automl import *

paramBuilder = (
    HyperparamBuilder()
    .addHyperparam(logReg, logReg.regParam, RangeHyperParam(0.1, 0.3))
    .addHyperparam(randForest, randForest.numTrees, DiscreteHyperParam([5, 10]))
    .addHyperparam(randForest, randForest.maxDepth, DiscreteHyperParam([3, 5]))
    .addHyperparam(gbt, gbt.maxBins, RangeHyperParam(8, 16))
    .addHyperparam(gbt, gbt.maxDepth, DiscreteHyperParam([3, 5]))
)
searchSpace = paramBuilder.build()
# The search space is a list of params to tuples of estimator and hyperparam
print(searchSpace)
randomSpace = RandomSpace(searchSpace)

다음으로 TuneHyperparameters를 실행하여 최상의 모델을 가져옵니다.

bestModel = TuneHyperparameters(
    evaluationMetric="accuracy",
    models=mmlmodels,
    numFolds=2,
    numRuns=len(mmlmodels) * 2,
    parallelism=1,
    paramSpace=randomSpace.space(),
    seed=0,
).fit(tune)

3 - 모델 평가

최상의 모델의 매개 변수를 보고 기본 최적 모델 파이프라인을 검색할 수 있습니다.

print(bestModel.getBestModelInfo())
print(bestModel.getBestModel())

테스트 집합에 대해 점수를 매기고 메트릭을 볼 수 있습니다.

from synapse.ml.train import ComputeModelStatistics

prediction = bestModel.transform(test)
metrics = ComputeModelStatistics().transform(prediction)
metrics.limit(10).toPandas()