HyperParameterTuning – Bekämpa bröstcancer
Den här självstudien visar hur SynapseML kan användas för att identifiera den bästa kombinationen av hyperparametrar för dina valda klassificerare, vilket i slutändan resulterar i mer exakta och tillförlitliga modeller. För att demonstrera detta visar vi hur du utför distribuerad randomiserad rutnätssökningshyperparameterjustering för att bygga en modell för att identifiera bröstcancer.
1 – Konfigurera beroenden
Börja med att importera Pandas och konfigurera vår Spark-session.
import pandas as pd
from pyspark.sql import SparkSession
# Bootstrap Spark Session
spark = SparkSession.builder.getOrCreate()
Läs sedan data och dela upp dem i justerings- och testuppsättningar.
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()
Definiera de modeller som ska användas.
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 – Hitta den bästa modellen med AutoML
Importera SynapseML:s AutoML-klasser från synapse.ml.automl
.
Ange hyperparametrar med hjälp av HyperparamBuilder
. Lägg till antingen DiscreteHyperParam
eller RangeHyperParam
hyperparametrar. TuneHyperparameters
väljer slumpmässigt värden från en enhetlig fördelning:
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)
Kör sedan TuneHyperparameters för att få den bästa modellen.
bestModel = TuneHyperparameters(
evaluationMetric="accuracy",
models=mmlmodels,
numFolds=2,
numRuns=len(mmlmodels) * 2,
parallelism=1,
paramSpace=randomSpace.space(),
seed=0,
).fit(tune)
3 – Utvärdera modellen
Vi kan visa den bästa modellens parametrar och hämta den underliggande bästa modellpipelinen
print(bestModel.getBestModelInfo())
print(bestModel.getBestModel())
Vi kan göra poäng mot testuppsättningen och visa mått.
from synapse.ml.train import ComputeModelStatistics
prediction = bestModel.transform(test)
metrics = ComputeModelStatistics().transform(prediction)
metrics.limit(10).toPandas()