今日の落書き Rubyでアヤメ(Iris)のデータを眺める

データを用意する

https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/data/iris.csv

Jupyter Notebookを起動する

※ホビーでRubyを手軽に使うのにJupyter Notebookが必ずしもベストとは思わない…

ライブラリを読み込む

CSVファイルを読み込む

SepalLength SepalWidth PetalLength PetalWidth Name
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
5 5.4 3.9 1.7 0.4 Iris-setosa
6 4.6 3.4 1.4 0.3 Iris-setosa
7 5.0 3.4 1.5 0.2 Iris-setosa
8 4.4 2.9 1.4 0.2 Iris-setosa
9 4.9 3.1 1.5 0.1 Iris-setosa

アヤメの品種を確認する

Name
0 Iris-setosa
50 Iris-versicolor
100 Iris-virginica

基礎統計量を表示してみる

PetalLength PetalWidth SepalLength SepalWidth
count 150.0 150.0 150.0 150.0
mean 3.759 1.199 5.843 3.054
std 1.764 0.763 0.828 0.434
min 1.0 0.1 4.3 2.0
max 6.9 2.5 7.9 4.4

グループにしてみる

SepalLength SepalWidth PetalLength PetalWidth
Iris-setosa 5.006 3.418 1.464 0.244
Iris-versicolor 5.936 2.77 4.26 1.326
Iris-virginica 6.588 2.974 5.552 2.026

アヤメの品種ごとにデータをわける

SepalLengthのヒストグラム DataFrameから

Nyaplotを使う場合

※ Daruから NyaplotやGnuplotrb、Plotlyを通してグラフを描けるらしい. 残念ながらNyaplotの開発は止まっている…

SepalLengthのヒストグラム Statsampleから

StatsampleがDaruと統合する前に独自に持っていたグラフ機能が残っている

setosaの散布図を描く

Nyaplotを使うとき

Numo::Gnuplotを使うとき

Daru::Vector→RubyArrayへの変換が必要。

相関係数を求める

SepalLength SepalWidth PetalLength PetalWidth
SepalLength 1.0 0.747 0.264 0.279
SepalWidth 0.747 1.0 0.177 0.28
PetalLength 0.264 0.177 1.0 0.306
PetalWidth 0.279 0.28 0.306 1.0

散布図行列

現状では簡単に描く方法は存在していないとおもわれる。

単回帰分析を行う

Numo::Gnuplotで回帰直線を描く

多分Nyaplotでも描ける

重回帰分析

【Ruby】 Numo::Gnuplot で箱ひげ図 (boxplot)

忘れないうちにメモ

1.配列をさっと比較したいとき

2.ラベル付きのデータのとき

using の設定がややこしいけど、丸暗記するしかないっぽいね

なぜゲノムの分野に楽観的な気持ちになれないのか考えた

漠然とした話。IT系の人達と一部の医療関係者はゲノム解析の分野に大きな期待を寄せているが、どうも個人的にはゲノムにそこまで強い希望を持てない。特に分子標的治療薬によるガンの個別化治療に対してはかなり否定的な気持ちを持っている。どうして自分がゲノム解析にそこまでポジティブな気持ちにならないのか、その理由が少しだけ自分でもわかってきたのでメモしておく。(あまりこういう分野について考えたこともないので用語は変だと思う)

まず、一般化した話から。
技術の進歩を2つに分けて考えてみる

1. 手間(工数)を増やすことによって品質を向上するもの
2. 品質は据え置き〜低下させて、手間(工数)を減少させるもの

 暗黙の了解として、昭和の日本では、実行可能な工数は増え続けるという前提があった。エネルギー革命により石油資源から電気を生み出し、電化製品が家庭でも使われるようになった。労働人口も増加し続けた。その結果1の、工数を増やして品質を向上させる技術がもてはやされるようになった。

 しかし、ついに生産年齢人口は減少し、旧来の方法を漫然と続けるだけでは品質を保つのも困難な時代になってきた。コンプライアンスの強化が叫ばれており、現場は過剰なコンプライアンスに疲弊しているといわれている。これは、本当はこのような活動をしなければ、すぐにでも品質が維持できない状況に陥りそうだということを意味する。

 したがって、今後の日本で評価されるべきなのは、2品質は据え置き〜低下させて、手間(工数)を減少させる技術であると予想される。つまり、技術の評価軸を変える必要がある。

 先進国では、これから日本のような少子高齢化が問題になると予想され、工数を減らす技術が品質を向上させる技術よりも高く評価されるのは、世界的なトレンドになっていくと考えられる。(※個人の意見です)

