시작하기무료로 시작하기

교차 검증을 적용한 암시적 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를 임포트하세요.
  • 제공된 ROEMS 리스트에서 numpy.argmin()을 사용해 가장 작은 ROEM의 인덱스를 추출하세요. .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: ", ____[____])
코드 편집 및 실행