Công thức thực tế để giải quyết vấn đề được trình bày (một giải pháp có thể)
Thật đơn giản để giải quyết vấn đề này bằng cách sử dụng công cụ học máy yêu thích của tôi, vowpal wợi hỗ trợ các tính năng bậc hai (chéo) thông qua tùy chọn -q của nó .
nền wow vowpal
Trước khi chúng tôi nhảy vào chi tiết sử dụng. vowpal wợi là một phần mềm học máy trực tuyến nhanh và có thể mở rộng cho cả phân loại và hồi quy. Tôi nhận được tốc độ học tập (đào tạo) khoảng 5 triệu tính năng mỗi giây trên máy tính để bàn của mình mà không giới hạn kích thước dữ liệu (số ví dụ) vì là một công cụ học tập trực tuyến, nó không yêu cầu tải dữ liệu đầy đủ vào bộ nhớ. Nó có nhiều tính năng hấp dẫn khác: hỗ trợ các thuật toán học tập khác nhau, nhiều hàm mất mát, các tính năng thưa thớt, các loại tính năng hỗn hợp, v.v., nằm ngoài phạm vi của câu hỏi này.
Dưới đây là 3 bước để giải quyết vấn đề bằng bình luận:
Bước 0: Tải xuống và xây dựng wow vowpal từ github (xem ghi chú ở dưới cùng trên các môi trường được hỗ trợ)
Bước 1: Chuẩn bị một bộ huấn luyện trong đó mỗi dòng trông như thế này:
1.0 protein1/protein2|A p1_feature1 p1_feature2 ... |B p2_feature1 ...
...
giải thích về định dạng tập huấn luyện:
Số ngoài cùng bên trái, 1.0 , là nhãn (cường độ tương tác, có thể là bất kỳ giá trị số nào), chuỗi thứ hai ' protein1 / protein2 ' là thẻ để nhận dạng dòng, IOW: "dòng này biểu thị sự tương tác giữa protein1 và protein2 "; Nó là tùy chọn, và bạn có thể nghĩ về nó như một bình luận. Chuỗi thẻ này cũng được lặp lại trong các dự đoán từ các mô hình để xác định dự đoán nào thuộc về ví dụ nào, nhưng chúng tôi không dự đoán ở đây, chúng tôi chỉ mô hình hóa và nghiên cứu mô hình của chúng tôi. Tiếp đến là không gian tên tính năng đầu vào cho protein1 |A
(chúng ta cần xác định một không gian tên để chúng ta có thể giao thoa giữa các không gian tên khác nhau, không nhất thiết phải làA
, có thể là bất kỳ từ nào trong thực tế, nhưng chữ cái đầu tiên phải khác nhau giữa các không gian tên để chúng ta có thể gạch chéo chúng trong lệnh gọi) theo sau là danh sách các tính năng đầu vào cho protein1 p1_...
. Cuối cùng là không gian tên cho protein2: |B
tiếp theo là tên đặc trưng của protein2 p2_...
.
Một trong những nét đẹp của wow vowpal là bạn có thể sử dụng các chuỗi tùy ý cho các tên tính năng (nó sẽ băm chúng trong nội bộ, nhưng bạn không quan tâm). Các ký tự đặc biệt duy nhất trong tập huấn luyện là:
- không gian (rõ ràng)
|
, để tiền tố các tính năng đầu vào và không gian tên, và
:
để tách tên tính năng khỏi giá trị của chúng
Cái :
này không được sử dụng ở đây, bởi vì chúng tôi giả sử mọi tên tính năng protein đại diện cho boolean (sự tồn tại) để các giá trị của chúng được mặc định 1
và chúng không cần các giá trị rõ ràng.
Bây giờ bạn có thể chạy vowpal_wợi (tên thực thi là vw
) -q AB
để tự động tạo các tính năng chéo (còn gọi là thuật ngữ tương tác) giữa tất cả các cặp tính năng có thể có trong đó một tính năng được chọn từ protein1 (không gian tên bắt đầu A
) và khác từ protein2 ( tên không gian bắt đầu bằng B
). vowpal_wợi sẽ đọc dữ liệu, tìm hiểu và tạo một mô hình có trọng số cho mọi kết hợp tính năng dẫn đến một số tương tác giữa các cặp protein. Ở đây, thay vì chạy vw
trực tiếp, chúng tôi sẽ chạy nó thông qua vw-varinfo
tiện ích trình bao bọc, đi kèm với vowpal w thôi, là bước cuối cùng của chúng tôi. vw-varinfo
chạy vw
để tạo mô hình và bỏ mô hình ở dạng người có thể đọc được.
Bước 3: gọi vw-varinfo như thế này:
vw-varinfo -q AB -c --passes 20 your_data_set_file
vw-varinfo sẽ vượt qua tất cả các tùy chọn ( -q ... -c --passes ...
) như hiện trạng vw
. Chỉ có việc -q AB
vượt qua hai không gian tên tính năng là cần thiết. Tôi đã thêm một tùy chọn ở trên (chạy nhiều lượt), mà tôi tin rằng sẽ cho kết quả tốt hơn.
Lệnh này sẽ gọi vowpal wợi ( vw
) để huấn luyện tập dữ liệu và in kết quả đầu ra mà tôi tin rằng bạn đang tìm kiếm: tất cả các tương tác tính năng theo thứ tự độ mạnh và trọng lượng tương đối của chúng.
Ví dụ đầu vào và đầu ra
Giả sử đầu vào của bạn prot.dat
, bao gồm tương tác 3 chiều giữa 3 protein:
1.0 protein1/protein2|A a b |B k m
0.6 protein2/protein3|A k m |B b c d
2.2 protein1/protein3|A a b |B b c d
Đây là một ví dụ rất tối giản. vw
không nên có bất kỳ vấn đề nào với các tập dữ liệu lớn hơn nhiều (ví dụ: hàng triệu hàng, hàng trăm tính năng), ngoài ra, tôi đã thay đổi các nhãn cường độ tương tác trong các ví dụ. Nếu trong trường hợp của bạn, tương tác là "có" hoặc "không" boolean, chỉ cần sử dụng 0
(không có tương tác) hoặc 1
(tương tác tồn tại) làm trường thứ 1 trong mỗi dòng.
Đang chạy:
vw-varinfo -q AB -c --passes 20 prot.dat
Sẽ mang lại tất cả các tương tác có thể (bỏ qua không gian tên A
và B
trong đầu ra) và trọng số của chúng:
FeatureName HashVal MinVal MaxVal Weight RelScore
A^k 220268 0.00 1.00 +0.3804 100.00%
A^k^B^k 254241 0.00 0.00 +0.3804 100.00%
A^k^B^m 93047 0.00 0.00 +0.3804 100.00%
B^k 178789 0.00 1.00 +0.1011 26.58%
B^m 17595 0.00 1.00 +0.1011 26.58%
[... trimmed for brevity ...]
A^m^B^m 141879 0.00 0.00 +0.0000 0.00%
Constant 116060 0.00 0.00 +0.1515 0.00%
A^b 139167 0.00 1.00 -0.0641 -16.86%
A^b^B^k 204424 0.00 0.00 -0.1233 -32.43%
A^b^B^m 43230 0.00 0.00 -0.1233 -32.43%
Cho thấy trong dữ liệu này, những người đóng góp mạnh nhất cho bất kỳ tương tác nào nói chung là 1) sự hiện diện đơn thuần của k
tính năng, 2) k
tính năng tương tác với chính nó (giả sử cả hai protein đều có) và 3) k
tương tác với nhau m
. trong khi yếu nhất (đóng góp tiêu cực vào tương tác protein) là b
tính năng được kết hợp với m
tính năng.
Đây là trang HOWTO trên vw-varinfo
vowpal wmus xây dựng từ nguồn (xem liên kết ở trên) và chạy trên Linux (và có thể cả các bản phối khác), Mac OS-X và Windows.
HTH