HyperParameterTuning - Melawan Kanker Payudara

Tutorial ini menunjukkan bagaimana SynapseML dapat digunakan untuk mengidentifikasi kombinasi hiperparameter terbaik untuk pengklasifikasi pilihan Anda, 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 atau DiscreteHyperParamRangeHyperParam hyperparameter. TuneHyperparameters akan memilih nilai secara acak 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 terhadap set pengujian dan melihat metrik.

from synapse.ml.train import ComputeModelStatistics

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