Tìm các tính năng tốt nhất trong các mô hình tương tác


13

Tôi có danh sách các protein với các giá trị tính năng của chúng. Một bảng mẫu trông như thế này:

...............Feature1...Feature2...Feature3...Feature4  
Protein1  
Protein2  
Protein3  
Protein4  

Hàng là protein và cột là tính năng.

Tôi cũng có một danh sách các protein tương tác tốt; ví dụ

Protein3, Protein4  
Protein1, Protein2  
Protein4, Protein1  

Vấn đề : Để phân tích sơ bộ tôi muốn biết tính năng nào đóng góp nhiều nhất cho tương tác protein.

Tôi hiểu rằng thông thường cây quyết định có thể được sử dụng để có được tính năng quan trọng nhất dựa trên entropy, nhưng tôi không chắc làm thế nào để mở rộng nó thành các cặp protein (tức là tương tác). Có một phương pháp cho mục đích như vậy?


Hãy cho tôi biết nếu tôi hiểu đúng về bạn: bạn có cường độ tương tác cho bất kỳ cặp protein nào (ví dụ: bằng 0 nếu các protein không tương tác), và sau đó bạn muốn có một vectơ các tính năng có giá trị tương quan cao Với sức mạnh tương tác? Hay nói cách khác, điều này sẽ cho phép bạn dự đoán cường độ tương tác giữa các protein?
DSign

Câu trả lời:


25

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: |Btiế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 1và 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 vwtrực tiếp, chúng tôi sẽ chạy nó thông qua vw-varinfotiệ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-varinfochạ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 ABvượ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. vwkhô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 ABtrong đầ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 ktính năng, 2) ktính năng tương tác với chính nó (giả sử cả hai protein đều có) và 3) ktươ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à btính năng được kết hợp với mtí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


Điều đó có nghĩa trực tiếp ngụ ý rằng việc cắt bớt các tương tác yếu sẽ cải thiện độ chính xác của mô hình?
matt

Không cần thiết. Độ chính xác thường sẽ tăng lên khi có nhiều tính năng để học hỏi. Tuy nhiên, nếu các tính năng trong tiếng ồn thực tế, hoặc quá hiếm để khái quát hóa, chúng có thể. Hầu hết các mô hình thực tế có một số thành phần lỗi. Nhiều dữ liệu có thể dẫn đến độ tin cậy cao hơn về độ chính xác của mô hình.
thân

1

Các mạng lưới tương tác protein có thể được biểu diễn bằng các biểu đồ vô hướng, với các protein tạo thành các nút và tương tác của chúng với các cạnh. Nếu tương tác protein là một hiện tượng nhị phân, các cạnh cũng là nhị phân (không hoặc một), nếu không bạn có thể sử dụng một số thực. Bạn có thể biểu diễn số lượng biểu đồ này dưới dạng ma trận vuông và đặc biệt là đối xứng. Để tìm các tính năng quan trọng nhất, bạn có thể giữ lại các tính năng có hình chiếu lớn nhất dọc theo các hàm riêng của ma trận tương tác.


Biểu đồ có thể không phải là nhị phân .. vì một protein có thể tương tác với nhiều hơn một protein. Có một phần mở rộng cho nhiều cạnh?
Anish

Đó không phải là ý của nhị phân. Câu hỏi là liệu bạn có muốn nắm bắt cường độ tương tác hay không, liệu nó có đủ để mô hình hóa sự hiện diện của nó hay không. Chắc chắn, mô hình đồ thị có thể chiếm tương tác giữa bất kỳ cặp protein nào.
Emre

Hmm .. Tôi giả sử rằng khi bạn yêu cầu tôi tạo một ma trận vuông cho các tương tác protein, các giá trị trong ma trận biểu thị số lượng tương tác giữa các protein. Nhưng, tôi không thấy nơi chúng tôi đang sử dụng các tính năng ở đây. bạn có thể giải thích về điều đó không?
Anish

Các hàm riêng là sự kết hợp tuyến tính của các protein trong không gian đặc trưng.
Emre
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.