สูตรที่แท้จริงสำหรับการแก้ปัญหาที่นำเสนอ (วิธีแก้ปัญหาหนึ่งที่เป็นไปได้)
มันเป็นเรื่องตรงไปตรงมาที่จะแก้ปัญหานี้โดยใช้เครื่องมือการเรียนรู้เครื่องที่ฉันโปรดปรานvowpal wabbitซึ่งรองรับคุณสมบัติกำลังสอง (กากบาท) ผ่านทางตัวเลือก-q
พื้นหลัง vowpal wabbit
ก่อนที่เราจะกระโดดเข้าไปดูรายละเอียดการใช้งาน vowpal wabbit เป็นซอฟต์แวร์เรียนรู้เครื่องจักรออนไลน์ที่รวดเร็วและปรับขนาดได้สำหรับการจำแนกและการถดถอย ฉันได้รับอัตราการเรียนรู้ (ฝึกอบรม) ประมาณ 5 ล้านฟีเจอร์ต่อวินาทีบนเดสก์ท็อปของฉันโดยไม่ จำกัด ขนาดข้อมูล (จำนวนตัวอย่าง) เนื่องจากเป็นเครื่องมือการเรียนรู้ออนไลน์ไม่จำเป็นต้องโหลดข้อมูลทั้งหมดลงในหน่วยความจำ มันมีคุณสมบัติที่น่าสนใจอื่น ๆ อีกมากมาย: รองรับอัลกอริทึมการเรียนรู้ที่แตกต่างกัน, ฟังก์ชั่นการสูญเสียที่หลากหลาย, คุณลักษณะที่กระจัดกระจาย, ประเภทคุณลักษณะที่หลากหลายและอื่น ๆ ซึ่งอยู่นอกเหนือขอบเขตของคำถามนี้
นี่คือ 3 ขั้นตอนในการแก้ปัญหาด้วยคำอธิบาย:
ขั้นตอนที่ 0: ดาวน์โหลดและสร้างvowpal wabbit จาก github (ดูหมายเหตุที่ด้านล่างในสภาพแวดล้อมที่รองรับ)
ขั้นตอนที่ 1: เตรียมชุดฝึกอบรมที่แต่ละบรรทัดมีลักษณะดังนี้:
1.0 protein1/protein2|A p1_feature1 p1_feature2 ... |B p2_feature1 ...
...
คำอธิบายของรูปแบบชุดฝึกอบรม:
หมายเลขซ้ายสุด1.0คือป้ายกำกับ (ความแข็งแรงของการโต้ตอบซึ่งอาจเป็นค่าตัวเลขใด ๆ ) สตริงที่สอง ' protein1 / protein2 ' เป็นแท็กที่จะให้อัตลักษณ์ของบรรทัด IOW: "บรรทัดนี้แสดงถึงการมีปฏิสัมพันธ์ระหว่าง protein1 และ protein2" ; มันเป็นตัวเลือกและคุณอาจคิดว่ามันเป็นความคิดเห็น แท็กสตริงนี้ยังสะท้อนในการทำนายจากแบบจำลองเพื่อระบุว่าการทำนายใดเป็นตัวอย่างใด แต่เราไม่ได้คาดการณ์ไว้ที่นี่เราแค่สร้างแบบจำลองและศึกษาแบบจำลองของเรา ถัดไปมาถึงช่องว่างชื่อคุณสมบัติสำหรับ protein1 |A
(เราจำเป็นต้องกำหนดชื่อช่องว่างเพื่อให้เราสามารถข้ามระหว่างช่องว่างชื่อที่แตกต่างกันมันไม่จำเป็นต้องเป็นA
สามารถคำใด ๆ ในความเป็นจริง แต่ตัวอักษรตัวแรกที่มีการแตกต่างกันระหว่างช่องว่างที่ชื่อเพื่อให้เราสามารถข้ามพวกเขาในการเรียกคำสั่ง) ตามด้วยรายการของการป้อนข้อมูลที่ให้บริการสำหรับ p1_...
protein1 สุดท้ายมาชื่อพื้นที่สำหรับโปรตีน 2: |B
ตามด้วยคุณสมบัติชื่อของโปรตีนp2_...
2
หนึ่งในความสวยงามของ vowpal wabbit คือคุณสามารถใช้สตริงตามอำเภอใจสำหรับชื่อฟีเจอร์ (มันจะแฮชมันภายใน แต่คุณไม่สนใจ) ตัวอักษรพิเศษเฉพาะในชุดการฝึกอบรมคือ:
- ช่องว่าง (ชัด)
|
เพื่อป้อนคำนำหน้าคุณสมบัติและชื่อช่องว่างและ
:
เพื่อแยกคุณสมบัติชื่อจากค่าของพวกเขา
:
ไม่ได้ใช้ที่นี่เพราะเราถือว่าทุกชื่อคุณสมบัติโปรตีนหมายถึงบูล (มีชีวิตอยู่) เพื่อให้ค่าของพวกเขาเริ่มต้นกับ1
เขาและพวกเขาไม่จำเป็นต้องมีค่าอย่างชัดเจน
ตอนนี้คุณอาจทำงาน vowpal_wabbit (ชื่อปฏิบัติการvw
) โดย-q AB
อัตโนมัติสร้างคุณลักษณะข้าม (aka แง่ปฏิสัมพันธ์) ระหว่างทั้งคู่เป็นไปได้ของคุณลักษณะที่หนึ่งคุณลักษณะที่ถูกเลือกจากprotein1 (พื้นที่ชื่อเริ่มต้นด้วยA
) และอื่น ๆ จากprotein2 ( ชื่อพื้นที่เริ่มต้นด้วยB
) vowpal_wabbit จะอ่านข้อมูลเรียนรู้และสร้างแบบจำลองที่มีน้ำหนักสำหรับการรวมคุณลักษณะทุกอย่างที่ส่งผลให้เกิดปฏิกิริยาระหว่างคู่ของโปรตีน ที่นี่แทนการทำงานvw
โดยตรงเราจะเรียกใช้ผ่านvw-varinfo
โปรแกรมอรรถประโยชน์ wrapper ซึ่งมาพร้อมกับ vowpal wabbit เป็นขั้นตอนสุดท้ายของเรา vw-varinfo
วิ่งvw
เพื่อสร้างแบบจำลองและทิ้งโมเดลในรูปแบบที่มนุษย์อ่านได้
ขั้นตอนที่ 3:โทรvw-varinfoเช่นนี้:
vw-varinfo -q AB -c --passes 20 your_data_set_file
VW-varinfo จะผ่านตัวเลือกทั้งหมด ( -q ... -c --passes ...
) vw
ตามที่เป็นไป เฉพาะการ-q AB
ข้ามช่องว่างของชื่อสถานที่สองคุณลักษณะเท่านั้นที่จำเป็น ฉันเพิ่มอีกหนึ่งตัวเลือกด้านบน (เรียกใช้การผ่านหลายครั้ง) ซึ่งฉันเชื่อว่าจะให้ผลลัพธ์ที่ดีกว่า
คำสั่งนี้จะเรียก vowpal wabbit ( vw
) เพื่อฝึกอบรมเกี่ยวกับชุดข้อมูลและพิมพ์ผลลัพธ์ที่ฉันเชื่อว่าคุณกำลังมองหา: การโต้ตอบคุณสมบัติทั้งหมดตามลำดับความแข็งแรงและน้ำหนักสัมพัทธ์
ตัวอย่างอินพุตและเอาต์พุต
สมมติว่าอินพุตของคุณprot.dat
มีการโต้ตอบ 3 ทางระหว่าง 3 โปรตีน:
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
นี่เป็นตัวอย่างที่เรียบง่ายมาก vw
ไม่ควรมีปัญหาใด ๆ กับชุดข้อมูลที่มีขนาดใหญ่กว่า (เช่นหลายล้านแถว, คุณสมบัตินับร้อย), นอกจากนี้ฉันยังเปลี่ยนแปลงป้ายกำกับความแข็งแรงของการโต้ตอบในตัวอย่าง หากในกรณีที่การโต้ตอบของคุณเป็นบูลีน "ใช่" หรือ "ไม่" เพียงใช้0
(ไม่มีการโต้ตอบ) หรือ1
(มีปฏิสัมพันธ์อยู่) เป็นฟิลด์ที่ 1 ในแต่ละบรรทัด
วิ่ง:
vw-varinfo -q AB -c --passes 20 prot.dat
จะให้การโต้ตอบที่เป็นไปได้ทั้งหมด (ไม่สนใจชื่อช่องว่างA
และB
ในเอาต์พุต) และน้ำหนักของมัน:
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%
แสดงให้เห็นว่าในข้อมูลนี้ร่วมสมทบที่แข็งแกร่งให้กับการโต้ตอบใด ๆ โดยทั่วไปคือ 1) การปรากฏตัวเพียงของk
คุณลักษณะ 2) k
คุณลักษณะการโต้ตอบกับตัวเอง (สมมติว่าทั้งโปรตีนมี) และ 3) การมีปฏิสัมพันธ์กับk
m
ในขณะที่จุดอ่อนที่สุด (มีส่วนร่วมในเชิงลบต่อการปฏิสัมพันธ์ของโปรตีน) เป็นb
คุณสมบัติที่จับคู่กับm
คุณลักษณะ
นี่คือหน้า HOWTO ใน vw-varinfo
vowpal wabbit สร้างจากซอร์สโค้ด (ดูลิงค์ด้านบน) และทำงานบน Linux (และยูนิกซ์อื่น ๆ ), Mac OS-X และ Windows
HTH