Запуск неявной 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 отлично работает со списками, воспользуемся именно им. Следуйте инструкциям ниже, чтобы найти наилучшее значение ROEM и соответствующую модель.
Это упражнение является частью курса
Построение рекомендательных систем с помощью PySpark
Инструкции к упражнению
- Импортируйте
numpy. - Найдите наименьшее значение ROEM в предоставленном списке
ROEMSс помощьюnumpy.argmin(). Метод.argmin()возвращает индекс минимального элемента списка. Сохраните результат в переменную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: ", ____[____])