แชร์ผ่าน


HyperParameterTuning - ต่อสู้กับมะเร็งเต้านม

บทช่วยสอนนี้แสดงวิธีการใช้ SynapseML เพื่อระบุการผสมผสานที่ดีที่สุดของ hyperparameters สําหรับตัวจําแนกประเภทที่เลือก เพื่อสร้างแบบจําลองที่ถูกต้องและเชื่อถือได้มากขึ้น บทช่วยสอนแสดงให้เห็นว่าจะดําเนินการปรับแต่งการค้นหา hyperparameter แบบตารางแบบกระจายแบบสุ่มเพื่อสร้างแบบจําลองที่ระบุมะเร็งเต้านม

ตั้งค่าการขึ้นต่อกัน

นําเข้าแพนด้าและตั้งค่าเซสชัน 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]

ใช้ AutoML เพื่อค้นหาแบบจําลองที่ดีที่สุด

นําเข้าคลาส SynapseML AutoML จากsynapse.ml.automl ระบุ hyperparameters ด้วยHyperparamBuilder เพิ่ม hyperparameters อย่างใดอย่างหนึ่งDiscreteHyperParamRangeHyperParam 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)

ประเมินแบบจําลอง

ดูพารามิเตอร์ของแบบจําลองที่ดีที่สุดและเรียกใช้ไปป์ไลน์แบบจําลองที่ดีที่สุดต้นแบบ:

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

ให้คะแนนกับชุดการทดสอบและดูเมตริก:

from synapse.ml.train import ComputeModelStatistics

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