การกรองแบบร่วมมือ: อิงผู้ใช้และอิงรายการ
ความคล้ายคลึงระหว่างผู้ใช้ ความคล้ายคลึงระหว่างรายการ วิธีแบบเพื่อนบ้าน และความคล้ายคลึงโคไซน์สำหรับคะแนน
การกรองแบบร่วมมือ: อิงผู้ใช้และอิงรายการ เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
การกรองแบบร่วมมือคืออะไร
การกรองแบบร่วมมือ (CF) แนะนำรายการโดยเรียนรู้จากพฤติกรรมของผู้ใช้จำนวนมาก แนวคิดหลักคือ ผู้ที่มีความเห็นตรงกันในอดีตมักจะมีความเห็นตรงกันในอนาคต วิธีนี้ไม่ต้องใช้คำอธิบายรายการ แต่ใช้เพียงประวัติการโต้ตอบ
เมทริกซ์ผู้ใช้-รายการ
CF เริ่มจาก เมทริกซ์ผู้ใช้-รายการ ซึ่งแถวแทนผู้ใช้ คอลัมน์แทนรายการ และแต่ละเซลล์เก็บคะแนน หรือเว้นว่างหากยังไม่ได้ให้คะแนน เมทริกซ์นี้มักจะ เบาบางมาก เนื่องจากผู้ใช้แต่ละคนให้คะแนนรายการเพียงไม่กี่รายการ
import pandas as pd
matrix = ratings.pivot_table(
index="user_id", columns="item_id", values="rating"
)รูปแบบของ CF สองแบบ
- อิงผู้ใช้: ค้นหาผู้ใช้ที่คล้ายกับคุณ แล้วแนะนำรายการที่ผู้ใช้เหล่านั้นชื่นชอบ
- อิงรายการ: ค้นหารายการที่คล้ายกับรายการที่คุณชื่นชอบ แล้วแนะนำรายการเหล่านั้น
ทั้งสองแบบอาศัยการวัดความคล้ายคลึงระหว่างแถว (ผู้ใช้) หรือคอลัมน์ (รายการ)
ความคล้ายคลึงแบบโคไซน์
ความคล้ายคลึงแบบโคไซน์วัดมุมระหว่างเวกเตอร์คะแนนสองตัวโดยไม่สนใจขนาด ค่าใกล้ 1 หมายถึงรสนิยมคล้ายกันมาก ส่วนค่าใกล้ 0 หมายถึงไม่เกี่ยวข้องกัน
from sklearn.metrics.pairwise import cosine_similarity
filled = matrix.fillna(0)
user_sim = cosine_similarity(filled) # user x userการคาดการณ์โดยอิงผู้ใช้
หากต้องการคาดการณ์คะแนนของคุณสำหรับรายการหนึ่ง ให้ใช้ ค่าเฉลี่ยถ่วงน้ำหนักของคะแนนจากผู้ใช้ที่คล้ายกัน โดยถ่วงน้ำหนักตามระดับความคล้ายคลึง ผู้ใช้ข้างเคียงที่คล้ายกันมากกว่าจะมีอิทธิพลมากกว่า
สูตรการคาดการณ์
คะแนนที่คาดการณ์ = sum(ความคล้ายคลึง * คะแนนของผู้ใช้ข้างเคียง) / sum(ความคล้ายคลึง) โดยคำนวณจากผู้ใช้ข้างเคียงที่ให้คะแนนรายการนั้น การลบค่าเฉลี่ยของผู้ใช้แต่ละคนออกก่อน (การปรับให้อยู่กึ่งกลางด้วยค่าเฉลี่ย) จะช่วยแก้ความแตกต่างระหว่างผู้ใช้ที่มักให้คะแนนสูงหรือต่ำ
import numpy as np
def predict(sims, ratings_for_item):
mask = ~np.isnan(ratings_for_item)
if sims[mask].sum() == 0:
return np.nan
return np.dot(sims[mask], ratings_for_item[mask]) / sims[mask].sum()การเลือกผู้ใช้ข้างเคียง (k)
แทนที่จะใช้ผู้ใช้ทั้งหมด ให้เก็บไว้เฉพาะผู้ใช้ข้างเคียงที่มีความคล้ายคลึงสูงสุดจำนวน k คน วิธีนี้ลดสัญญาณรบกวนจากผู้ใช้ที่ไม่คล้ายกันและทำให้การคาดการณ์เร็วขึ้น k เป็นพารามิเตอร์ไฮเปอร์พารามิเตอร์ที่ปรับได้
ความคล้ายคลึงโดยอิงรายการ
CF แบบอิงรายการจะคำนวณความคล้ายคลึงระหว่างคอลัมน์ของรายการแทนแถวของผู้ใช้ แล้วแนะนำรายการที่คล้ายกับรายการที่ผู้ใช้ชื่นชอบอยู่แล้วมากที่สุด
item_sim = cosine_similarity(filled.T) # item x itemเหตุใดแบบอิงรายการจึงเสถียรกว่า
ความสัมพันธ์ระหว่างรายการเปลี่ยนแปลงอย่างช้า ๆ ความคล้ายคลึงระหว่างภาพยนตร์สองเรื่องจึงมักคงที่โดยประมาณ แต่รสนิยมของผู้ใช้และฐานผู้ใช้เปลี่ยนแปลงเร็วกว่า ดังนั้นจึงสามารถ คำนวณล่วงหน้าและนำความคล้ายคลึงแบบอิงรายการกลับมาใช้ซ้ำได้ ทำให้คำแนะนำมีความเสถียรและรองรับการขยายระบบได้ดีกว่า ซึ่งเป็นเหตุผลที่แอมะซอนเคยเลือกใช้วิธีนี้อย่างโดดเด่น
ปัญหาการเริ่มต้นแบบเย็น
CF มีปัญหากับ ผู้ใช้หรือรายการใหม่ที่ยังไม่มีคะแนน เพราะไม่มีข้อมูลให้เปรียบเทียบ วิธีแก้ที่ใช้กันทั่วไป ได้แก่ ขอให้ผู้ใช้ใหม่ให้คะแนนบางรายการ หรือใช้วิธีแบบอิงเนื้อหาเป็นทางเลือกสำรอง ซึ่งจะกล่าวถึงในภายหลัง
การสร้างคำแนะนำ
ให้คะแนนรายการที่ผู้ใช้ยังไม่ได้ให้คะแนนทุก รายการ เรียงลำดับจากมากไปน้อย แล้วส่งคืนรายการ N อันดับแรกเป็นคำแนะนำ
scores = {item: predict_for(user, item)
for item in unrated_items(user)}
top_n = sorted(scores, key=scores.get, reverse=True)[:10]ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความรู้เกี่ยวกับการกรองแบบร่วมมือของคุณ
สรุปทบทวน
คุณได้สร้าง CF บน เมทริกซ์ผู้ใช้-รายการ คำนวณ ความคล้ายคลึงแบบโคไซน์ คาดการณ์คะแนนเป็น ค่าเฉลี่ยถ่วงน้ำหนักตามความคล้ายคลึงของผู้ใช้ข้างเคียง และเห็นแล้วว่า CF แบบ อิงรายการมีความเสถียรกว่าแบบอิงผู้ใช้ บทถัดไปคือการแยกตัวประกอบเมทริกซ์ด้วย SVD
คำถามที่พบบ่อย
บทเรียน “การกรองแบบร่วมมือ: อิงผู้ใช้และอิงรายการ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การกรองแบบร่วมมือ: อิงผู้ใช้และอิงรายการ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การกรองแบบร่วมมือ: อิงผู้ใช้และอิงรายการ”
ความคล้ายคลึงระหว่างผู้ใช้ ความคล้ายคลึงระหว่างรายการ วิธีแบบเพื่อนบ้าน และความคล้ายคลึงโคไซน์สำหรับคะแนน คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การกรองแบบร่วมมือ: อิงผู้ใช้และอิงรายการ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกรองแบบร่วมมือ: อิงผู้ใช้และอิงรายการ
- การแยกตัวประกอบเมทริกซ์ด้วย SVD
- การกรองตามเนื้อหา
- ระบบผสมและตัวชี้วัดการประเมิน