Có thư viện nào có sẵn cho các phương thức giống GIỎI bằng cách sử dụng các dự đoán và phản hồi thưa thớt không?


11

Tôi đang làm việc với một số tập dữ liệu lớn bằng gói gbm trong R. Cả ma trận dự đoán và vectơ phản hồi của tôi đều khá thưa thớt (tức là hầu hết các mục đều bằng 0). Tôi đã hy vọng xây dựng cây quyết định bằng thuật toán tận dụng sự thưa thớt này, như đã được thực hiện ở đây ). Trong bài báo đó, như trong tình huống của tôi, hầu hết các mục chỉ có một vài trong số nhiều tính năng có thể, vì vậy chúng có thể tránh được nhiều tính toán lãng phí bằng cách giả sử rằng các mục của chúng thiếu một tính năng nhất định trừ khi dữ liệu nói khác đi. Hy vọng của tôi là tôi có thể có được một sự tăng tốc tương tự bằng cách sử dụng loại thuật toán này (và sau đó gói một thuật toán tăng cường xung quanh nó để cải thiện độ chính xác dự đoán của tôi).

Vì dường như họ không xuất bản mã của họ, tôi đã tự hỏi liệu có bất kỳ gói hoặc thư viện nguồn mở nào (bằng bất kỳ ngôn ngữ nào) được tối ưu hóa cho trường hợp này không. Lý tưởng nhất, tôi muốn thứ gì đó có thể lấy một ma trận thưa thớt trực tiếp từ Matrixgói của R , nhưng tôi sẽ lấy những gì tôi có thể nhận được.

Tôi đã nhìn xung quanh và có vẻ như những thứ này nên ở ngoài đó:

  • Các nhà hóa học dường như gặp phải vấn đề này rất nhiều (bài báo tôi liên kết ở trên là về việc tìm kiếm các hợp chất thuốc mới), nhưng các triển khai tôi có thể tìm thấy là độc quyền hoặc chuyên môn cao để phân tích hóa học. Tuy nhiên, một trong số chúng có thể được tái mục đích.

  • Phân loại tài liệu dường như cũng là một lĩnh vực mà việc học từ các không gian đặc trưng thưa thớt là hữu ích (hầu hết các tài liệu không chứa hầu hết các từ). Ví dụ, có một tài liệu tham khảo xiên cho việc triển khai thưa thớt C4.5 (thuật toán giống GIỎI) trong bài viết này , nhưng không có mã.

  • Theo danh sách gửi thư , WEKA có thể chấp nhận dữ liệu thưa thớt, nhưng không giống như phương pháp trong bài báo tôi đã liên kết ở trên, WEKA không được tối ưu hóa để thực sự tận dụng lợi thế của nó để tránh lãng phí chu kỳ CPU.

Cảm ơn trước!


2
Không phải R, nhưng Python scikits.learn có một số hỗ trợ ngày càng tăng cho ma trận thưa thớt.
chl

@ ch1 cảm ơn. Có vẻ như họ chưa thêm phương thức cây nào. Ai đó đang thực hiện triển khai , nhưng tôi không chắc liệu nó có thể sử dụng dữ liệu thưa thớt hay không. Mặc dù vậy, tôi chắc chắn sẽ ghi nhớ các phương pháp SVM thưa thớt!
David J. Harris

Khi bạn nói "giống như GIỎI", bạn có đặc biệt muốn cây quyết định hoặc bất kỳ loại mô hình dự đoán nào không?
Michael McGowan

@Michael - Tôi thích cây, vì tôi sẽ cho chúng ăn một quy trình thúc đẩy và chúng có phương sai cao.
David J. Harris

2
Tôi không biết về một mô hình cây, nhưng glmnete1071::svmcả hai đều hỗ trợ Matrixcác đối tượng thưa thớt . GAMboostGLMboost(từ gói GAMboost) cũng có thể.
Zach

Câu trả lời:


2

Tôi muốn thấy một điểm chuẩn về việc triển khai thưa thớt của họ so với các triển khai GIỎ HÀNG hiện đại được sử dụng trong rf. Bài báo đó khá cũ về những tiến bộ trong lĩnh vực này và tôi sẽ ngạc nhiên nếu nó vẫn cung cấp tốc độ đáng kể.

Một phần lý do là việc sử dụng thuật toán sắp xếp thông minh như Quicksort trong tìm kiếm phân tách có thể cung cấp hiệu suất gần O (n) cho các tính năng gần như không đổi (bao gồm cả các tính năng thưa thớt). Việc triển khai nhanh cũng theo dõi khi một tính năng trở nên không đổi trong một nhánh của cây và không còn được kiểm tra nữa. Các biểu diễn tính năng dày đặc cung cấp tra cứu nhanh theo kiểu thân thiện với bộ đệm cpu, do đó bạn cần một biểu diễn thưa thớt thực sự thông minh để giành chiến thắng trong các chu kỳ cpu.

