Jaa


HyperParameterTuning – Rintasyöpää torjuva

Tässä opetusohjelmassa näytetään, miten SynapseML:n avulla voidaan tunnistaa valitsemallesi luokituksille paras hyperparametrien yhdistelmä, mikä johtaa lopulta tarkempiin ja luotettavampiin malleihin. Tämän havainnollistamiseksi näytämme, miten voimme suorittaa hajautetun satunnaistetun ruudukon haun hyperparametrin virityksen rakentaaksemme mallin rintasyöpään tunnistamiseksi.

1 – Riippuvuuksien määrittäminen

Aloita tuomalla pandoja ja määrittämällä Spark-istuntomme.

import pandas as pd
from pyspark.sql import SparkSession

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

Lue seuraavaksi tiedot ja jaa ne säätö- ja testijoukkoihin.

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

Määritä käytettävät mallit.

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 – Parhaan automaattianalyysipalveluita käyttävän mallin etsiminen

Tuo SynapseML:n AutoML-luokat kohteesta synapse.ml.automl. Määritä hyperparametrit käyttämällä .-parametria HyperparamBuilder. Lisää joko DiscreteHyperParam tai RangeHyperParam hyperparametrit. TuneHyperparameters valitsee satunnaisesti arvoja yhtenäisestä jakaumasta:

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)

Hanki seuraavaksi paras malli suorittamalla TuneHyperparameters.

bestModel = TuneHyperparameters(
    evaluationMetric="accuracy",
    models=mmlmodels,
    numFolds=2,
    numRuns=len(mmlmodels) * 2,
    parallelism=1,
    paramSpace=randomSpace.space(),
    seed=0,
).fit(tune)

3 - Mallin arvioiminen

Voimme tarkastella parhaan mallin parametreja ja noutaa pohjana olevan parhaan malliputken.

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

Voimme tehdä testijoukosta pistemäärän ja tarkastella mittareita.

from synapse.ml.train import ComputeModelStatistics

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