一般的な話おわり。ここでゲノムの話に戻る。

 ゲノム解析に展望は、個別化医療によって、分子標的薬の治療の品質を上げていくというものであった。個人や病気に最適化された分子治療薬を開発し、それを使う。それは確かに素晴らしいことだと思う。しかし、これは工数を増やしながら品質を向上させる技術である。

 しかし個別化医療をルールベースで行うと多くの思考をともない現場がもたない。これを圧縮するために、人工知能を使用する。なぜならば、人工知能の世界では、今後も計算力の増加が見込まれており、実行可能な工数=計算力は増加し続けると考えられているからである。

 ゲノムによる個別化治療とは、工数を増やすことによって品質を向上させるタイプの医療である。その追求は大変おもしろいだろうし、患者さんにも大きな効果を発揮するだろう。しかし、それはわずかな品質向上のために、莫大な計算力を費やすタイプの医療かもしれないのである。
 そしてそのような医療は、解決しなければならなない社会問題のトレンドや、社会的な要請からは本当は少しずれているかもしれないと考える。

 もちろん僕の考えが間違っている可能性もあるが、正直にそう書いておく。これが僕がゲノム医療に感じる違和感の正体で、そこまでポジティブになれない理由なのだと思う。

 ここまで書いた違和感のほかに、ゲノム研究そのものに対する不満もある。

 そもそも素人考えでは、がん遺伝子がすべて解明できたとしても癌のことが理解できるとは思わない。癌細胞を眺めている人たちは、がんは成功者であるという発想に陥りがちだ。つまり、がん細胞はいくつかの遺伝子を変えて、自ら無限に増殖できるように変身したしたずる賢い成功者だと。癌の本態は遺伝子なのだから、そのような遺伝子をみつけて叩けばいいのだと。

 しかし、私にはそのような腫瘍観は、時代遅れだと思う。癌の本態は本当に遺伝子だろうか。偉い先生は心から本当にそう思っているだろうか。それとも癌全体を理解することは難しいので諦めてしまっているのだろうか。それとも研究費を貰うためにそう言っているだろうか。

 私のなかでは癌は成功者というよりは、貧困地帯に広がるスラム街のようなイメージである。きっと多くの人はそのようなイメージを持っているのではないだろうか。華々しい成功者のイメージは癌にふさわしくない。

 それでも癌を成功者と見なしたいのなら、個別の成功者よりも、そのような成功者を生みだし、許容し、成長させるに至った背景や仕組み、条件に着目したいところだ。個々の成功者のキャラクターや特色、それは成功者を構成するパーツではあるけれども、そればかりに「成功」の原因を帰着するのは狭い考え方だと思う。

 癌を遺伝子病とみる立場は、それと同じような視野狭窄があると感じられる。遺伝子を調べる技術は手元にある。しかし癌をうみだす背景である加齢現象を理解する方法はない。だから癌を治したいという気持ちを強く持って、わかることを一生懸命に調べていると、自然と「癌は遺伝子疾患」という気持ちが過剰になりすぎてしまうのだと思う。その気持ちはわかる。気持ちはわかるのだが、賛成はしない。

 そのほかの意見も、免疫ががん細胞を排除するといった話ばかりで、世知辛い気持ちになる。若年者に癌が生じないのは本当に免疫のためばかりなのだろうか?(直感的には違うと思うけれども、何の根拠もない)

 時代のブームは、物事をみる目を曇らせるし、私達の頭の中を少し不自由にする。
 だからせめて、妄想日記の頭の中ぐらいは、役に立たないことばかり考えて自由にしていたいと思う。

医療とAIの未来について再び妄想する

頭の整理をするために、また医療とAIの未来について考えている。

医療データサイエンス 1.0