Điều này được thảo luận ở đây , ở đây , ở đây .

Tôi thực sự đã triển khai biểu diễn dữ liệu thưa thớt tại một điểm trong gói rf CloudForest của mình nhưng thấy nó chậm hơn sau đó là sự biểu hiện dày đặc của dữ liệu và từ bỏ mặc dù nó mang lại một số lợi thế về bộ nhớ.

Đề nghị của tôi sẽ là thử scikit learn hoặc cloudforest được xây dựng để tăng cường công cụ và xem nó có đủ nhanh không. Cả hai có thể được mở rộng với tiêu chí tăng tùy chỉnh nếu bạn muốn làm một cái gì đó không chuẩn. (Tôi thực sự đã viết cloudforest ban đầu để làm việc với các tập dữ liệu di truyền lớn, có chiều cao rất giống với những gì bạn đang mô tả).


1

Có lẽ có một chút cơ hội cho bất kỳ mã nào sẽ tận dụng lợi thế đó - bạn muốn tự mình viết một cái gì đó.
Tuy nhiên, tùy chọn khác là chuyển đổi dữ liệu của bạn để giảm kích thước dữ liệu của bạn loại bỏ thông tin dư thừa. Thật khó để nói làm thế nào mà không có thông tin về dữ liệu của bạn, nhưng có lẽ bạn có thể hợp nhất một số tính năng mà bạn biết không trùng lặp, các phần PCA của nó hoặc thay đổi đại diện của một số mô tả? Ngoài ra, nếu bạn nói rằng phản hồi của bạn cũng thưa thớt, có thể hợp lý khi hạ thấp các đối tượng có 0 trong phản hồi?


Cảm ơn vi đa trả lơi. Downsampling nghe có vẻ là một ý tưởng thú vị. Hiện tại, tôi đang giảm trọng lượng một số khía cạnh của dữ liệu vì những lý do khác, nhưng đó cũng có thể là một ý tưởng tốt. Nhưng tại sao bạn nói mã cho điều này là không thể tồn tại? Tôi đã liên kết với một bài báo từ 12 năm trước dường như đã giải quyết vấn đề tương tự.
David J. Harris

@David Tóm lại, tôi cảm thấy điều này không có ý nghĩa - đây là một vấn đề "câu hỏi sai". Độ thưa thớt cho thấy dữ liệu ở dạng cực kỳ tối ưu và cách tiếp cận hiệu quả hơn nhiều là cố gắng chuyển đổi nó. Bài báo bạn liên kết là một vấn đề khác.

Tôi sợ không hiểu những gì bạn nói. Chuyển đổi hình thức của dữ liệu là chính xác những gì tôi muốn làm, và theo như tôi có thể nói, đó chính xác là những gì bài báo này làm. Họ không muốn liệt kê tất cả các tính năng mà mỗi hóa chất thiếu, chỉ có những tính năng mà nó có. Điều này có ý nghĩa trong tình huống của họ bởi vì hầu hết các hóa chất thiếu hầu hết các tính năng, giống như trong trường hợp của tôi. Vì vậy, họ đã chuyển đổi các tính năng của họ thành một ma trận thưa thớt và sau đó thuật toán phân vùng đệ quy của họ trên ma trận thưa thớt đó trực tiếp. Tôi đang tìm kiếm các cách nguồn mở để làm điều tương tự với dữ liệu của mình. Tôi đang thiếu gì? Cảm ơn
David J. Harris

@David, tôi nghĩ rằng quan điểm của mbq là mã hóa lớn 1 (ví dụ: trang web / số nhận dạng khách hàng, v.v.) hoặc danh sách các hóa chất hiện tại) thường là một đại diện rất tệ cho việc học. Bạn nên thay đổi thành "tính năng", ví dụ: đối với một trang web, đó có thể là phân loại: cửa hàng / tin tức / blog thể thao / công nghệ, v.v.
seanv507

1

Bạn đã xem caretgói trong R? Nó cung cấp một giao diện giúp sử dụng nhiều mô hình dễ dàng hơn, bao gồm một số mô hình để phân vùng đệ quy như rpart, ctreectree2.


Tôi quen thuộc với các gói / chức năng đó và không có gói nào hoạt động trên dữ liệu thưa thớt như tôi có thể nói.
David J. Harris

1
hỗ trợ chăm sóc cho Matrixcác đối tượng sẽ rất tuyệt vời, nhưng hiện tại nó không tồn tại. Mọi thứ bị ép buộc vào một data.frame.
Zach

Bạn có thể thử gửi email cho nhà phát triển và hỏi anh ta về điều này. Tôi đã gửi email cho anh ấy về một cái gì đó khác và anh ấy đã cung cấp một câu trả lời hữu ích - max.kuhn [at] pfizer.com
paul
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.