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