Dirichlet Process

chemoinformaticsにも使えそうなので色々読んでみている。

  • Gaussian processes define a distribution over functions
  • Dirichlet processes define a distribution over distributions

ぼんやりとした入門のそのまた入門の入り口ぐらいには立ったかなって感じ。CRPで遺伝子発現のクラスタリングをやっている論文があったので読む。

ディリクレ分布に関してはこの本見た。

ProductName パターン認識と機械学習 上 - ベイズ理論による統計的予測
C. M. ビショップ
シュプリンガー・ジャパン株式会社 / ¥ 6,825 ()
通常24時間以内に発送

Nonnegative matrix factorization(NMF)でconsensus clustering

NMFを追っかけてたらMetagenes and molecular pattern discovery using matrix factorizationという論文を見つけたので、週末はこの論文を読みながら色々やってみた。NMFの便利なところは元の特徴(この論文の場合は遺伝子発現量)からより少ない任意の特徴量(論文中ではmetagene)に変換できるところであり、さらにそのままクラスターの分割に利用できる。

たとえば2つのmetageneで表現した場合、より発現量の大きいmetageneで分割すれば2つのクラスに分けられる。(QSARだったらdescriptorからmeta discriptorが導かれてそれに基づいてクラス分類ができるでしょう)

続いて、重要なのがクラスの安定性である。要するに最適なクラスタの数はいくつなのかということである。これに対して、この論文ではConsensus Clusteringというリサンプリングと隣接行列(connectivity matrix)を利用する方法をモディファイした方法を使っている。

ここで隣接行列はi番目のサンプルとj番目のサンプルが同じクラスなら1、それ以外なら0である。この行列のn回の平均値をコンセンサスマトリックスとする。コンセンサスマトリックスの値は0-1の間をとり、サンプルi,jが常に同じクラスになる場合は1、常に異なるクラスの場合は0である。フラフラするばあいはその間の値をとる。元の論文のconsensus clusteringアルゴリズムはデータの80%をランダムサンプリングして評価するのに対し、NMFの場合、初期値の行列はランダムな数字にしているので適当にループ(n)をまわすだけでよい。

NMFの実装は集合知プログラミングのものを用い、コンセンサスマトリックスを評価するコードをnumpyを使ってかいた。

import nmf
from numpy import *

def consensus(a,kstart,kend,nloop):
    """ calculate consensus matrix
    """
    (n,m)     = a.shape
    consensus = zeros((kend+1,m,m))
    conn      = zeros((m,m))

    #i = 0
    for j in range(kstart,kend+1):
        connac = zeros((m,m))

        for l in range(nloop):
            #i += 1
            (w,h) = nmf.factorize(a,pc=j)

            conn   = nmfconnectivity(h)
            connac = connac + conn

        consensus[j] = connac / float(nloop)
    return consensus

def nmfconnectivity(h):
    """ calculate connective matrix
    """
    (k,m) = h.shape

    ar = []
    for i in range(m):
        max_i = 0
        max_v = 0
        for index,v in enumerate(h[:,i]):
            if v > max_v :
                max_v = v
                max_i = index
        ar.append(max_i)

    mat1 = tile(matrix(ar),(m,1))
    mat2 = tile(matrix(ar).T,(1,m))

    return array(mat1 == mat2, dtype=int)

これをcc.pyという名前で保存しテスト用のセットを適当に用意して実行。

from numpy import *
from pylab import *
import cc

kstart = 2
kend = 4

testarray = array([[0,0,1,1,1,0,0,0,0],
                   [0,0,1,1,0,0,0,0,0],
                   [1,1,0,0,1,1,0,0,1],
                   [1,1,0,0,0,0,0,1,0],
                   [1,1,0,1,0,0,0,0,0],
                   [0,0,0,0,0,1,1,1,1],
                   [1,0,0,0,0,1,1,1,0],
                   [0,0,0,0,0,0,1,1,1],
                   [0,0,0,1,0,1,1,1,1]
                   ])

cons = cc.consensus(testarray.T,kstart,kend+1,20)


