Bagikan melalui


HyperParameterTuning - melawan kanker payudara

Tutorial ini menunjukkan cara menggunakan SynapseML untuk mengidentifikasi kombinasi hiperparameter terbaik untuk pengklasifikasi yang dipilih, untuk membangun model yang lebih akurat dan andal. Tutorial menunjukkan cara melakukan penyetelan hiperparameter pencarian kisi acak terdistribusi untuk membangun model yang mengidentifikasi kanker payudara.

Menyiapkan dependensi

Impor panda dan siapkan sesi Spark:

import pandas as pd
from pyspark.sql import SparkSession

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

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]

Gunakan AutoML untuk menemukan model terbaik

Imporkan kelas AutoML SynapseML dari synapse.ml.automl. Tentukan hiperparameter dengan HyperparamBuilder. Tambahkan hyperparameter DiscreteHyperParam atau RangeHyperParam. TuneHyperparameters 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)

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)

Evaluasilah model

Lihat parameter model terbaik, dan ambil alur model terbaik yang mendasar:

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

Skor terhadap set pengujian, dan lihat metrik:

from synapse.ml.train import ComputeModelStatistics

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