次回のMishima.sykは5/28の予定です

昨晩の(遅すぎる)新年会できまりました。

内容はscikit-learnのハンズオンがメインですので、予測モデルとか作ってみたいヒトは参加するといいと思います。

尚、静岡のPythonの機運が高まってきたのでShizuoka.pyも近々予定していますので皆さんネタのほうよろしくお願いします。

さて、昨日行ったお店は三島のBeerバーでBeer Windでした。

居心地は良くて楽しかったです。

ゆずホワイト、美味い

1457774309

ミルクスタウト、超美味い。香りが良すぎ

1457774310

プリムス、無難

1457774312

ジェットスターインペリアル、そこそこ美味い

1457774313

今日はちょっと車をディーラーに見せにいったついでに、昔住んでた家めぐりをしてきましたw 徒歩圏内を3箇所くらい移り住んだので(ペット可マンションに移りたくて数百メートル移動したこともあるw)

娘とワンコを連れてよく遊びに行った公園。何もないけどw

1457774314

帰りに弥栄に寄って手火山式の塩ラーメンを食べた。

1457774316

最近色々と思うことのある日々を過ごしている。

MMPを効率的に格納するためのデータ構造

今まではMMPはIDのペアと活性値の差分だけ持っていれば良かったので適当なスキーマのデータベースに放り込んでいたんだけど、Monitoring the Progression of Structure–Activity Relationship Information during Lead Optimizationというアッツい論文を読んでから、うちでもMMSとかSARM_disc_scoreとか出したいと思っていたが、やる気が無いので放置していた。

最近データベースを作りなおす機会があったので構造も新しく考えてみた。

MMPはCore(共通骨格)とペアのそれぞれのフラグメントに分けられるのでone-to-manyで割とシンプルにかけるんだけど、それぞれのFragmentからのbackrefをmmpsにしちゃうとエラーが出るので変なナンバリングしないといけなかった。

from sqlalchemy import Column, String, DateTime, Float, Integer, ForeignKey
from sqlalchemy.orm import relationship
from MMP.database import Base

class MMP(Base):
    __tablename__ = "mmps"
    id = Column(Integer, primary_key=True)
    core_id = Column(Integer, ForeignKey('cores.id'))
    fragment1_id = Column(Integer, ForeignKey('fragments.id'))
    fragment2_id = Column(Integer, ForeignKey('fragments.id'))
    activity_id = Column(Integer, ForeignKey('activities.id'))
    compound1_id = Column(String(6))
    compound2_id = Column(String(6))
    fragment1 = relationship("Fragment", foreign_keys='MMP.fragment1_id', backref="mmps1")
    fragment2 = relationship("Fragment", foreign_keys='MMP.fragment2_id', backref="mmps2")

    def __init__(self, **kargs):
        self.compound1_id = kargs["compound1_id"]
        self.compound2_id = kargs["compound2_id"]

    @property
    def mmp_id(self):
        return "{}-{}".format(self.compound1_id, self.compund2_id)

class Core(Base):
    __tablename__ = "cores"
    id = Column(Integer, primary_key=True)
    mmps = relationship("MMP", uselist=True, backref="core")
    smiles_string = Column(String(255), unique=True)

    def __init__(self, **kargs):
        self.smiles_string = kargs["smi"]

class Fragment(Base):
    __tablename__ = "fragments"
    id = Column(Integer, primary_key=True)
    smiles_string = Column(String(255), unique=True)

    def __init__(self, **kargs):
        self.smiles_string = kargs["smi"]

実際のデータはMMPクラスと活性クラスをひも付けてあるのでSARM_disc_scoreとかMMSの抽出とか簡単になるはず。

MBA2012でChainer

直接入れるとめんどくさそうなのでVagrantで

という構成です。

64bitの仮想環境を構築するためにちょっとダウンロードします

vagrant box add trusty64 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box
vagrant init trusty64
vagrant up
vagrant ssh