for i in range(kstart,kend+1):
    pcolormesh(cons[i])
    if i == kstart:
        colorbar()
    savefig('ccr' + str(i) + '.png')

見ればすぐ分かるが3つにクラスタリングできそうなマトリックス。

結果

2クラスタで分けた場合。

2 clusters

3クラスタで分けた場合

3 clusters

4クラスタで分けた場合

4 clusters

もうちょっと実際のデータでやってみないとあれだなぁ。それとConsensus ClusteringのCDFプロットみたいなのが欲しいところ。

参考書籍

ProductName 集合知プログラミング
Toby Segaran
オライリージャパン / ¥ 3,570 ()
通常24時間以内に発送

参考論文

「インタラクションデザインの教科書」を読んだ

今の仕事で、data preparationのための効率的な仕組み(インタラクティブなサービス)が必要だろうなぁと感じているので、8章のサービスのデザインが参考になった。

ProductName インタラクションデザインの教科書 (DESIGN IT! BOOKS)
Dan Saffer
毎日コミュニケーションズ / ¥ 2,940 ()
通常24時間以内に発送

デザイニング・インターフェースも併せて読むとおもしろい。

ProductName デザイニング・インターフェース ―パターンによる実践的インタラクションデザイン
Jenifer Tidwell
オライリー・ジャパン / ¥ 3,990 ()
通常24時間以内に発送

Kullback-Leibler divergenceでNMFってのがイメージできない

NARのWeb Server issueを眺めてたらBioNMFというサービスをみつけた(SOAPでアクセスもできるようだ)。

Nonnegative matrix factorization(NMF)に関しては集合知プログラミングに書いてあるし、コード量も多くないので自分で書いたほうが自由に使えて良いような気もするが。

ProductName 集合知プログラミング
Toby Segaran
オライリージャパン / ¥ 3,570 ()
通常24時間以内に発送

ところで、参考にあったpdfによると、ユークリッド距離の他にKullback-Leibler divergenceでの求めかたも書いてあったんだけど、これってどういう場合に使うといいのかいまいちわからん。

なんか具体的な適用事例はないのかなぁ。

Automated Molecular Mechanics Optimization tool

AMMOSというinduced fitを考慮したドッキングツールがopen sourceででるそうです。

AMMOS: Automated Molecular Mechanics Optimization tool for in silico Screening

ダウンロードできるようになったら試してみよう。DUDみたいなドッキングシミュレーションのベンチマーク用のデータベースもそろってきてるし、そろそろ今時のインターフェースで使いやすいドッキングシミュレーションツールのプロジェクトなど立ち上がりそうな気もしますが(もうなにか動いてるのかな)。

MOMはGFP(ノーベル賞記念?)

GFPは結晶構造がいくつか取られている。

RCSBのニュースレター2003年のMolecule of the monthにあるよって出てたので。

GFP

アミノ酸だけで蛍光発色するってのが凄いよな(ポルフィリンとか遷移金属系のリガンドが入ってないってのが)

そういやkaedeも面白いよなぁ。

「サイエンス・ビジネスの挑戦」を読んだ

「サイエンス・ビジネスの挑戦 バイオ産業の失敗の本質を検証する」の読書メモをみたら気になったので読んだ。

ProductName サイエンス・ビジネスの挑戦 バイオ産業の失敗の本質を検証する
ゲイリー・P・ピサノ
日経BP社 / ¥ 2,310 ()
通常24時間以内に発送

  • 人体を一つのシステム、医薬品をそのシステムを構成する部品と考えてみよう。人間の生物学的仕組みは、極めて複雑な上に、インテグラル型の性格が非常に強い。しかも、そのシステムはすべてあらかじめ決まっている。新薬開発に関わる科学者に、このシステムをモジュラー型に変える力はない。

  • (コンビケムへの期待に対して)生理活性をもつ化合物の構造上の特性に関する化学者の知識が新薬開発のプロセスに欠かせないことが改めて明らかになった

情報の非対称性

情報の非対称性とは、売り手と買い手の間に情報量の格差が存在することである。このギャップが大きいほど知的財産の価値などについて双方が合意に達するのが難しい。


