เปรียบเทียบภาพยนตร์ทั้งหมดพร้อมกัน
การหาค่า Jaccard similarity ระหว่างภาพยนตร์สองเรื่องในชุดข้อมูลเหมาะสำหรับการวิเคราะห์ขนาดเล็ก แต่หากชุดข้อมูลมีขนาดใหญ่ขึ้น วิธีนี้อาจช้าเกินไปสำหรับการสร้างคำแนะนำ
ในแบบฝึกหัดนี้ จะหาค่าความคล้ายคลึงระหว่างภาพยนตร์ทั้งหมด แล้วเก็บผลลัพธ์ไว้ใน DataFrame เพื่อให้ค้นหาได้รวดเร็วและสะดวก
ในการคำนวณความคล้ายคลึงระหว่างแถวทุกคู่ใน DataFrame แทนที่จะวนลูปคำนวณทีละคู่ วิธีที่มีประสิทธิภาพกว่าคือใช้ฟังก์ชัน pdist() (pairwise distance) จาก scipy
จากนั้นปรับรูปร่างผลลัพธ์ให้เป็นอาร์เรย์สี่เหลี่ยมด้วย squareform() จากไลบรารีเดียวกัน เนื่องจากต้องการค่าความคล้ายคลึง ไม่ใช่ระยะทาง ให้นำค่าที่ได้ไปลบออกจาก 1
โหลด movie_cross_table ไว้ให้แล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การสร้าง Recommendation Engine ด้วย Python
คำแนะนำการฝึกหัด
- หาค่า Jaccard distance ระหว่างภาพยนตร์ทุกเรื่อง แล้วกำหนดผลลัพธ์ให้กับ
jaccard_similarity_array - สร้าง DataFrame จาก
jaccard_similarity_arrayโดยใช้movie_genre_df.indexเป็นทั้งแถวและคอลัมน์ - แสดง 5 แถวแรกของ DataFrame และตรวจสอบคะแนนความคล้ายคลึง
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Import functions from scipy
from scipy.spatial.distance import pdist, squareform
# Calculate all pairwise distances
jaccard_distances = ____(movie_cross_table.values, metric='____')
# Convert the distances to a square matrix
jaccard_similarity_array = 1 - ____(____)
# Wrap the array in a pandas DataFrame
jaccard_similarity_df = pd.____(jaccard_similarity_array, ____=movie_cross_table.index, ____=movie_cross_table.index)
# Print the top 5 rows of the DataFrame
print(jaccard_similarity_df.head())