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 を使用して最適なモデルを見つける
synapse.ml.automl
から SynapseML の 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()