交差検証

Machine Learning with PySpark

Andrew Collier

Data Scientist, Fathom Data

全データセット

Machine Learning with PySpark

学習用とテスト用への分割

Machine Learning with PySpark

学習データの多フォールド分割

Machine Learning with PySpark

フォールドごとに検証 - 第1フォールド

最初のフォールド

Machine Learning with PySpark

フォールドごとに検証 - 第2フォールド

第2フォールド

Machine Learning with PySpark

フォールドごとに検証 - その他のフォールド

残りのフォールド

Machine Learning with PySpark

自動車データの再確認

cars.select('mass', 'cyl', 'consumption').show(5)
+------+---+-----------+
|  mass|cyl|consumption|
+------+---+-----------+
|1451.0|  6|       9.05|
|1129.0|  4|       6.53|
|1399.0|  4|       7.84|
|1147.0|  4|       7.84|
|1111.0|  4|       9.05|
+------+---+-----------+
Machine Learning with PySpark

推定器と評価器

モデルを構築するオブジェクト。パイプラインでも可。

regression = LinearRegression(labelCol='consumption')

モデル性能を評価するオブジェクト。

evaluator = RegressionEvaluator(labelCol='consumption')
Machine Learning with PySpark

グリッドとクロスバリデータ

from pyspark.ml.tuning import CrossValidator, ParamGridBuilder

パラメータ値のグリッド(ここでは空)。

params = ParamGridBuilder().build()

交差検証オブジェクト。

cv = CrossValidator(estimator=regression,
                    estimatorParamMaps=params,
                    evaluator=evaluator,
                    numFolds=10, seed=13)
Machine Learning with PySpark

クロスバリデータも学習が必要

学習データに交差検証を適用します。

cv = cv.fit(cars_train)

フォールド平均のRMSEは?

cv.avgMetrics
[0.800663722151572]
Machine Learning with PySpark

クロスバリデータはモデルのように扱える

元のテストデータで予測します。

evaluator.evaluate(cv.transform(cars_test))
# テストデータのRMSE
0.745974203928479

交差検証のRMSEよりもかなり小さい。

# 交差検証のRMSE
0.800663722151572

単純な学習・テスト分割だけだと、性能を楽観的に見積もるおそれがあります。

Machine Learning with PySpark

すべてのモデルを交差検証しよう

Machine Learning with PySpark

Preparing Video For Download...