これは、近い将来にきっと起きる変化だ。AIの医療応用を考える多くの人が思い描いている未来だ。
具体的には
・CTやMRI画像などが、Deep Learning技術で自動的に診断できるようになる
・医療用のデータセットを作成する患者団体や、病院、学会が現れる
・APIを用いて医療データを取得する手段が整備されはじめる
・データセンタを持つ企業が医療データを低価格で診断するサービスを始めてデータを収集・蓄積しはじめる 
・対抗して、よりオープンな医療データセットやオープンなモデルも公開される
・大病院が工学技師としてデータサイエンティストを雇いはじめる
・もしくは医者がデータサイエンスをかじりはじめる
・少しずつ人工知能が普及しはじめる
・画像診断の精度、血液検査の精度、内視鏡の精度、遺伝子の解析、心電図モニタリングetc
 すべてでコンピュータが人間を上回る
・個別化された医療が行われるようになる
・診断だけではなく、治療にロボットの活用がはじまる
・確実にどんどん成果を生まれ、治療成績も激的に向上していく
・にもかかわらず、不思議なほど医療そのものには何らの変化がない なんでだろう?
・保険点数が厳しく減額され、利益が減少したりする
・IT企業に対する患者の医療訴訟が多発するようになる。高額の賠償が請求される事例も発生する
・IT企業も、次第に状況を理解して(最初は不合理だと思っていた)製薬会社のやり方を真似するようになる
・もしくはもともと無料でサービスを提供できる体力のあるところだけが他の会社を焼き払う形で生き残る
・最初からこうなることを見越していた老舗企業もしぶとく生き残る
・患者とエンジニアの間にゆっくりと失望が広がっていく
・業界の熱気が冷めて、少しずつ落ち着いてくる
・なんかいい感じになる
といった感じだろうか。とってもワクワクしないよね。あまりにも想像するのが容易だ。
妄想にしても陳腐だ。
こういったことに無邪気に夢を感じるには、少し歳をとりすぎた気がする。

問題は、ここからだと思っている。上記の筋書きはちゃんと考えれば誰もが見通せる素直な未来だ。
未来は、だいたい思い描いた通り素直には歩いてくれない。

医療データサイエンス 2.0

上で描いた1.0は人工知能は、あまり医療の本質に触れていない。
つまり1.0は来るが、そのままの形ではこない。

僕が思いつくだけで大きな焦点は2つあると思う。
1つ目の焦点は、割と簡単だ。簡単だということは、乗り越えうるということである。
乗り越えた先は、たとえばアルファ碁のあとの囲碁界みたいな事になっていると思う。ある意味楽しい世界である。

2つ目の焦点も簡単だが、もう少し医療の本質に関わる問題である。
この問題が乗り越えられるかどうかはわからない。乗り越えるとしたら、人工知能は俺が考えているよりもやばい。
少なくとも、今の段階では人工知能がこういった問題を乗り越えることは想像できないな。多分、人工知能はこの問題を乗り越えられずに迂回すると思う。
少なくとも人間は、こういう問題を直接乗り越えるよりは迂回することを好む。

この問題について、ちょうどいいツイートがあったので引用しておく

そしてその根本にある問題や、その他の問題もおぼろげに見える気がする。

いつものことだが妄想日記にしても考えがよくまとまらない。

考えれば考えるほど、やっぱり人工知能も今までの技術革新と同じで、結局は医療は変わらないという説の方を採用したくなるね。

Rubyを使ってDICOM画像で遊んでみる

RubyでDICOM画像を扱う情報がほとんどないので少しずつメモしてみる。

ruby-dicomhttps://github.com/dicom/ruby-dicom

インストール

DICOM画像を読み込む

メタデータを取り出す

画像データを取り出す

IRuby Notebook上にDICOM画像を表示する

imageメソッドで、ImageMagickオブジェクトに変換できる。
内部ではrmagickもしくはmini_magickが動いている。
rmagickは更新が滞っているので、mini_magickがおすすめ。


※画像はDSB2017に使用されたsampleの1つです

ヒストグラムを表示する


Guido ZuidhofFull Preprocessing Tutorial
の序盤をRubyに書き換えてみた。とりあえず動いてくれればOKという発想なので、例によって間違いあるかも。

