cran rパッケージ bnslの概要

41
RパッケージBNSLの概要 @ AMBN 2017 サテライトワークショップ 2017919鈴木譲 (大阪大学)

Upload: joe-suzuki

Post on 29-Jan-2018

1.078 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: CRAN Rパッケージ BNSLの概要

RパッケージBNSLの概要@ AMBN 2017 サテライトワークショップ

2017年9月19日

鈴木譲 (大阪大学)

Page 2: CRAN Rパッケージ BNSLの概要

本日のお話の手順

• ベイジアンネットワークの構造学習

•無向森の構造学習 (離散)

•無向森の構造学習 (連続)

•応用例

• よくある質問

•他ツールとの比較

• まとめと今後の課題

Page 3: CRAN Rパッケージ BNSLの概要

ベイジアンネットワークの構造学習

Bayesian Network Structure Learning (BNSL)

データフレーム

構造

p=3のとき

Page 4: CRAN Rパッケージ BNSLの概要

森の構造学習

Forest Structure Learning (FSL)

データフレーム

構造

p=3のとき

Page 5: CRAN Rパッケージ BNSLの概要

BNSLの基本的な使い方(1): 離散 BNlibrary(BNSL)

g=bnsl(asia)

plot(g)ASIA (Lauritzen 1996)

p=8

変数 意味 (Yes/No)

Asia 最近アジアに行った

Smoking 常習喫煙者

Tuberculosis 結核

Lung Cancer 肺がん

Bronchitis 気管支炎

E T(結核)またはL(肺がん)の論理和

Chest X-ray 肺の X 線撮影での異常

Dyspnoea 呼吸困難

Page 6: CRAN Rパッケージ BNSLの概要

ベイジアンネットワーク (BN)

分布の因数分解を、有向非巡回グラフ(DAG)で表現したもの

(同値)

Page 7: CRAN Rパッケージ BNSLの概要

統計学: データから正しい構造を推定

•サンプル数 nが大きいときに、正しい構造を推定

BN=分布データ

推定

乱数発生

Page 8: CRAN Rパッケージ BNSLの概要

ベイズ統計学: データのもとでの事後確率最大化

P(構造|データ) = P(構造) 𝑃 データ 構造,パラメータ 𝑃(パラメータ|構造)𝑑パラメータ

パラメータを周辺化した事後確率

構造 (1)-(11)のどれか

パラメータ 各部分の条件付き確率

構造の事前確率 パラメータの事前確率

事前確率としては、標準的なもの

Page 9: CRAN Rパッケージ BNSLの概要

変数の個数pとともに指数的な計算?

Alarm p=37

最も知られたベンチマーク

library(BNSL)

g=bnsl(alarm)

plot(g)

PCで、1日かかる

g=bnsl(alarm[,1:20])など、変数の個数を限定する

Page 10: CRAN Rパッケージ BNSLの概要

BNSLの高速化の検討

アプローチ 現状 将来 (1年以内)

分枝限定法(最適な構造)

ICML-96、UAI-17通常の方法より10倍速い

PCで1時間以内にnを定数として、pの多項式時間

ヒューリスティック(近似)

親集合の個数を制限構造の探索のしかたを制限

やり方は無数にある

{D,X}は、Eの親集合

BNではなく、事後確率を最大にする森を求める

Page 11: CRAN Rパッケージ BNSLの概要

高速化のためにRcppを適用

• Rでプログラミングするより、50-100倍高速

• C++で関数を構築して、Rから呼び出す

Rにはポインタがない。RcppではRの関数が使えないR, C++を知っていても、インターフェイスになれるのに若干時間がかかる

Page 12: CRAN Rパッケージ BNSLの概要

alarmはBNで1日かかるが、森だと5秒で完了

pの2乗の時間

asia alarm

Page 13: CRAN Rパッケージ BNSLの概要

BNSLの基本的な使い方(2): 離散森

library(BNSL)

df=alarm

mm=mi_matrix(df)

edge.list=kruskal(mm)

g=graph_from_edgelist(edge.list, directed=FALSE)