これ以降は仮想サーバーでのコマンドになります chainerを入れる前に、numpy,cython,h5pyが入ってないといけないみたいです。

sudo apt-get update
sudo apt-get install python-pip
sudo apt-get install python-dev
sudo pip install numpy
sudo pip install cython
sudo apt-get install libhdf5-dev
sudo pip install h5py
sudo pip install chainer

これで、MNISTサンプルが動かせます

$ time python chainer-1.5.1/examples/mnist/train_mnist.py
load MNIST dataset
epoch 1
graph generated
train mean loss=0.192818405504, accuracy=0.94170000316
test  mean loss=0.0941508330352, accuracy=0.969200006723
epoch 2

...

epoch 20
train mean loss=0.00807140778183, accuracy=0.997750002146
test  mean loss=0.101509903543, accuracy=0.981100007892
save the model
save the optimizer

real    596m38.866s
user    614m50.111s
sys 0m34.011s

やたらと時間がかかったが、GPU使うとどのくらい早くなるんだろうか…

Chemoinformaticsにおいて深層学習は有用なのか知りたいので勉強しているところ

深層学習が届いていたので読んでいました。

ProductName 深層学習: Deep Learning
麻生 英樹
近代科学社 / 3780円 ( 2015-11-05 )


対象読者としては、レビューにもあるように

ただどちらも内容の難易度は少し高めで、またビジネスへの応用が書いてあるわけでもないので 「ディープラーニングって最近よく聞くけど何がすごいの?」 というような疑問を持つ一般人や分野外の人には向いてないだろう。 あくまでこの分野を研究している人向けの本である。

だと思う。少なくともPRMLは読んでいないとしんどいと思うのだけど、読むと確実に広がるのでこの際ついでに読みましょう☆

ProductName パターン認識と機械学習 上
C.M. ビショップ
丸善出版 / 6825円 ( 2012-04-05 )


ProductName パターン認識と機械学習 下 (ベイズ理論による統計的予測)
C.M. ビショップ
丸善出版 / 8424円 ( 2012-02-29 )


僕自身は分野外ではあるのだけど、タイトルにもあるようにChemoinformaticsへ適用できるかなぁっていうことで興味を持っているので、一部の基礎編と二部の応用編の画像認識、自然言語処理の章が参考になった。

高速文字列解析の時もそうだけど、結局化学構造は文字列表現とかグラフ表現するので、シニフィエ、シニフィアン的な側面があって、こっちの学問も必然的に追いかけないとトレンドキャッチアップできないよねと。しているヒトがあんまりいないけど。

本書を読んでいて、なんとなく自然言語処理で使われているような方法論を取り入れてみればいいのかなぁと思ったけど、ECFP(FCFP)って結局bi-gram,tri-gramみたいなもんだし、自然言語には文法という並びに意味があるけど、化合物の文字列表現の場合は方向がそろっているわけではないからその辺りをどうにかしないと難しいよねと改めて思ったのと。

現状の化合物の表記法が、例えば軌道とかを暗(implicit)に記述できているのかなぁというあたりがちょっと疑問。

そういった点も含めてKaggleのあれに関しては別のエントリでちょっとメモった。

それから、もし資料が作れればMishima.sykで話すかもしれません。

今更KaggleのMerck Molecular Activity Challengeについて

丁度2年くらい無気力が続いていたので今更感があるがMerck Molecular Activity ChallengeについてChemoinformaticsの実務者側からのメッセージ的なものが無いので書いておいてもいいかなと。

一応ググるとDeepLearningが活性予測に超使える的な文脈で語られているが、実際はこの結果を受けて「すげー使える」という印象をもっているChemoinformatistはほとんどいないはずです。二位のチームがSVMを使っているのだけど、精度がほとんど変わらないので、 「あーSVMでいいじゃん」 という印象のほうが自然かと(評価方法はこれ)。こっちも参考に。

優勝者インタビュー

特徴量作りに心血を注いできたデータサイエンティスト憤死

