HyperParameterTuning - Borstkanker bestrijden
Deze zelfstudie laat zien hoe SynapseML kan worden gebruikt om de beste combinatie van hyperparameters voor uw gekozen classificaties te identificeren, wat uiteindelijk resulteert in nauwkeurigere en betrouwbare modellen. Om dit te laten zien, laten we zien hoe we gedistribueerde gerandomiseerde rasterzoekopdrachten kunnen uitvoeren om een model te bouwen om borstkanker te identificeren.
1 - Afhankelijkheden instellen
Begin met het importeren van pandas en het instellen van onze Spark-sessie.
import pandas as pd
from pyspark.sql import SparkSession
# Bootstrap Spark Session
spark = SparkSession.builder.getOrCreate()
Lees vervolgens de gegevens en splits deze in afstemmings- en testsets.
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()
Definieer de modellen die moeten worden gebruikt.
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 - Het beste model zoeken met AutoML
Importeer de AutoML-klassen van SynapseML uit synapse.ml.automl
.
Geef de hyperparameters op met behulp van de HyperparamBuilder
. Voeg een van DiscreteHyperParam
beide of RangeHyperParam
hyperparameters toe. TuneHyperparameters
willekeurig waarden uit een uniforme verdeling kiezen:
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)
Voer vervolgens TuneHyperparameters uit om het beste model te verkrijgen.
bestModel = TuneHyperparameters(
evaluationMetric="accuracy",
models=mmlmodels,
numFolds=2,
numRuns=len(mmlmodels) * 2,
parallelism=1,
paramSpace=randomSpace.space(),
seed=0,
).fit(tune)
3 - Het model evalueren
We kunnen de beste modelparameters bekijken en de onderliggende beste modelpijplijn ophalen
print(bestModel.getBestModelInfo())
print(bestModel.getBestModel())
We kunnen scoren op basis van de testset en metrische gegevens weergeven.
from synapse.ml.train import ComputeModelStatistics
prediction = bestModel.transform(test)
metrics = ComputeModelStatistics().transform(prediction)
metrics.limit(10).toPandas()