V(g)$label <- colnames(df)

plot(g,vertex.size=20.0)

(デモだけやって、プログラムはあとで)

Page 14: CRAN Rパッケージ BNSLの概要

データ -> 相互情報量の推定値 -> 森(Chow-Liu, Kruskal)

分布が森で表現されることを仮定

相互情報量の推定値大きいものから、ループができない限り、辺を結んでいく

Page 15: CRAN Rパッケージ BNSLの概要

相互情報量

独立であるときだけ0になる

独立性を仮定した場合とのK-L情報量

Page 16: CRAN Rパッケージ BNSLの概要

相互情報量を推定したい

離散

連続だと、かなりむずかしい

Page 17: CRAN Rパッケージ BNSLの概要

独立性を検知できる推定量 (Suzuki 93)

(負のときは0とする)

Suzuki 93を用いると、事後確率最大の森が生成される

Page 18: CRAN Rパッケージ BNSLの概要

Rパッケージ BNSLの主な関数

関数名 機能

mi 相互情報量の推定

mi_matrix データフレームから相互情報量の推定量の行列を生成

cmi 条件付き相互情報量の推定

kruskal Chow-Liuアルゴリズムの実行で必要

parent_set ベイジアンネットワーク構築の親集合

bnsl ベイジアンネットワークの→の向き、変数の順序を決定

mi(x, y, proc=0)

等しい長さのベクトルx,yから、相互情報量を推定。Jeffreys’ (proc=0), MDL (proc=1), 最尤 (proc=9), 連続を含む (proc=10)

Page 19: CRAN Rパッケージ BNSLの概要

BNSLの基本的な使い方(3): 連続森

library(BNSL)

df=read.csv("nikkei225-2.csv")[,1:30]

m=nrow(df)-1 # 2015年の営業日数-1

differ=df[1:m,]

for(i in 1:m)differ[i,]=df[i+1,]-df[i,]

mm=mi_matrix(differ, proc=10)

edge.list=kruskal(mm)

g=graph_from_edgelist(edge.list, directed=FALSE)

V(g)$label <- colnames(df)

plot(g,vertex.size=10.0)

Page 20: CRAN Rパッケージ BNSLの概要

日経225銘柄の前日との差分

• PCでの実行時間: 3時間

• 離散でも連続でもない (整数値だが、取りうる値が多い)

有限個とみるのも、連続値の正規分布とみるのも難しい

Page 21: CRAN Rパッケージ BNSLの概要

quantmodパッケージ (金融データ処理)

Install.packages(“quantmod”)以外に、install.packages(“XML”)が必要

通常のAPIとは異なり、webで公開されているデータを獲得している

(RFinanceYJパッケージは、バグが多い)

Wouter ThielenさんgetSymbols.yahooj担当者 (東京在住)

Joshua UlrichさんQuantmodパッケージ責任者 (米国在住)

Page 22: CRAN Rパッケージ BNSLの概要

時系列のクラスxtsのオブジェクトが得られる

始値 最高値 終値最安値 取引高 調整値

Page 23: CRAN Rパッケージ BNSLの概要
Page 24: CRAN Rパッケージ BNSLの概要
Page 25: CRAN Rパッケージ BNSLの概要
Page 26: CRAN Rパッケージ BNSLの概要

同業8社の株価(データサイエンス新興企業)

Page 27: CRAN Rパッケージ BNSLの概要

8社の株価の相関係数

• ある銘柄の取引で成功した場合、同様の成功が得られるのは、どの銘柄か• ある銘柄の変動を、他の銘柄から予測できないか。

Page 28: CRAN Rパッケージ BNSLの概要

8社の株価の相互情報量(連続な変量として処理)

Page 29: CRAN Rパッケージ BNSLの概要

1: 2158 UBIC2: 2389 オプト3: 3622 ネットイヤー4: 3655 ブレインパッド5: 3680 ホットリンク6: 3905 データセクション7: 3906 ALBERT8: 6031 サイジニア

8社の株値の関連性を森で表すと

Page 30: CRAN Rパッケージ BNSLの概要