特に情報の非対称性に関してはレイヤーや業種に関わらず常につきまとう問題ですな。他には製薬が学際領域(且つビジネス)という業界なので現場にしか分からない感覚っていう部分において本書の主張とちょっと違うよなぁという部分があった。特にモジュラー、インテグラルに関していえば、技術はもっとインテグラルよりだ。つまり、技術は選択肢の一つに過ぎないし、やりたい実験に適合するかどうかで柔軟に選択しているので技術そのものに過度な期待をするわけではない(そこらはアナリストとは違ったところかと)

iPSの本を読んだ

午前中はちょっと時間が空いてたのでなんか軽い本でもと、適当に読んでない本のなかからすぐ読めそうなものを引っ張りだしてきた。

ProductName iPS細胞ができた!―ひろがる人類の夢
山中 伸弥,畑中 正一
集英社 / ¥ 1,155 ()
通常24時間以内に発送

いわゆる対談。言葉使いとかみると、わりとそのままの発言を文にしたのかな?。わかるひとじゃないとわからない対話が盛り込まれてるわりには、注釈があまりついてないのでそう感じたけど、読み物として単純に面白い。

が、俗っぽい名前だけじゃなくて、オフィシャルシンボルとかRefseqとかへのなんらかの参照は用意すべきだろう。遺伝子関連シノニム多すぎ。といっても、一意なシンボル振る取り組みも難しいんだろうなー(よくわかります)

教えてgooにもあった

個々の遺伝子のそれっぽい機能(の文字表現)と表現系(の文字表現)をつなぐためには層化して組み上げていく方向が正しいいのかなぁ?なんてことを考えた時期も僕にもありました。だってデータベース集めても表現型との間には隔たりがありすぎじゃん。 と思う一方、遺伝子発現解析やったりとか、ドッキングシミュレーションとかやってると、生体はなんてよく制御されているだ!と感心させられることもあり、時間軸さえうまくとれば、モデル化なんか結構うまくいくんじゃないの?なんて思うこともあるわけで、、、、、

状態の巻き戻りが継続っぽい仕組みだったら面白かろうと思った。状態をもとの方向に辿るってのは結構大変だからなぁ。

あと、内容とは全然関係ないけど、トカゲはシッポ切ると骨は再生されないがイモリは手を切ったら骨まで生えるというまめ知識を得た。

ライフサイエンス統合DBのこと

PNEのバックナンバーが探せるってのが便利。早速自分の書いたやつを検索して「おーあるじゃん」とかやってみたり。

あと、OpenIDサーバーが立っていてなんじゃ?と思ってたら、研究開発創作日誌に書いてあった。

でも、IDの使い回し以外に他にもなんか考えているんだろうか?気になる。

AnnoCPANの論文版みたいなのできたらええかもしれんなぁといつも思うけど、OpenIDとか組み合わせるともっと面白いかもしれんなぁ。

YAPCのトーク聴いとけばよかったなぁ。

というわけでいまからニコニコで見る

追記 08.06.03

AnnoCPANはCPANのPODにアノテーションつけられるサービスです。

論文もああいう風にパラグラフとかのもっと細かい単位でアノテーションつけたりできればよいんではなかろうかと思ってます。

IFは雑誌のおおざっぱな指標にしかならなくて、個々の記事の質はやっぱまちまちだからなーなんて思ったりしてるので、なんか適当にアイデンティティを保証さえできれば、どういう論文にどういうアノテーションをつけてるかとかで(アノテーター自体の)クオリティとか把握しやすいと思うんですよね。

あと、そういう場合にpagerank的なやり方でなんかファクター作れんのかなぁとかそういうことに興味があったりとか。

python magazine

そういえばpython magazineの最新号にbiopythonの特集が載ってたので買って読んだんだけど、なんていうか入門的な内容でいまいち楽しめなかった。

むしろpytableのほうが面白かった。pylabなんかと連携させて使うのがよいらしい。自分でオリジナルな計算かけたときのフォーマットとして使ってみようかな。

Next Page