Kaggleの肺癌検出コンテストで医用画像のAI活用は大きく広がるのでは

 気が付かないうちに、Kaggleが胸部CTの肺癌検出のコンテストを開催しとった。完全にフォロー不足で、今日発見して目が点になった。これ、ググっても日本じゃあんまり反響ないみたいだけど、ものすごいことだぞ……。どのぐらい凄いかっていうと、これからの医療にとってガラケーしかなかった世界にiPhoneが発表されるぐらいの衝撃になるんじゃないか。IT業界の反応が薄いのは仕方ないとして、ググっても日本の医療クラスタから反応が全然なくてびびる。まさか重要性に気がついていないのか。。そんなわけないよね。それでもgoogle検索でひっかかるのは中国語のサイトばかり。日本の医療は本当に大丈夫かいな。。これあとでしっかり調べないと。

追記①

 kaggleの何が凄いかというと、個人情報の塊である医用画像を大量に使用してコンペティションを開催したことだ。どうやってそんなことができるのかちょっと想像がつかない。けれども、Data Science Bowlのスポンサーをみると、このコンペティションは以前から周到に準備されたものだと思われる。まず、主催はKaggle(Googleによって買収)と、ブーズ・アレン・ハミルトンというコンサルティング会社である。ブーズ・アレン・ハミルトンは日本語Wikipediaによると米政府のコンサルティングに特化しているという。協賛企業をみると、Amazonの名前もあるし、NVIDIAの名前もある。アメリカ合衆国福祉省、アメリカ食品医薬品局の名前も入っている。かなり公共性の強い企画だということが感じられる。
 医療関係からは、アメリカ放射線医学会やアメリカ国立がんセンター、デンマークや、オランダの大学病院の名前がみつかる。Data Support Providers の一番上には、National Lung Screening Trial というものがある。これが今回提供されたデータの中心になっているのだろうか。2002年から2009年頃に行われた治験である。

 興味深いことに、呼吸器学会の名前は見当たらない。このことは何かを物語っている気がする。

 もしも、日本で同じことをやろうと思うなら、AmazonやNVIDIAの他に、ソフトバンク、PFN、さくらインターネット、東芝メディカルなど協賛を取り付け、放射線医学会、国立がんセンターの協力を得て、いくつかの大病院の協力ももらい、できれば台湾などの海外の病院にも協力してもらう。もちろん厚生労働省のお墨付きももらって、有力な財団の協賛ももらう。
 そして多くの患者に、治験で撮影した自分のデータをインターネット上に公開して利用することについてサインする必要がある。はっきり言ってこれはかなり難しいと思う。まず、大病院などの組織や、学会には柔軟な行動は全く期待できない。次に、個人情報を開示する時点で世間の大変な反発が予想される。まして企業が莫大な懸賞金を用意するという話になると、もう大反発が巻き起こるだろう。その気持ちは、私も日本人なのでわからなくもない。しかし、どうも個々人の利益や安心感を守りすぎるあまりに、長期的な公共の利益や、自分以外の人の利益、技術の発展に対して、冷やかというか、無関心すぎるのではないかという気がする。人の気持ちを考えろって、確かに目の前の人の気持ちは大事だけど、10年後、20年後の未来の日本やアジアで同じ病気になる人の命についてどう考えているのだろうか?目の前の人がよければ、未来の人たちのことはどうでもよいのだろうか?そんなことはないと思う。

 Kaggleがこんなおっかないコンテストを実施できるのも、ちゃんと真剣に医療やアメリカの未来のことを考えているからだと思う。

 もっと勇気をだして医療情報を公のために公表してほしいと思うけど、なかなかそうはならないだろう。あるいは、アメリカでは日本のように医療費が安くないから、治験で医療情報をくれれば、費用を負担しますというな実効力のある仕組みになってるのかもしれない。少なくとも私は、自分が病気になった時はデータを公開したい。死んだらデータはいらないのでインターネット上に無償で公開して、無数の研究者がそれで研究してくれて、世のために役立つ方がずっといいに決まってる。そう思う人だって決して少なくはないはずだ。

 Gmailのようなクラウド方式で、IT企業が患者のデータを没収し、そのかわりに診断やら治療を提供するビジネスモデルってどうも感じ悪いのよね。無料(Free)って、データ押収しているんだから本当は自由でもないし無料でもないよ。

 でもそんなこと普通の人は気がつかない。気がついていても、便利だったらOKだって考えている人も多い。

 そうやってデータを吸収して世界中から優秀な若者をおびき寄せるGoogleの作戦はいつも成功しているから、医療の世界でもそれがうまくいってしまう可能性はあると思う。

