2011-07-26 10 views
6

Tôi có vấn đề sau:Thuật toán để hoàn thành ma trận dữ liệu bị lỗi

Tôi trích xuất một tập hợp dữ liệu nhưng một phần dữ liệu này không khả dụng hoặc bị thiếu; đối với các mục khác nhau, tôi đã xác định được 10 thông số:

 param1 param2 ... param10 
Item 1 1220  N/A   1000 
Item 2 1300  200  ... 1000 
..  ...  ... 

item N N/A  1000 ...  200 

N ~ 1500 and half of the values are complete 

Có một logic ẩn trong việc tạo các mục, vì vậy tôi muốn điền vào các giá trị này với giá trị mong đợi tốt nhất có thể.

Ví dụ:

Hãy tưởng tượng bạn có 2 thông số và 3 mặt hàng.

 param1 param2 
item1 400 200 
item2 200 100 
item3 100  N/A 

Với nội suy tuyến tính, bạn sẽ dễ dàng nhận param2 cho item3 = 50.

Ý tưởng của tôi:

Như tôi đã có 10 thông số và 1500 giá trị, tôi nghĩ đến việc làm một PCA trên covariance matrix của 750 mặt hàng có đầy đủ (tìm hướng chính của bộ dữ liệu).

PCA sẽ dẫn tôi đến một hướng chính cho các mục của tôi (giá trị eigen lớn nhất) và hướng phụ cho các nhóm phụ của các mục (giá trị riêng nhỏ hơn).

Tôi muốn chiếu các vectơ có tham số bị thiếu theo hướng chính chẳng hạn. để có được giá trị gần đúng của các tham số bị thiếu.

Từ ví dụ đầu tiên của tôi:

 param1 param2 
item1 400 200 
item2 200 100 
item3 100  X ? 

Toàn bộ ma trận:

param1 param2 
item1 400 200 
item2 200 100 

Hiệp phương sai ma trận:

1 0.5 
    0.5 1 

eigen vector và eigen giá trị:

V1 và l1:

1 
1 associatedd to 1.5 

V2 và l2:

1 
-1 associated to 0.5 

kết quả:

Nếu tôi chiếu trên V1 chỉ tôi nhận được X1=100.

Nếu tôi chiếu trên l1.V1 + l2.V2 Tôi nhận được X1=50. Điều này là do có một mối tương quan hoàn hảo giữa 2 mục đầu tiên.


Vì vậy, câu hỏi của tôi:

Cho đến nay nó chỉ lý thuyết, tôi đã không áp dụng nó, nhưng trước khi tôi bắt đầu Tôi muốn biết nếu tôi đi đâu đó với điều này.

Tôi có thể làm tốt hơn không? (Tôi thực sự tin là có.) Tôi có thể làm gì nếu tất cả các mục có một tham số bị thiếu? Tôi lấy hướng từ đâu?

Có các thuật toán tốt được biết để điền vào ma trận bị hỏng hay bạn có thể giúp tôi hoàn thành ý tưởng của mình (đề xuất cho tôi đọc hoặc phương pháp tốt) không?

Tôi nghĩ Netflix sử dụng loại thuật toán này để điền vào ma trận điểm phim tự động ví dụ (vấn đề đô la Netflix 1M).

Nếu bạn tin rằng điều này thuộc về một trang web thay đổi hình ảnh khác, vui lòng di chuyển nó.

Trả lời

1

Tại sao không sử dụng các dự đoán số từ học máy? Trong tham số ví dụ đầu tiên của bạn là các thuộc tính và các mục là các cá thể. Với nó, bạn có thể thử hồi quy tuyến tính hoặc mạng thần kinh hoặc bất kỳ điều gì khác trong vài phút. Sau khi đào tạo, bạn sẽ nhận được phương trình tiếp theo cho ví dụ đầu tiên của bạn (param2 ở đây được đánh dấu là một lớp):

param2 = 0 + 1/2 * param1 

đó là chính xác những gì bạn muốn.

Nếu bạn không chắc chắn rằng mối quan hệ giữa các tham số là tuyến tính, bạn luôn có thể thử các loại hồi quy khác (ANN, SVM, bất kỳ điều gì).

Để bắt đầu sử dụng nhanh Weka. Chuyển đổi dữ liệu của bạn sang CSV, tải nó vào Weka và bắt đầu chơi. Đối với dự đoán bằng số, hãy xem tab "Phân loại".

+0

Bạn nói đúng, vì một vấn đề học máy như vậy có thể là một cách tiếp cận tốt. Tôi sẽ thử weka. Cám ơn –

2

This article bởi Simon Funk mô tả cách sử dụng phương pháp tiếp cận giống như của bạn cho thử thách giải thưởng Netflix; có lẽ đây là những gì bạn đã nghĩ đến khi bạn đề cập đến nó. Không giống như cách tiếp cận của bạn, nó xử lý dữ liệu bị thiếu. Bản chất là thay thế một cách đơn giản sử dụng các phương pháp ma trận để xác định sự phân tách giá trị số ít của ma trận dữ liệu với một vấn đề tối ưu hóa tương đương gần như tự nhiên chiếm nhiều dữ liệu hơn.

+0

thx cho câu trả lời của bạn. Tôi gona có một cái nhìn cẩn thận về nó. Tôi đoán nếu tôi hiểu làm thế nào bạn gần như có thể giải quyết các netflix đó là đủ cho những gì tôi cần phải làm. –

1

Thử thuật toán NIPALS. Đó là phương pháp tiêu chuẩn từ lĩnh vực "Hóa học". Phương pháp PCA của nó được thiết kế đặc biệt để thiếu dữ liệu. Sau đó bạn có thể quay lại dự án điểm số của bạn và tải (t * p ') để lấp đầy khoảng trống theo mô hình dữ liệu. Vẻ đẹp của cách tiếp cận này là bạn không thiên vị dữ liệu bằng cách imputation, bạn chỉ cần sử dụng dữ liệu bạn có. Hãy thử tìm kiếm các bài báo của Herman hoặc Svante Wold, hoặc có những triển khai trong R và Matlab. Rõ ràng là dữ liệu bị thiếu càng ít thì kết quả đáng tin cậy hơn nhưng lại thiếu một cách ngẫu nhiên, bạn có thể có một lượng lớn dữ liệu bị thiếu.

Truyền thuyết là Herman đã phát minh ra thuật toán để xếp hạng ngựa đua ở Mỹ - một vấn đề lớn về dữ liệu bị thiếu (nếu bạn nghĩ về nó, không phải tất cả ngựa đều đáp ứng)!