จะเกิดอะไรขึ้นเมื่อคุณใช้ SVD กับปัญหาการกรองร่วมกัน ความแตกต่างระหว่างสองคืออะไร?


21

ในการกรองร่วมกันเรามีค่าที่ไม่ได้กรอกหากผู้ใช้ไม่ได้ดูภาพยนตร์แล้วเราต้องใส่ 'na' ลงไปที่นั่น

ถ้าฉันจะใช้ SVD ของเมทริกซ์นี้จากนั้นฉันต้องใส่ตัวเลขลงไปที่นั่น - บอก 0 ตอนนี้ถ้าฉันแยกเมทริกซ์เมทริกซ์ฉันมีวิธีหาผู้ใช้ที่คล้ายกัน พื้นที่มิติลดลง) แต่การตั้งค่าที่คาดการณ์เอง - สำหรับผู้ใช้รายการจะเป็นศูนย์ (เพราะนั่นคือสิ่งที่เราป้อนในคอลัมน์ที่ไม่รู้จัก)

ดังนั้นฉันจึงติดอยู่กับปัญหาของการกรองการทำงานร่วมกันกับ SVD พวกเขาดูเหมือนจะเกือบจะเหมือนกัน แต่ไม่มาก

อะไรคือความแตกต่างระหว่างสิ่งเหล่านี้กับสิ่งที่เกิดขึ้นเมื่อฉันใช้ SVD กับปัญหาการกรองแบบทำงานร่วมกัน ฉันทำแล้วและผลลัพธ์ดูเหมือนจะยอมรับได้ในแง่ของการค้นหาผู้ใช้ใกล้เคียงซึ่งยอดเยี่ยม แต่อย่างไร

คำตอบ:


25

ตกลงเมื่อคุณพูด SVD สันนิษฐานว่าคุณกำลังพูดถึงตัดทอน SVD (ที่คุณจะให้ค่าเอกพจน์ที่ใหญ่ที่สุด) มีสองวิธีที่แตกต่างกันในการดู SVD ที่ถูกตัดทอนของเมทริกซ์ หนึ่งคือคำจำกัดความมาตรฐาน:k

ก่อนอื่นคุณทำการ SVD: โดยที่UและVคือเมทริกซ์การหมุน, และΣมีค่าเอกพจน์ตามแนวทแยงมุม จากนั้นคุณเลือกค่าเอกพจน์kอันดับสูงสุดลบส่วนที่เหลือออกจากศูนย์แล้วตัดออกจากแถวและคอลัมน์ที่ไม่เกี่ยวข้องเพื่อสร้างค่าประมาณk -rank ให้เป็นค่าดั้งเดิม: X ˜ X = ˜ U n × k k × kXn×ม.=ยูn×nΣn×ม.VTม.×ม.ยูVΣkkXX~=ยู~n×kΣ~k×kV~Tk×ม.

นี่คือทั้งหมดที่ดีและสวยงาม (และใช้งานง่ายใน R หรือ matlab) แต่มันก็ไม่สมเหตุสมผลเมื่อพูดถึงเมทริกซ์ที่มีค่าที่หายไป อย่างไรก็ตามมีคุณสมบัติที่น่าสนใจของ -truncated SVD - มันเป็นค่าประมาณk -rank ที่ดีที่สุดสำหรับต้นฉบับ! นั่นคือ:kk

X~=aRก.ม.ผมnB:Rank(B)=kΣผม,J(XผมJ-BผมJ)2

ดูเหมือนว่าคุณสมบัตินี้จะง่ายต่อการสรุปกรณีที่ขาดหายไป โดยทั่วไปคุณกำลังมองหาเมทริกซ์ -rank ที่ลดข้อผิดพลาดกำลังสองของค่าเฉลี่ยองค์ประกอบที่ชาญฉลาดในรายการที่รู้จักของเมทริกซ์ดั้งเดิม นั่นคือเมื่อคุณกำลังฝึกอบรมระบบคุณจะไม่สนใจค่าที่หายไปทั้งหมด (สำหรับเคล็ดลับเกี่ยวกับวิธีการที่คุณจริงอาจจะไปเกี่ยวกับการหาk -Rank ประมาณที่นี่มีบางตำแหน่งที่จะดู)kk

