ПочатиПочніть безкоштовно

Запуск перехресно перевіреної моделі implicit 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

Переглянути курс

Інструкції до вправи

  • Імпортуйте numpy.
  • Добудьте найменший ROEM зі списку ROEMS, використавши numpy.argmin(). Метод .argmin() повертає індекс найменшого значення у переданому списку. Назвіть результат i і виведіть i.
  • Використайте індексацію списку, щоб отримати значення у списку ROEMS за індексом i.

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

# 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: ", ____[____])
Редагувати та запускати код