เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การรัน implicit ALS model แบบ cross-validated

เมื่อสร้าง ALS model หลายตัวที่มีค่า hyperparameter ต่างกันแล้ว เราสามารถเทรนโมเดลเหล่านั้นด้วยชุดข้อมูลเทรนจาก msd โดยใช้ cross validation จากนั้นรันบนชุดข้อมูลทดสอบ และประเมินประสิทธิภาพของแต่ละโมเดลด้วยฟังก์ชัน ROEM ที่กล่าวถึงก่อนหน้านี้ อย่างไรก็ตาม กระบวนการนี้ใช้เวลานานเกินไปสำหรับแบบฝึกหัดนี้ จึงได้ดำเนินการแยกต่างหากแล้ว แต่สำหรับข้อมูลอ้างอิง คุณสามารถประเมิน model_list ด้วย loop ต่อไปนี้ (ในที่นี้ใช้ชุดข้อมูล 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 ที่ดีที่สุดและโมเดลที่ให้ค่านั้น

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การสร้าง Recommendation Engines ด้วย PySpark

ดูคอร์ส

คำแนะนำการฝึกหัด

  • Import numpy
  • ดึงค่า ROEM ที่ต่ำที่สุดจากลิสต์ ROEMS โดยใช้ numpy.argmin() โดยเมธอด .argmin() จะคืนค่า index ของค่าที่น้อยที่สุดในลิสต์ที่กำหนด เก็บผลลัพธ์ไว้ในตัวแปร i แล้วพิมพ์ค่า i
  • ใช้การ slice ลิสต์เพื่อดึงค่าในลิสต์ ROEMS ที่ index 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: ", ____[____])
แก้ไขและรันโค้ด