จากนั้นเมื่อคุณได้ค่า -rank ที่ใกล้เคียงกับต้นฉบับแล้วคุณจะใช้มันเพื่อเติมค่าที่หายไป นั่นคือถ้าX ฉันเจหายไปแล้วคุณกรอก~ Xฉันเจ Tada! คุณทำเสร็จแล้วkXผมJX~ผมJ


3

ดูเหมือนว่ามีวิธีการมากมายเกี่ยวกับวิธีจัดการกับค่าที่ขาดหายไป บทความต่อไปนี้ในหัวข้อที่ 1.3 อาจเป็นจุดเริ่มต้นที่ดี


0

ฉันต้องการชื่อเสียงมากขึ้นเพื่อแสดงความคิดเห็นในคำตอบของ Stumpy Joe Pete ดังนั้นฉันโพสต์สิ่งนี้เป็นคำตอบ

ขอบคุณสำหรับคำตอบที่มึนงงแม้ว่าฉันจะคิดว่ามันต้องใช้ความกระจ่าง โดยเฉพาะฉันหมายถึงประโยคนี้:

โดยทั่วไปคุณกำลังมองหาเมทริกซ์ k- อันดับที่ลดข้อผิดพลาดกำลังสองของค่าเฉลี่ยองค์ประกอบที่ชาญฉลาดในรายการที่รู้จักของเมทริกซ์ดั้งเดิม

ครั้งแรก - อันดับสูงสุดจะลดขนาดนี้ลงไปเสมอหรือสร้างเมทริกซ์ X ขึ้นมาใหม่จริงหรือ ประการที่สอง - เหตุใดคุณต้องรับทราบเท่านั้น มันใช้งานง่าย แต่จริง ๆ แล้วกระบวนการนี้เหมาะสมกับสถานที่ว่างซึ่งแทนที่ด้วยจำนวนที่สมเหตุสมผล

แนวทางของฉันจะดำเนินการบางอย่างเช่นการตรวจสอบข้าม:

  1. เติมสถานที่ว่างด้วย 0s หรือวิธีการหรือหมายเลขอื่นที่เหมาะสม
  2. แทนที่หนึ่งในองค์ประกอบที่รู้จัก n ด้วย 0 หรือจำนวนที่เหมาะสม
  3. ดำเนินการสร้าง SVD ใหม่สำหรับอันดับ k
  4. ตรวจสอบค่าขององค์ประกอบที่สร้างใหม่ที่รู้จัก
  5. ทำซ้ำสำหรับองค์ประกอบที่เป็นไปได้ทั้งหมดและคำนวณ MSE
  6. ทำซ้ำสำหรับ k ที่เป็นไปได้ทั้งหมดและเลือกอันที่มี MSE ต่ำที่สุด

1. คุณต้องการเลือก k ต่ำเพื่อหลีกเลี่ยงการ overfitting (ต่ำกว่าขนาดของ X ใดมาก) นี่เป็นเหตุผลเดียวกันที่การถดถอยเชิงเส้นเป็นทางเลือกที่ดีกว่าชุดข้อมูลสำหรับปรับชุดข้อมูลที่ 6 คะแนน 2. คุณไม่รู้ว่ารายการที่ไม่รู้จักควรเป็นอะไรดังนั้นคุณจึงไม่สามารถวัด "MSE ที่ชาญฉลาดในองค์ประกอบ" ได้ ขั้นตอนของฉันเติมค่าที่หายไปด้วยตัวเลขที่ได้มาจากการลดข้อผิดพลาดให้น้อยที่สุดกับค่าที่ทราบ (และบังคับให้เมทริกซ์นั้นต้องอยู่ในระดับต่ำ)
Stumpy Joe Pete
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.