HyperParameterTuning - Bekjempelse av brystkreft

Denne opplæringen viser hvordan SynapseML kan brukes til å identifisere den beste kombinasjonen av hyperparametere for de valgte klassifisererne, noe som til slutt resulterer i mer nøyaktige og pålitelige modeller. For å demonstrere dette, vil vi vise hvordan du utfører distribuert randomisert rutenett søk hyperparameter tuning å bygge en modell for å identifisere brystkreft.

1 – Konfigurere avhengigheter

Start med å importere pandaer og konfigurere Spark-økten.

import pandas as pd
from pyspark.sql import SparkSession

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

Les deretter dataene og del dem i justerings- og testsett.

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

Definer modellene som skal brukes.

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 – Finn den beste modellen ved hjelp av AutoML

Importer AutoML-klassene i SynapseML fra synapse.ml.automl. Angi hyperparameterne ved hjelp av HyperparamBuilder. Legg til enten DiscreteHyperParam eller RangeHyperParam hyperparametere. TuneHyperparameters velger tilfeldig verdier fra en enhetlig fordeling:

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)

Deretter kjører du TuneHyperparametere for å få den beste modellen.

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

3 – Evaluer modellen

Vi kan vise parameterne for den beste modellen og hente det underliggende beste modellforløpet

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

Vi kan score mot testsettet og vise måledata.

from synapse.ml.train import ComputeModelStatistics

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