2012-03-06 69 views
30

Tất cả thời gian này (đặc biệt trong cuộc thi Netflix), tôi luôn xem blog này (hoặc diễn đàn bảng thành tích), nơi họ đề cập đến cách áp dụng một bước SVD đơn giản trên dữ liệu đã giúp họ giảm thiểu sự thưa thớt trong dữ liệu hoặc nói chung cải thiện hiệu suất của thuật toán của họ trong tay. Tôi đang cố nghĩ (từ lâu) nhưng tôi không thể đoán tại sao lại như vậy. Nói chung, dữ liệu trong tay tôi nhận được rất ồn ào (cũng là phần thú vị của bigdata) và sau đó tôi biết một số tính năng mở rộng quy mô cơ bản như công cụ chuyển đổi nhật ký, bình thường hóa. Nhưng làm thế nào một cái gì đó giống như SVD giúp. Vì vậy, cho phép nói rằng tôi có một ma trận khổng lồ đánh giá người dùng movies..and sau đó trong ma trận này, tôi thực hiện một số phiên bản của hệ thống khuyến nghị (nói lọc cộng tác):tầm quan trọng của PCA hoặc SVD trong học máy

1) Without SVD 
2) With SVD 

như thế nào giúp Cảm ơn

+1

Bằng "hiệu suất", bạn có ý là tốc độ hoặc độ chính xác không? –

+0

@larsmans Hi .. Tôi có nghĩa là chính xác – Fraz

Trả lời

42

SVD không được sử dụng để chuẩn hóa dữ liệu, nhưng để loại bỏ dữ liệu dư thừa, tức là giảm kích thước. Ví dụ, nếu bạn có hai biến, một là chỉ số độ ẩm và một là xác suất mưa, thì tương quan của chúng quá cao, thứ hai không đóng góp bất kỳ thông tin bổ sung nào hữu ích cho nhiệm vụ phân loại hoặc hồi quy. Các giá trị riêng trong SVD giúp bạn xác định các biến nào mang tính thông tin nhất và những biến nào bạn có thể làm mà không có.

Cách hoạt động rất đơn giản. Bạn thực hiện SVD trên dữ liệu đào tạo của bạn (gọi nó là ma trận A), để có được U, S và V *. Sau đó, đặt thành 0 tất cả các giá trị của S nhỏ hơn ngưỡng tùy ý nhất định (ví dụ: 0,1), gọi ma trận mới này là S '. Sau đó lấy A '= US'V * và sử dụng A' làm dữ liệu đào tạo mới của bạn. Một số tính năng của bạn hiện được đặt thành 0 và có thể bị xóa, đôi khi không có bất kỳ hình phạt hiệu suất nào (tùy thuộc vào dữ liệu của bạn và ngưỡng được chọn). Điều này được gọi là k SVD rút gọn.

SVD không giúp bạn với sự khan hiếm, chỉ giúp bạn khi các tính năng dư thừa. Hai tính năng có thể vừa đủ vừa thông tin (có liên quan) cho một tác vụ dự đoán, do đó bạn không thể xóa một trong hai tính năng này.

Sử dụng SVD, bạn đi từ n tính năng để k tính năng, trong đó mỗi một sẽ là một sự kết hợp tuyến tính của các gốc n. Đó là một bước giảm kích thước, giống như lựa chọn tính năng. Tuy nhiên, khi có các tính năng dự phòng, thuật toán lựa chọn tính năng có thể dẫn đến hiệu suất phân loại tốt hơn SVD tùy thuộc vào tập dữ liệu của bạn (ví dụ, lựa chọn tính năng entropy tối đa). Weka đi kèm với một bó của chúng.

Xem: http://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Dimensionality_Reduction/Singular_Value_Decomposition

https://stats.stackexchange.com/questions/33142/what-happens-when-you-apply-svd-to-a-collaborative-filtering-problem-what-is-th

+5

