HyperParameterTuning - Bekämpfung von Brustkrebs

In diesem Tutorial wird gezeigt, wie SynapseML verwendet werden kann, um die beste Kombination von Hyperparametern für die von Ihnen ausgewählten Klassifizierer zu identifizieren, was letztendlich zu genaueren und zuverlässigeren Modellen führt. Um dies zu veranschaulichen, zeigen wir, wie Sie die Hyperparameteroptimierung für die verteilte randomisierte Rastersuche durchführen, um ein Modell zur Identifizierung von Brustkrebs zu erstellen.

1: Einrichten von Abhängigkeiten

Beginnen Sie mit dem Importieren von Pandas und dem Einrichten unserer Spark-Sitzung.

import pandas as pd
from pyspark.sql import SparkSession

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

Lesen Sie als Nächstes die Daten, und teilen Sie sie in Optimierungs- und Testsätze auf.

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

Definieren Sie die zu verwendenden Modelle.

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: Ermitteln des besten Modells mithilfe von AutoML

Importieren Sie die AutoML-Klassen von SynapseML aus synapse.ml.automl. Geben Sie die Hyperparameter mithilfe von an HyperparamBuilder. Fügen Sie entweder DiscreteHyperParam oder RangeHyperParam Hyperparameter hinzu. TuneHyperparameters wählt nach dem Zufallsprinzip Werte aus einer einheitlichen Verteilung aus:

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)

Führen Sie als Nächstes TuneHyperparameters aus, um das beste Modell zu erhalten.

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

3. Auswerten des Modells

Wir können die Parameter des besten Modells anzeigen und die zugrunde liegende beste Modellpipeline abrufen.

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

Wir können anhand des Testsatzes bewerten und Metriken anzeigen.

from synapse.ml.train import ComputeModelStatistics

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

Nächste Schritte