提示された問題を解決するための実際のレシピ(1つの可能な解決策)
私のお気に入りの機械学習ツールであるvowpal wabbitを使用して、この問題を簡単に解決できます。vowpalwabbitは、-qオプションで2次(クロス)機能をサポートします。
vowpalウサギの背景
使用方法の詳細に進む前に。vowpal wabbitは、分類と回帰の両方に対応した、高速でスケーラブルなオンライン機械学習ソフトウェアです。オンライン学習ツールとして完全なデータをメモリにロードする必要がないため、データサイズ(例の数)に制限なく、デスクトップで毎秒約500万の機能の学習(トレーニング)速度が得られます。他の多くの魅力的な機能があります。異なる学習アルゴリズム、複数の損失関数、スパース機能、混合機能タイプのサポートなど、この質問の範囲を超えています。
解説付きで問題を解決するための3つの手順を次に示します。
ステップ0:githubからvowpal wabbitを ダウンロードしてビルドします (サポートされている環境の下部にある注意を参照)
ステップ1: 各行が次のようなトレーニングセットを準備します。
1.0 protein1/protein2|A p1_feature1 p1_feature2 ... |B p2_feature1 ...
...
トレーニングセット形式の説明:
左端の数値1.0はラベル(相互作用の強さ、任意の数値)、2番目の文字列 ' protein1 / protein2 'は行にアイデンティティを与えるタグ、IOW: "この行はprotein1とprotein2 "; これはオプションであり、コメントと考えることができます。このタグ文字列は、どの予測がどの例に属するのかを識別するために、モデルからの予測にも反映されますが、ここでは予測していません。モデルをモデル化して調査しているだけです。次に、protein1の入力フィーチャの名前空間があります|A
(名前空間を定義する必要があるため、異なる名前空間間を移動できます。A
、実際には任意の単語を使用できますが、最初の文字は名前空間間で異なる必要があるため、コマンド呼び出しで名前空間と交差させることができます)、その後にprotein1の入力フィーチャのリストが続きp1_...
ます。最後にprotein2の名前空間があります。|B
その後にprotein2 の機能名が続きp2_...
ます。
vowpal wabbitの美しさの1つは、機能名に任意の文字列を使用できることです(内部的にハッシュしますが、気にしません)。トレーニングセットに含まれる特殊な文字は次のとおりです。
- スペース(明らかに)
|
、入力機能と名前空間の接頭辞、および
:
値から機能名を分離する
:
我々は、すべてのタンパク質の機能名は、ブール値(存在)にそれらの値のデフォルトはそれほどを表し想定しているため、ここでは使用されていない1
と、彼らは明示的な値を必要としません。
これでvowpal_wabbit(実行可能ファイル名vw
)を実行し-q AB
て、1つの機能がprotein1(名前空間で始まるA
)とprotein2(B
)で始まる名前空間。vowpal_wabbitは、データを読み取り、学習して、タンパク質のペア間で何らかの相互作用をもたらすすべての機能の組み合わせの重みを持つモデルを作成します。ここでは、vw
直接実行する代わりにvw-varinfo
、最後のステップとして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
2つの機能の名前空間を横断するためにのみ必要です。上記にもう1つのオプションを追加し(複数パスを実行)、より良い結果が得られると思います。
このコマンドは、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
(相互作用が存在する)を使用します。
ランニング:
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
特徴です。
これはvw-varinfoのHOWTOページです
vowpal wabbitはソース(上記のリンクを参照)からビルドされ、Linux(および他のUNIX)、Mac OS-X、およびWindowsで実行されます。
HTH