連続: 正規分布を仮定する場合

相関係数の推定に帰着

一般の場合は、どうするのか

X,Yが正規分布でないとき

Xが離散、Yが連続のとき

Page 31: CRAN Rパッケージ BNSLの概要

mi(x,y proc=10)の動作 (Suzuki,16)

X, Y ともに等頻度の分割表ができる

Xを等頻度に分割

Yを等頻度に分割

X,Yは離散でも連続でもよいが、区切って頻度を数える

相互情報量の推定量 𝐽𝑛を計算

いろいろなサイズの分割表を生成して、 𝐽𝑛の最大値を計算連続値は、量子化される

Page 32: CRAN Rパッケージ BNSLの概要

メッシュに区切っていく

(離散などで) 同じ値が境界にあるとき

nが大きいと、メッシュを細かくしても、推定できる

連続値も離散値も区別しない

Page 33: CRAN Rパッケージ BNSLの概要

データセット(連続)

• 日経225銘柄 (2015年4月-2016年3月)の終値

(前日との差分をとったもの、年間データのない2社を除く)nikkei225-2.csv

• 乳がん患者の遺伝子発現データ

(p51遺伝子をもつサンプル192個、もたないサンプル58個)breastcancer.csv

Page 34: CRAN Rパッケージ BNSLの概要

ゲノム解析への応用 (1)

Int. J. Approximate Reasoning, 2016

青: p値の大きな遺伝子赤: 症例/対照

1000個の連続変量1個の2値変量

乳がん患者の遺伝子発現データ(p51遺伝子をもつサンプル192個、もたないサンプル58個)

Page 35: CRAN Rパッケージ BNSLの概要

大規模なグラフの作図は igraphよりCytoscape

論文に投稿すると、査読者もイチコロ

Page 36: CRAN Rパッケージ BNSLの概要

ゲノム解析への応用 (2)

Int. J. Approximate Reasoning, 2016

青: 遺伝子発現量赤: SNP (3値)

Page 37: CRAN Rパッケージ BNSLの概要

マイクロアレイからRNA-seqへ

ゲノム解析データが大量に取得できるが、確率的モデルが異なる

古い 主流になりつつある(産総研瀬々氏のスライド)

Page 38: CRAN Rパッケージ BNSLの概要

多い質問(1): BNだと向きがわかるが、無向だとわからない

BNの構造学習

因数分解して同じになる構造は

同じスコア(事後確率)になるので、方向は判定できない

3構造と1構造は区別される

区別されない

3構造間は区別されない

Page 39: CRAN Rパッケージ BNSLの概要

多い質問(2): スコアとして、BDeu, MDL, AICのどれがいいのですか

どれが良いかは、データによる。ちまたにあふれたガセを信じべからず

• MDLは、事後確率最大の近似解

• AICは、他のと比べると、過学習で枝が多くなる

• BDeuは、デファクトに近い待遇をうけてきたが、

• 致命的な性質が証明された (Suzuki 2017)少ないサンプルでも枝が多くなる。使われなくなると予想。

Page 40: CRAN Rパッケージ BNSLの概要

他ツールとの比較 (自己評価)

bnlearn BayoLink BNSL

連続 △ ☓ ◯

研究の最先端 ☓ ☓ ◎

大規模なBNの構造学習

近似を許して、大規模な処理を行う

近似を許して、大規模な処理を行う

最適解が求まる場合しか動かない

ユーザ数 ◎ ◯ △

価格 無料 (Rパッケージ) 有料 無料 (Rパッケージ)

グラフィック △ ◎ ☓

Page 41: CRAN Rパッケージ BNSLの概要

まとめと今後の課題

RパッケージBNSLの使い方と、知っておくべき理論について説明

今後の課題

連続変数でも対応可能な、BNの構造学習

最適性を犠牲にしてでも、大規模なBNの構造学習を可能にする

ベンチマーク alarmを1時間で処理できるレベルに

グラフィックやマクロを整備して、商品価値を高める

学者が、論文を広めるためにつくったRパッケージという感が強い民間で広く使っていただくことが重要