Dela via


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