HyperParameterTuning - Καταπολέμηση του καρκίνου του μαστού
Αυτή η εκμάθηση παρουσιάζει πώς μπορεί να χρησιμοποιηθεί το SynapseML για τον προσδιορισμό του βέλτιστου συνδυασμού υπερπαραμετών για τους επιλεγμένους ταξινομητές σας, καταλήγοντας τελικά σε πιο ακριβή και αξιόπιστα μοντέλα. Για να το δείξουμε αυτό, θα σας δείξουμε πώς να εκτελέσετε κατανεμημένη τυχαιοποιημένη ρύθμιση αναζήτησης πλέγματος για να δημιουργήσετε ένα μοντέλο για τον προσδιορισμό του καρκίνου του μαστού.
1 - Ρύθμιση εξαρτήσεων
Ξεκινήστε εισάγοντας pandas και ρυθμίζοντας τη συνεδρία Spark.
import pandas as pd
from pyspark.sql import SparkSession
# Bootstrap Spark Session
spark = SparkSession.builder.getOrCreate()
Στη συνέχεια, διαβάστε τα δεδομένα και διαιρέστε τα σε σύνολα ρύθμισης και δοκιμών.
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()
Καθορίστε τα μοντέλα που θα χρησιμοποιηθούν.
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 - Εύρεση του βέλτιστου μοντέλου με χρήση του AutoML
Εισαγάγετε τις κλάσεις AutoML του SynapseML από synapse.ml.automl
το .
Καθορίστε τους υπερπαραμετρητές χρησιμοποιώντας το HyperparamBuilder
. Προσθέστε ένα DiscreteHyperParam
ή RangeHyperParam
υπερπαραμετρητές. TuneHyperparameters
θα επιλέξει τυχαία τιμές από μια ομοιόμορφη κατανομή:
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)
Στη συνέχεια, εκτελέστε το TuneHyperparameters για να λάβετε το καλύτερο μοντέλο.
bestModel = TuneHyperparameters(
evaluationMetric="accuracy",
models=mmlmodels,
numFolds=2,
numRuns=len(mmlmodels) * 2,
parallelism=1,
paramSpace=randomSpace.space(),
seed=0,
).fit(tune)
3 - Αξιολόγηση του μοντέλου
Μπορούμε να προβάλουμε τις παραμέτρους του καλύτερου μοντέλου και να ανακτήσουμε την υποκείμενη καλύτερη διοχέτευση μοντέλου
print(bestModel.getBestModelInfo())
print(bestModel.getBestModel())
Μπορούμε να βαθμολογήσουμε σε σχέση με το σύνολο δοκιμών και να προβάλουμε τα μετρικά.
from synapse.ml.train import ComputeModelStatistics
prediction = bestModel.transform(test)
metrics = ComputeModelStatistics().transform(prediction)
metrics.limit(10).toPandas()