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

CRAN Rパッケージ BNSLの概要

Jan 29, 2018

Download

Engineering

Joe Suzuki
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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パッケージという感が強い民間で広く使っていただくことが重要