Có rất nhiều cách để dự đoán các giá trị bị thiếu nhưng SVD cổ điển không phải là một trong số đó. Điều tuyệt vời là máy học hiện cung cấp nhiều cách để thực hiện điều này, một số trong số đó dựa trên yếu tố ma trận, một số khác hoàn toàn so với nhân tố ma trận. Bạn có thể chọn và tạo một mô hình hoàn toàn tùy chỉnh và điều này thường được thực hiện ngay bây giờ vì các công cụ này đủ mạnh ngày nay. Yếu tố ma trận vẫn chắc chắn là một cách tốt để dự đoán các giá trị còn thiếu trong dữ liệu thưa thớt, nhưng bản thân SVD thì không.
Câu trả lời được chấp nhận ở đây, rõ ràng đã khuyên người hỏi chỉ nên chọn bất kỳ giá trị không đổi nào như 0 hoặc 99 hoặc -3 hoặc bất cứ điều gì, để gán trước cho các giá trị còn thiếu, sau đó chạy SVD trên đó. Đây là một câu trả lời tồi nếu mục tiêu là dự đoán trên các bộ dữ liệu thưa thớt. Nhưng nếu thay vào đó, mục tiêu của OP chỉ đơn giản là chạy SVD, thì việc gán trước bất kỳ giá trị không đổi nào sẽ hoạt động tốt, vì vậy hãy chọn bất kỳ giá trị nào và sau đó chạy SVD nếu kết quả không quan trọng đối với OP. Tôi đã nói rằng SVD là một giải pháp tồi để dự đoán các giá trị bị thiếu bởi vì giả sử giá trị không đổi trong tất cả các vị trí thưa thớt có thể là do bạn giới thiệu nhiều điểm nhiễu hơn nghĩa đen so với các điểm dữ liệu tốt đã biết.
Điểm học tiếng ồn là gì? Và tại sao bạn thậm chí sẽ đề xuất rằng các giá trị còn thiếu thực sự là cùng một giá trị không đổi, khi quan điểm của bài tập là dự đoán chúng là gì? Bạn không mong đợi các giá trị còn thiếu thực sự giống nhau, phải không? Điều đó sẽ đánh giá thấp số lượng các thành phần chính dẫn đến kết quả là nếu có dữ liệu không đổi quá phổ biến trong tập dữ liệu của bạn, vì một điều. Ngoài ra đó là một vấn đề dự đoán rất dễ dàng sau đó. Bạn không cần một thuật toán học tập hay thậm chí là một thuật toán nhân tố. Bạn chỉ nói các giá trị còn thiếu là một hằng số đã biết. Không cần phải chê! Bạn đã làm điều đó rồi, bằng tay, chỉ bằng cách đoán theo cách cũ.
Bạn có thể nhận được fancier với SVD và xác định trước các giá trị bị thiếu bằng cách sử dụng phân phối ngẫu nhiên có nguồn gốc thực nghiệm bằng cách sử dụng độ lệch trung bình và độ lệch chuẩn từ dữ liệu đã biết (không thiếu). Nhưng sau đó, có sự ngẫu nhiên thay vì các mẫu trong dữ liệu và bạn có thể mong đợi yếu tố ma trận và giảm kích thước vốn có trong kỹ thuật đó để tìm ra các mẫu mà bạn mong đợi ở đó. Tuy nhiên, bạn sẽ không phát hiện ra nhiều kiểu sử dụng trong tiếng ồn ngẫu nhiên, vì vậy nó cũng không giúp sử dụng theo cách này.
Điểm mấu chốt là đầu ra của SVD - hoặc bất kỳ thuật toán nào khác - sẽ phần lớn là rác bất cứ khi nào có quá nhiều dữ liệu rác do điều tra viên cung cấp. Không có thuật toán nào có thể học được mô hình tốt từ dữ liệu rác đa số. Chỉ cần nói không với toàn bộ "cách tiếp cận" đó.
Dường như mục tiêu của OP là dự đoán và sử dụng thiết kế nhân tố ma trận như một phần của thuật toán học tập. Trong trường hợp này, điều tuyệt vời là bạn có thể viết hàm chi phí của mình một cách khả thi mà bỏ qua chi phí, bất kỳ dự đoán nào được thực hiện đối với các giá trị còn thiếu. Không có dữ liệu rác nào được đưa vào thuật toán học theo cách này.Sử dụng một trình tối ưu hóa dựa trên độ dốc tốt, chẳng hạn như Adam (có những cái khác). Bạn có thể nhận được một giải pháp có thể đo lường chính xác ở bất kỳ mức độ nào về đào tạo, nhà phát triển và tập dữ liệu thử nghiệm, miễn là bạn tuân theo một phương pháp dự án máy học tốt. Vui lòng thêm các thuật ngữ và độ phức tạp vào mô hình của bạn như xu hướng người dùng, xu hướng mục, độ lệch toàn cục, chính quy hoặc bất cứ điều gì khác mà bạn cần để kiểm soát lỗi sai lệch và sai lệch phương sai cho các yêu cầu của dự án và bộ dữ liệu có sẵn.
Một gói phát triển máy học hiện đại làm cho điều này trở thành một cách tiếp cận thực tế ngay bây giờ. Ví dụ, TensorFlow (hoặc Microsoft CNTK et al) có thể giúp bạn thực hiện chính xác những gì tôi đã mô tả trên bộ dữ liệu thưa thớt bằng mô hình nhân tố ma trận.