追記②
 社会的な凄さについて書いたが、技術的に凄いと思うのは、DICOMデータに対して機械学習を行うという事に関するコードがGithubに多数公開されたこと。
 これで医用画像の機械学習に必要なツールや方法論が大きく改善されたはずだ。多くのデータサイエンティストがDICOM画像を生まれて初めて扱ったことだろう。
 医療側からみると、その気があればデータサイエンティストが作って公開している成果を、その場で日常臨床に試すこともできる環境が整いつつあるということを意味する。
 医用画像のAI認識をめぐる環境はこの1年で激変するのではないかという気がする。できれば、独自路線で頑張るよりも、できるだけ世界の潮流に参加して合わせていった方が大きなメリットがあるような気がする。

追記③
 LUNA16というプロジェクトが前身になっており、Grand Challenges in Biomedical Image Analysisという団体が地道な活動をしている。Kaggleのコンテストは突然発生したのではなく、もっと小規模なコンペティションの積み重ねの中から生まれてきたことがわかる。

hatena匿名ダイアリー「医者として働き始めて不思議なこと」の感想など

http://anond.hatelabo.jp/20170507185312
そろそろ旬を過ぎたので書いてみる。もしも筆者がこのブログを見つけてくれたら少し嬉しい。
 まず思ったのは、同じ学年でも見えてる世界って、世代ごとに違うんだな〜っていうこと。

自分が経験した科が内科だからかもしれないが毎日パソコンを弄っているだけで患者が治っていくのである

 私はヤブで頭も悪かったので少しもそんなことを思わなかった。そもそも電子カルテ端末なんてなかった。電子カルテ端末がないって相当な大昔だと思うかもしれないが、たかだか数年前のことである。オーダリング端末 + 紙カルテという組み合わせは当時は割とメジャーだった。だから、今の研修医にとって、電子カルテ端末が存在するのは当たり前の環境だ、っていうのが何となく新鮮だった。

 そして君の書いてある内容は、多分正しい。でも、今から言うことを少しだけ心にとめておいてほしい。これから君はどんどん業界に馴染んで、常識を失っていく。そして、勤務年数が上がると、色々な経験をして、それまで見えなかったことも見えるようになってくる。そして、かつての自分の想像力の範囲が狭かったように感じ始める。君はこの業界がどうなっているのか考え、悩み、行動し、いろいろな発見をして、少しずつ考えが固まっていく。そんな様子が、私にはなんとなく想像できる。それは本人にとって「進歩」のように感じられる。

 でも、本当にそれは進歩なのだろうか?

 私が初期研修した時も、医療には変だと思えるところはたくさんあった。そしてそれは今でもあまり変わっていない。でも、だんだんと周囲の景色が見えてくると、どうして医療がそういう奇妙な仕組みになっているのか、少しずつ納得できる理由を見つけられるようになって、不思議であると感じるべきところが、当然に見えはじめ、どんどん当たり前に感じられるようになる。慣れてしまうのである。本人は、昔よりも物事がよく見通せるようになったと自負しているけれども、必ずしもそうとは限らないと思う。

 部外者の方が、案外正しい目で物事を観察しているものだと思う。

 だから一読して「本当はね、もっと深いメカニズムがあって、実際にはこうなってるんだと私は思う」と言いたい気持ちになった。
 なったけれども、あえて言わないことにする。というのは、自分が研修の時におかしいと思ったことは、今でもおかしかったと思っているからだ。だから、何となく自分の方が正しいと思っていることも、優秀に違いない新人研修医の意見を前にすると、本当は若者の意見の方が実は正しいんじゃないかという気がして、今ひとつ自分の意見に自信が持てなくなる。見栄っ張りで、馬鹿を晒したくない気持ちが強いのである。

