Điều gì xảy ra khi bạn áp dụng SVD cho vấn đề lọc cộng tác? Sự khác biệt giữa hai là gì?


21

Trong Lọc cộng tác, chúng tôi có các giá trị không được điền vào. Giả sử người dùng không xem phim thì chúng tôi phải đặt 'na' vào đó.

Nếu tôi định lấy một SVD của ma trận này, thì tôi phải đặt một số vào đó - nói 0. Bây giờ nếu tôi tính toán ma trận, tôi có một phương pháp để tìm những người dùng tương tự (bằng cách tìm ra những người dùng nào gần nhau hơn trong không gian chiều giảm). Nhưng bản thân sở thích dự đoán - đối với người dùng đối với một mặt hàng sẽ bằng không. (vì đó là những gì chúng tôi đã nhập trên các cột không xác định).

Vì vậy, tôi bị mắc kẹt với vấn đề lọc cộng tác với SVD. Chúng có vẻ gần giống nhau, nhưng không hoàn toàn.

Sự khác biệt giữa chúng và điều gì xảy ra khi tôi áp dụng SVD cho vấn đề lọc cộng tác? Tôi đã làm, và kết quả có vẻ chấp nhận được về mặt tìm kiếm người dùng gần đó, điều này thật tuyệt, nhưng làm thế nào?

Câu trả lời:


25

Ok, khi bạn nói SVD, có lẽ bạn đang nói về SVD bị cắt bớt (trong đó bạn chỉ giữ các giá trị số ít nhất ). Có hai cách khác nhau để xem xét SVD bị cắt cụt của ma trận. Một là định nghĩa chuẩn:k

Trước tiên, bạn thực hiện SVD: , trong đó và là ma trận xoay và có các giá trị số ít dọc theo đường chéo. Sau đó, bạn chọn các giá trị số ít hàng đầu , loại bỏ phần còn lại và hack các hàng và cột không liên quan để tạo xấp xỉ -rank cho bản gốc: UVΣkkX ˜ X = ˜ U n × k k × k ˜ Σ ˜ V T k × mXn×m= =Bạnn×nΣn×mVTm×mBạnVΣkkXX~= =Bạn~n×kΣ~k×kV~Tk×m

Đây là tất cả tốt và đẹp (và dễ thực hiện trong R hoặc matlab), nhưng nó không có ý nghĩa khi nói về ma trận với các giá trị bị thiếu. Tuy nhiên, có một tính chất thú vị của SVD được rút gọn - Đó là xấp xỉ -rank tốt nhất so với bản gốc! Đó là:kkk

X~= =mộtrgmtôinB:rmộtnk(B)= =kΣtôi,j(Xtôij-Btôij)2

Tài sản này có vẻ dễ dàng để khái quát cho trường hợp giá trị còn thiếu. Về cơ bản, bạn đang tìm kiếm một ma trận -rank để giảm thiểu lỗi bình phương trung bình theo yếu tố thông qua các mục đã biết của ma trận gốc. Đó là, khi bạn đào tạo hệ thống, bạn bỏ qua tất cả các giá trị còn thiếu. (Để biết các mẹo về cách bạn thực sự có thể tìm kiếm một xấp xỉ -rank, đâymột số nơi để xem xét).kk

Sau đó, khi bạn đã đưa ra một xấp xỉ -rank gần đúng với giá trị ban đầu, bạn sử dụng nó để điền vào các giá trị còn thiếu. Đó là, nếu bị thiếu, thì bạn điền vào . Tada! Bây giờ bạn đã hoàn thành.kXtôijX~tôij


3

Có vẻ như có rất nhiều cách tiếp cận về cách xử lý các giá trị còn thiếu. Bài viết sau đây với đánh giá trong Phần 1.3 có thể là một điểm khởi đầu tốt.


0

Tôi cần thêm danh tiếng để bình luận về câu trả lời của Stumpy Joe Pete vì vậy tôi đăng bài này như một câu trả lời.

Stumpy cảm ơn cho câu trả lời mặc dù tôi nghĩ rằng nó cần một chút làm rõ. Riêng tôi có nghĩa là câu này:

Về cơ bản, bạn đang tìm kiếm một ma trận thứ hạng k để giảm thiểu lỗi bình phương trung bình thành phần thông qua các mục đã biết của ma trận gốc.

Đầu tiên - không phải thứ hạng cao nhất sẽ luôn giảm thiểu điều này hay thực sự tái cấu trúc ma trận X ban đầu? Thứ hai - Tại sao bạn chỉ lấy các mục đã biết . Theo trực giác nó có ý nghĩa, nhưng thủ tục thực sự cũng phù hợp với những nơi trống đã được thay thế bằng một số con số hợp lý.

Cách tiếp cận của tôi sẽ là thực hiện một cái gì đó giống như xác nhận chéo:

  1. Điền vào chỗ trống bằng 0 hoặc phương tiện hoặc số hợp lý khác.
  2. Thay thế một trong n phần tử đã biết bằng 0 hoặc số hợp lý
  3. Tiến hành xây dựng lại SVD của hạng k
  4. Kiểm tra giá trị của phần tử được xây dựng lại đã biết .
  5. lặp lại cho tất cả các yếu tố có thể biết và tính toán MSE
  6. lặp lại cho tất cả các k có thể và chọn cái có MSE thấp nhất.

1. Bạn muốn chọn mức k thấp để tránh bị quá mức (thấp hơn nhiều so với kích thước của X). Điều này về cơ bản là vì lý do tương tự rằng hồi quy tuyến tính là một lựa chọn tốt hơn so với một nhóm tinh túy để phù hợp với bộ dữ liệu gồm 6 điểm. 2. Bạn không biết mục nhập không xác định là gì, vì vậy bạn không thể đo lường "MSE khôn ngoan nguyên tố" trên chúng. Quy trình của tôi sẽ lấp đầy các giá trị còn thiếu bằng các số có nguồn gốc bằng cách giảm thiểu lỗi so với các giá trị đã biết (và hạn chế rằng ma trận phải có thứ hạng thấp).
Stumpy Joe Pete
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.