Freigeben über


HyperParameterTuning - Kampf gegen Brustkrebs

In diesem Lernprogramm wird gezeigt, wie SynapseML verwendet wird, um die beste Kombination von Hyperparametern für ausgewählte Klassifizierer zu identifizieren, um genauere und zuverlässigere Modelle zu erstellen. Das Lernprogramm zeigt, wie Sie die Hyperparameteroptimierung für verteilte randomisierte Rastersuche durchführen, um ein Modell zu erstellen, das Brustkrebs identifiziert.

Einrichten der Abhängigkeiten

Importieren Sie Pandas und richten Sie eine Spark-Sitzung ein:

import pandas as pd
from pyspark.sql import SparkSession

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

Lesen Sie 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]

Verwenden von AutoML zum Auffinden des besten Modells

Importieren Sie die AutoML-Klassen von SynapseML aus synapse.ml.automl. Geben Sie die Hyperparameter mit HyperparamBuilder an. Fügen Sie entweder DiscreteHyperParam oder RangeHyperParam Hyperparameter hinzu. TuneHyperparameters wählt zufällig 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 TuneHyperparameter 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)

Auswerten des Modells

Zeigen Sie die Parameter des besten Modells an, und rufen Sie die zugrunde liegende beste Modellpipeline ab:

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

Vergleichen Sie Ihre Ergebnisse mit dem Testsatz und schauen Sie sich die Metriken an:

from synapse.ml.train import ComputeModelStatistics

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