「どうして医療の世界がこんな不思議なことになっているのか、一つ一つ理由を見つけてみたいのです。」
「だが、それがわかるようになった頃には君は手遅れになっているかもしれないぞ。」
研修の時に飲み会で、ある先輩と交わした言葉だが、数年経った今ではその言葉の意味が少しだけわかる気がする。

だから今君が感じている違和感はものすごく貴重とだけは言っておく。

『人工知能はどのようにして 「名人」を超えたのか?』を読んだ

読んだ。期待していたよりもずっと面白かった。

黒魔術から逃げた先には、もっと大きな黒魔術が広がっているかも

一番面白かったのはこの部分、ポナンザが黒魔術化しているというところ。

 現在のポナンザの改良方法は、何らかの新しい改良を考えたら、それを適用したポナンザと以前のバージョンのポナンザを3000試合ほど自動で対戦させるというものです。このとき、新しいポナンザの勝率が52%以上の場合は新しい改良が採用されるという方針をとっています。
 私が3000試合の将棋の内容を個別に見ることはなく統計処理をして計測しています。正確には、将棋の内容を吟味しようにも対極の勝因や敗因がわからないので、吟味できません。すでにポナンザの棋力は、私のレベルをはるかに上回っているからです。
 しかも、「改良した作業」とポナンザが「強くなったこと」が、将棋プレイヤーとしての感覚からは大きく乖離していて、理詰めではその差を縮めることができません。うまくいった改良がどこでどう有効に働いたのか、全然わからないのです。
 加えてこういった改良の成功率は、今までの経験則によると2%以下です。何らかの改良をしても、強くなることが確認できるのは100回に2回もないということですね。
 そんなわけで、現在のポナンザの改良作業は、真っ暗闇のなか、勘を頼りに作業しているのとほとんど変わりがありません。

 コンピューター将棋も黒魔術なのか、と。
 医療の世界はまさに黒魔術の世界だ。人体のメカニズムを解明して、新しい治療を開発するという還元主義的な発想は流行らない。なぜならば目標が高すぎて実現が難しいからだ。人体を構成するさまざまな要素の動きを正確に予想して、ベストな介入をする。そんな将棋では当たり前の手法が医療では使えない。医療というテクノロジーは、将棋よりも遥かに原始的な段階にとどまっているのである。

 「なぜ治療が効いたのか」という点について臨床試験や治験では全くわからない。黒魔術である。しかし、黒魔術というと格好が悪いので、一部の人はこれをエビデンスと上品に表現する。黒魔術では心がすっきりしない。そこで医療に人工知能を導入することで「黒魔術を減らしたい」と願ってる人は少なくないと思われる。なぜその治療が良いのか評価値ぐらいは示してほしい、そういう期待がどこかにある。

 しかし、人工知能ポナンザの開発も、やはり臨床医学の現場と同じように黒魔術的に行われているという。そうなると、人工知能の導入は医療の黒魔術を減らすどころか、ますます黒魔術化を促進することになる。