Mặc dù SVD thực hiện giảm kích thước nhưng đúng là nó không thực sự là bước lựa chọn tính năng khi bạn mô tả nó. Tôi tin rằng nó thường được sử dụng để tăng tốc các thuật toán đào tạo. –

+0

@larsmans: bạn có thể giải thích thêm một chút không. Như thế nào nó giúp .. Tôi có nghĩa là trong netflix và nói chung, dữ liệu luôn luôn thưa thớt (lời nguyền của chiều kích) nhưng sau đó làm thế nào để chạy một SVD giúp? – Fraz

+0

@larsmans: Tôi không nghĩ rằng nó được sử dụng để tăng tốc độ giai đoạn học tập, như bạn mô tả nó. Nó thực sự được sử dụng để lựa chọn tính năng. – Diego

15

số ít giá trị gia tăng phân hủy thường được sử dụng để xấp xỉ một ma trận X bởi một ma trận cấp bậc thấp X_lr:

  1. Tính SVD X = U D V^T.
  2. Tạo ma trận D' bằng cách giữ các giá trị số ít nhất là k và đặt các giá trị khác thành 0.
  3. Tạo thành ma trận X_lr theo X_lr = U D' V^T.

Ma trận X_lr là sau đó xấp xỉ tốt nhất của bậc k của ma trận X, cho Frobenius norm (tương đương với l2 -norm cho ma trận). Đó là tính toán hiệu quả để sử dụng đại diện này, bởi vì nếu ma trận của bạn Xn bởi nk << n, bạn có thể lưu trữ xấp xỉ bậc thấp với chỉ (2n + 1)k hệ số (bằng cách lưu trữ U, D'V).

Điều này thường được sử dụng trong các vấn đề hoàn thành ma trận (chẳng hạn như lọc cộng tác) vì ma trận thực sự của xếp hạng người dùng được giả định là xếp hạng thấp (hoặc được xấp xỉ bằng ma trận hạng thấp). Vì vậy, bạn muốn khôi phục ma trận đích thực bằng cách tính toán gần đúng thứ hạng thấp nhất của ma trận dữ liệu của bạn. Tuy nhiên, hiện nay có những cách tốt hơn để khôi phục các ma trận hạng thấp từ những quan sát ồn ào và thiếu sót, cụ thể là giảm thiểu mức hạt nhân. Xem ví dụ: The power of convex relaxation: Near-optimal matrix completion của E. Candes và T. Tao.

(Lưu ý: các thuật toán bắt nguồn từ kỹ thuật này cũng lưu trữ SVD của ma trận ước tính, nhưng nó được tính khác nhau).

+0

Theo phương pháp này nếu ma trận X ban đầu là m x n, ma trận xếp hạng đã giảm của bạn vẫn sẽ là m x n. Nếu mục tiêu của bạn là giảm kích thước không hoàn thành ma trận, bạn sử dụng U hoặc V^T làm bộ đào tạo mới của bạn (tùy thuộc vào việc mẫu của bạn được định hướng hàng hay cột khôn ngoan trong X) không phải là X_lr. –

2

PCA hoặc SVD, khi được sử dụng để giảm kích thước, giảm số lượng đầu vào. Điều này, ngoài tiết kiệm chi phí tính toán của việc học và/hoặc dự đoán, có thể đôi khi tạo ra các mô hình mạnh mẽ hơn không tối ưu theo nghĩa thống kê, nhưng có hiệu suất tốt hơn trong điều kiện ồn ào.

Về mặt toán học, các mô hình đơn giản có ít phương sai hơn, nghĩa là chúng ít bị ảnh hưởng quá mức. Underfitting, tất nhiên, có thể là một vấn đề quá. Điều này được gọi là tình trạng khó xử về phương sai thiên vị. Hoặc, như đã nói trong những từ đơn giản của Einstein: Mọi thứ nên được làm đơn giản nhất có thể, nhưng không đơn giản hơn.

Các vấn đề liên quan