statgenetJimu / ZDDandDiscreteDataStructure

0 stars 0 forks source link

アイテムセットマイニングにモンテカルロ・パーミュテーションテスト #6

Open statgenetJimu opened 8 years ago

statgenetJimu commented 8 years ago

多マーカー保有情報に加えて、フェノタイプ情報を追加することで、ZDD::lcm()とZDD除算によって、フェノタイプ=1と併存する頻出アイテムセットの集合がその重み付きで得られる。 これをフェノタイプラベルをランダムシャッフリングして繰り返せば、ラベルを付け直したときのフェノタイプ=1併存アイテムセット集合が得られる。

今、マーカーの組み合わせが「有意にフェノタイプと関連している」というのは、本当のフェノタイプ=1のときには頻出するが、それ以外のラベル付けの場合には、頻出しない(観測フェノタイプの場合と同じがそれ未満の頻出程度である)ことによって確認できる。 あるマーカー組み合わせの頻出程度は、「オリジナルフェノタイプ由来の除算後ZDD」と「シャッフリングフェノタイプ由来の除算後ZDD」との差を取って、係数が正であることを確認すればよい。この係数が正の割合がパーミュテーション回数のうちごく少なければ、「それっぽい」と言えるのでは… 大規模だとそれなりに大変(ZDD作成も大変なら、モンテカルロ回数も大変)だが、オリゴ・マーカー(局所LD領域)とかなら、ありなのではないかと思うので、やってみる。

skoyama427 commented 8 years ago

Rでトランザクションファイルを作成してrubyに持っていく方法をまず考えましたが(perm01.Rとperm01.rb)、どうせなら(スピードを考えても) ruby上でやればいいじゃん、って思ってruby上でフェノタイプ・ハプロタイプ行列を作ってfreqpatMで頻出集合を取ってくる(perm02.rb)とこの頻出アイテム集合には量的情報が含まれておりませんでした。。。

大量にトランザクションファイルを作って読み込んで解析する方向で進めてみます。

statgenetJimu commented 8 years ago

「rubyで重み計算ができない」と言うよりは、重み計算を含むアイテムセットマイニングには、LCMというアルゴリズムがあって、nysolのzddでは、LCMアルゴリズムを使っている関数がlcm()だけだ、ということだと思います。 では、LCMとは何か、と言えば、http://research.nii.ac.jp/~uno/papers/0409DM.pdf であって、zddでLCMを使うとはどういうことか、というと、アイテムセットを列挙するのにLCMを使うが、それがたくさんになりすぎたときにZDD構造で把持するのがよいので、LCMアルゴリズムを回しながらZDD構築をします、ということですね。

なので、ファイル→LCM→ZDDとする必要があるということと思います。

skoyama427 commented 8 years ago

よくわかりました。。。 とりあえず perm02.rbを改変してパーミュテーションを実装してみました。 1. テストから適当な数のマーカーを選び出せる最小サポート値を、パーミュテーション後のデータはクリアできることがほとんどないようです。ここで、パーミュテーション後の最小サポートを緩くするとより保守的になって良いのでしょうか。 2. lcmを用いる際、FQだと同じ人が何回も数えられているような気がします。頻出パターンがより強調されるとは思いますが・・・。計算負荷も多いと思います。MQだとこのあたりが解決するようにも思うのですが、いかがでしょう?

skoyama427 commented 8 years ago

すみませんperm02.rbですが、実行ファイルのあるディレクトリにpermdataというディレクトリがないと実行できません。ここに各種データファイルを書き出しています。 mkdir $HOME/ZDDandDiscreteDataStructure/python/src/permdata 上記コマンドを発行の上実行してください。

skoyama427 commented 8 years ago

間違えてクローズしてしまいました。