もう一度人工知能で医療がどう変わるか考えてみる…医療は機械に置き換わらないという直感は間違っているかも

 私の想像の及ぶ範囲で医療という業務を表現すると、治療の実施による生活上のメリットという観点に基づき、患者の感情と社会基盤を考慮て、検査の必要性などについて適切な重み付けを行い、検索における枝刈りをして選択肢を減らし、実効力のある介入を行うことだと思う。さらに言えば、数年の延命することにより本人が亡くなるという事実を本人と家族が受け入れる時間を作って、人々の行きどころのない怒りの感情を可能な範囲で受け止めコントロールし、苦痛を取り除くように試みることでもある。これが、古代から現代までの病院の仕事である。

 限られた手段と情報を見極めて現実的によいアウトカムに導くこと、それを可能にする無数の黒魔術的なバッドノウハウの集積が医療の仕事である。医療の本質とは科学技術とはすこし離れたところにあると私は思っている。純粋なテクノロジーの側面(知識や技術を高めることで問題解決)よりも政治的判断や感情処理、リソースの適切な振り分け、身体的知性などのウェイトが大きいので、どんなにコンピュータによる診療技術・治療技術が進歩しても、人間による医療がコンピュータに置き換わることにつながらない。そう内心私は思っていた。

 レントゲン写真の診断、CTの診断、組織診断、血液検査の判断力、治療の選択、手術の技術、神の手…そういう領域でコンピューターの能力が人間を超えるのは時間の問題だ。しかし、そういった技能は、エンジニアや他職種の方が思っているほど、医療の本質には近くない。。診断に関しては、人体から得られたさまざまな情報を2次元の画像や文字列に変換するテクノロジーが医療現場では日常的に多数使用されています。例えば血液などの人体の一部をサンプルし、計測し、連続的・あるいは非連続的な値を返す。そのような営みは「検査」と呼ばれ、多くの人々はそこに人工知能があるとは考えない。
 しかし、私は生データを人間が直接処理するのではなく、一度機械にかけて人間が解釈しやすいような2次元画像に変換してアウトプットするような機構は、広義の人工知能に該当すると思う。極論を言えば聴診器や血液検査のような検査も、人工知能に相当する。線形的に音波を増強して特定の波長を非線形にカットするという聴診器の特性や、多くの疾患の診断基準は、パーセプトロンの仕組みと同じである。

 そうだとすると、医療の世界には現時点でも「人工知能」に満ちあふれていることになる。そのような「人工知能」と、ディープラーニングを使用した人工知能による診断支援に本質的な差があるかというと、今のところ、個人的には「ない」と思う。

 つまり、人工知能が診断力や治療力で人間を上回るようになっても、それをいずれ医療という巨大なシステムは旧来の技術と同じように吸収してしまうだろうと。つまり人工知能で医療は変わらないという予想である。今現在でも人間の能力を大きく超えているようなシステムはたくさんあるのです。そこにまたひとつDeep Learningが加わっても大勢に影響はないだろうと。

 だからコンピュータが人間の医師の能力を凌駕する話を聞いても「そうでしょうね。私もそう思います。むしろそうなった方が医療の質は向上するでしょう。(もし現場が楽になるなら早くそうなってほしいなあ……)」というぐらいの気分でいた。つい先月までは。

 でも、最近は実はそれも甘いんじゃないかと思うようになった。まだ捉えきれていないところがあるんじゃないかと。感情的なインターフェースで政治的判断を行うような領域にも、何らかの方法で機械が進出してくる余地があるのではないかと。医療の業務の本質がエンジニアには見えていないからといって、それだけでは機械化が進まない理由にはならない。それどころか返って盲点になっているのかも知れない。もしもエンジニアが本当に医療のことをよく理解して、そこにフォーカスしたら何が起こるのか。。
 ひょっとすると当初思っていたよりも人工知能の応用領域は広くて、全然想像していないところで人工知能の普及の余地があるのではないかないかと。

 パソコンが普及し始めた時、それがブラウザとインターネットの箱になることを誰が想像しただろうか。。医療における人工知能のあり方についても、そういう主戦場が予想外の方向へ展開していく可能性があるんじゃないかという気持ちにさせられました。

人工知能はどのようにして 「名人」を超えたのか?―――最強の将棋AIポナンザの開発者が教える機械学習・深層学習・強化学習の本質

今日の落書き Ruby の PyCall で Keras の Mnist 画像部類

RubyでPythonっぽいコードを書くと、RubyでPythonが実行できるというPyCallというGemがあります。
このPyCallでDeep Learning用のライブラリであるKerasが動かせるということなので、やってみました。

こちらのサイトを参考にしました。
PyCallを使えばRubyでもKerasでDeep Learningができる(洋食の日記)

短いコードですが、半年ぐらいプログラミングに触れていなかったのでかなり時間がかかりました。

工夫したところ

・RubyからPython呼んでいる時点で無駄が多いことをしている。だから何も気にせずに、ライブラリを贅沢に使おうと思った。
・MnsitをRubyの配列で呼ぶためだけにruby_brainを使用した。
・255で割るためだけにNumo/NArrayを使用した。
・結果として、mnistの元ファイル ⇢ Ruby配列 ⇢ NArray配列 ⇢ テキストファイル ⇢ numpy配列 という情報の変換、受け渡しにとても時間がかかっている。
 (・しかし、これは、PCを使わない人工知能にも広く見られる現象だ)
