始める無料で始める

交差検証付きの暗黙的 ALS モデルを実行する

異なるハイパーパラメータの組み合わせで作成した複数の ALS モデルを、msd データセットの学習用データで交差検証し、その後テストデータで実行して、前に説明した ROEM 関数で性能を評価できます。残念ながら、この処理は演習内で行うには時間がかかりすぎるため、別途実行済みです。参考として、次のループで model_list を評価できます(ここでは msd データセットを使っています)。

# Split the data into training and test sets
(training, test) = msd.randomSplit([0.8, 0.2])

#Building 5 folds within the training set.
train1, train2, train3, train4, train5 = training.randomSplit([0.2, 0.2, 0.2, 0.2, 0.2], seed = 1)
fold1 = train2.union(train3).union(train4).union(train5)
fold2 = train3.union(train4).union(train5).union(train1)
fold3 = train4.union(train5).union(train1).union(train2)
fold4 = train5.union(train1).union(train2).union(train3)
fold5 = train1.union(train2).union(train3).union(train4)

foldlist = [(fold1, train1), (fold2, train2), (fold3, train3), (fold4, train4), (fold5, train5)]

# Empty list to fill with ROEMs from each model
ROEMS = []

# Loops through all models and all folds
for model in model_list:
    for ft_pair in foldlist:

        # Fits model to fold within training data
        fitted_model = model.fit(ft_pair[0])

        # Generates predictions using fitted_model on respective CV test data
        predictions = fitted_model.transform(ft_pair[1])

        # Generates and prints a ROEM metric CV test data
        r = ROEM(predictions)
        print ("ROEM: ", r)

    # Fits model to all of training data and generates preds for test data
    v_fitted_model = model.fit(training)
    v_predictions = v_fitted_model.transform(test)
    v_ROEM = ROEM(v_predictions)

    # Adds validation ROEM to ROEM list
    ROEMS.append(v_ROEM)
    print ("Validation ROEM: ", v_ROEM)

手順を追って学べるように、すでに192個のモデルについてテスト予測を生成し、それぞれの ROEM を計算してあります。結果は用意された ROEMS リストに入っています。リストは Pyspark 固有ではなく、numpy はリストとの相性がとても良いので、ここでは numpy を使います。次の指示に従って、最良の ROEM とそれを出したモデルを見つけましょう。

この演習はコースの一部です

PySpark で作る Recommendation Engines

コースを見る

演習の手順

  • numpy をインポートしましょう。
  • 提供された ROEMS リストから、numpy.argmin() を使って最小の ROEM を取り出します。.argmin() メソッドは、与えられたリストの最小値のインデックスを返します。結果を i として受け取り、i を出力してください。
  • リストのスライシングを使って、インデックス i にある ROEMS の値を取得しましょう。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Import numpy
import numpy

# Find the index of the smallest ROEM
i = numpy.____(____)
print("Index of smallest ROEM:", ____)

# Find ith element of ROEMS
print("Smallest ROEM: ", ____[____])
コードを編集して実行