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