・ハマったのは、Kerasでmnist読み込む時と、ruby_brainでnnist呼びこむ時のデータ形式の違い。

よかったところ

・うごく!
・Rubyでディープラーニングする手段がある。0と1では大違い。

不満が残るところ

・PyCallでKerasを実行している最中に Ctrl+C でターミナルを停止できない
・エラーメッセージがもっと改行してくれると嬉しい
・やはり Ruby ←→ Pyrhon の情報のやりとりに不自由を感じる
 ・Rubyで前処理して一度ファイルに保存、Pythonで処理するのが現実的かもしれない

ASUS ZenBook に Keras を入れるまで

常用していた中古のノートパソコンをMacbookに買い換えました。周囲のMac使用率が50%に近づいている現在、Macを購入する最大のメリットは、周囲とのコミュニケーションの心理的な促進作用だと思います。Macには人と人とのつながり、コミュニケーションを誘発する作用があります。そこにはスペックだけ見ているとわからない、お金にできない、大きな価値があります。それに、Macを使っていると気分がいいです。Macについて語るとき、みんな笑顔になります。洗練されたGUIとシンプルなソフトウェアに囲まれて作業していると、落ち着いた気持ちになります。そう、間違いなくMacを選択するメリットは大きいのです。そうだMacbook Proを購入しよう。2年ぶりにUbuntuからMacに戻ろう。鼓動の高なりを感じながら、僕は家を出た。


そして、ASUSとともに帰宅。


Intelのシールの右に、緑色のNVIDIAのシールが張られている。GeForce 940MX搭載である。つまりCudaが使える。それからMacは高い。そりゃあなた、お金は大事ですよ。(しかし現行MacにGeForce搭載されていたら本当にMacbookを買っていたと思う)

以下困った時のためにKeras導入までの自分用メモ。

① まず購入して真っ先に、Intel等のシールをはがす。Macでは不要な作業。

② ブートUSBの作成
UNetbootinではなくこちらを使用した。とくに不具合なし。Ubuntu 16.04
UbuntuのブートUSB作成 (usb-creator を使用)

③ 画面の解像度がおかしい
→ソフトウェアアップデートして再起動

④ Cuda8.0のインストール
第456回 Ubuntu 16.04 LTSでCUDA 8.0を使用する 2017年2月1日 柴田充也
→ こちらの情報が適確で初心者にもわかりやすいのでその通りにした
→ deb(network)を選択した
→ 自動的にnvidia-375がインストールされる。NVIDIAのサイトでsupported productにGeForce 940MXが含まれていることを確認
→ PATHの設定、LD_LIBRARY_PATHの設定
→ nvcc –version や echo $LD_LIBRARY_PATH で確認

⑤ nvidia-smiコマンドが見つからない
→ F2でBIOSの設定に入り secure boot をdisableに変更して起動

⑥ cuDNN のインストール
CUDA 8.0とcuDNN 5.1をUbuntu 16.04LTSにインストールする
→ こちらの通りにした。
→ cuDNN のバージョンは要注意

⑦ Anacondaの導入
公式サイトの通り

⑧ 新しい環境の作成:
conda create -n keras .anaconda python=3.5
→ 最新過ぎるとはまりやすいという感覚で何となく3.5に

⑧ tensorflowのインストール
公式サイトの通り(Ubuntu/Anaconda使用版)

⑨ pythonでtensorflowを読み込んだ時のエラー
ImportError: libcudnn.5: cannot open shared object file: No such file or directory
→ まずはLD_LIBRARY_PATHの設定を見直し → 改善せず
→ stackoverflowの中段の解決策が有効
→ そもそもディレクトリのなかにlibcudnn.5が存在しないので、シンボリックリンクを作成
→ ln -s libcudnn.so.6* libcudnn.so.5
→ import tensorflow as tf が動作することを確認

⑩ Keras のインストール
公式サイトの通り
pip install keras
→ 公式exampleのmnist(MLP)が動作することを確認
→ nvidia-smi で確かにCPUではなくGPUで動作していることの確認

細かい不具合あるかもしれないが、これで手元でKerasを勉強できる環境が整った。