とあるけど、実際はモンストでいうところの 「ミリ残しでギリ勝ちしたわ」 であろうと。

むしろ個人的には、スコアが(例えば画像認識に比べて)非常に低いというところを熟慮しないといけないと考えている。

Feature Engineering,特徴量づくりをほぼやらず,必要最低限の前処理しかしてない

と話しており

じゃぁ、仮に 特徴量の学習をさせたら大幅に精度が向上するのか?

というあたりが非常に気になるわけです。

実際、トレーニングセットを見てみると、記述子よくわからなかったw やたらスパースだし、フィンガープリントじゃなくIntegerだったのでなんかの特徴をカウントしてんのかな?

正直これから特徴量作れないんじゃないかなぁと。既に記述子の段階で必要な情報が落ちているんじゃないかとしか思えなかった。

我々 Deep Learning 屋は特徴量を工夫するよりも,特徴量を可能な限りデータから学習していたい.こういう傾向って Kaggle にいる特徴量作りに長けた人々を相手にした時に不利になるかもしれないけど,今回は上手くいったわ.

というように特徴量を学習できるようなデータはどういうものか?というあたりを真剣に考えないとダメなのではないかなぁと思っているわけです(少なくとも現在使われているフィンガープリントでは難しいでしょう)。

それがどういうものかなぁというあたりを考えていきたいところです。

再来週末はMishima.sykです

今回はそこそこの人数が集まりそうですし、初参加の方も多いので楽しそうです。

懇親会は(忘年会シーズン+新規オープンの店で混むだろうから)多分当日の追加は無理なので申し込みはお早めに。来週くらいに締め切るかもしれません。

それから演題も絶賛募集中です。

僕はElectronの話か可視化の話をする予定です。 DeepLearningの話はこの前しちゃったからなぁ…TensorFlowの話を誰かしてくれてもありがたい。

可視化の話だとSpotfireとかCytoscapeではやりにくい部分をD3.jsのようなライブラリを使ってやるのが吉とか、インフォグラフィックとどう使い分けるかみたいな抽象的な話になりそうだけど、ネタを挿入しにくいから躊躇している。

笛とかニャンピョウ絡ませるの無理あるからなぁ…w

Mishima syk #7やります

前回の反省を踏まえて今回は早めに告知をw

僕はElectronの話をしようかなぁ。皆様の発表エントリをお待ちしています。

最近blogも放置気味なのでそろそろ更新頻度をあげていきたい(かも…)

Mishima.syk #6 やりました

参加した皆様お疲れ様でした。色々と面白い話が聞けて楽しかったです。

僕は分子設計を軽くディスってきましたw 本当にもっと頑張って欲しいですね。リードオプティマイゼーションのスタンスからFMOを使っているんだけど、もっとアーリーな段階での使い方の議論は新鮮だったので今度試してみたい。

あとは告知の仕方に問題があったので改善したい。事前に知っていれば参加したのにと何人かのヒトに言われたので。twitterやれとしか言えないが、それも難しいでしょうからメールを送るとか考えないとあかんのかな…

懇親会で興味を伺ったらディプラーニングに注目しているヒトが多いようなので次回はそれ系のネタを集めようかなと思っています。

反省会は「鈴木屋」か「やごみ」でやりましょうw

Mishima.syk #6やります

今回は某WSの次の日にしました。

既に決まっている内容はOpenEye Toolokitの紹介(ハンズオンあり)とFMOの話(僕がします)なのでワンランクアップを狙うメディシナルケミスト(not ケミスト)には楽しいと思います。そしてSBDDerにとっても役立つと思います。

ケミストもSBDDerも自分の知識の中でファーマコフォアというものを解釈しがちで、(あっても弱いような微妙な角度の)水素結合を大事にしたり、Cl-πとかいう微妙な相互作用を強いものと認識したがったりしてアレなんだよねーっていう残念な思いをします。FMOで計算するとそのあたり定量的に数値が出るのでスッキリしますね。