HyperParameterTuning - Melawan Kanker Payudara
Tutorial ini menunjukkan bagaimana SynapseML dapat digunakan untuk mengidentifikasi kombinasi hiperparameter terbaik untuk pengklasifikasi yang Anda pilih, pada akhirnya menghasilkan model yang lebih akurat dan andal. Untuk menunjukkan hal ini, kami akan menunjukkan cara melakukan penyetelan hiperparameter pencarian kisi acak terdistribusi untuk membangun model untuk mengidentifikasi kanker payudara.
1 - Menyiapkan dependensi
Mulailah dengan mengimpor panda dan menyiapkan sesi Spark kami.
import pandas as pd
from pyspark.sql import SparkSession
# Bootstrap Spark Session
spark = SparkSession.builder.getOrCreate()
Selanjutnya, baca data dan bagi menjadi set penyetelan dan pengujian.
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()
Tentukan model yang akan digunakan.
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 - Temukan model terbaik menggunakan AutoML
Impor kelas AutoML SynapseML dari synapse.ml.automl
.
Tentukan hiperparameter menggunakan HyperparamBuilder
. Tambahkan hiperparameter DiscreteHyperParam
atau RangeHyperParam
. TuneHyperparameters
akan secara acak memilih nilai dari distribusi seragam:
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)
Selanjutnya, jalankan TuneHyperparameters untuk mendapatkan model terbaik.
bestModel = TuneHyperparameters(
evaluationMetric="accuracy",
models=mmlmodels,
numFolds=2,
numRuns=len(mmlmodels) * 2,
parallelism=1,
paramSpace=randomSpace.space(),
seed=0,
).fit(tune)
3 - Mengevaluasi model
Kita dapat melihat parameter model terbaik dan mengambil alur model terbaik yang mendasar
print(bestModel.getBestModelInfo())
print(bestModel.getBestModel())
Kita dapat mencetak skor terhadap set pengujian dan melihat metrik.
from synapse.ml.train import ComputeModelStatistics
prediction = bestModel.transform(test)
metrics = ComputeModelStatistics().transform(prediction)
metrics.limit(10).toPandas()