CRAN Rパッケージ BNSLの概要
-
Upload
joe-suzuki -
Category
Engineering
-
view
1.078 -
download
0
Transcript of CRAN Rパッケージ BNSLの概要
RパッケージBNSLの概要@ AMBN 2017 サテライトワークショップ
2017年9月19日
鈴木譲 (大阪大学)
本日のお話の手順
• ベイジアンネットワークの構造学習
•無向森の構造学習 (離散)
•無向森の構造学習 (連続)
•応用例
• よくある質問
•他ツールとの比較
• まとめと今後の課題
ベイジアンネットワークの構造学習
Bayesian Network Structure Learning (BNSL)
データフレーム
構造
p=3のとき
森の構造学習
Forest Structure Learning (FSL)
データフレーム
構造
p=3のとき
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 呼吸困難
ベイジアンネットワーク (BN)
分布の因数分解を、有向非巡回グラフ(DAG)で表現したもの
(同値)
統計学: データから正しい構造を推定
•サンプル数 nが大きいときに、正しい構造を推定
BN=分布データ
推定
乱数発生
ベイズ統計学: データのもとでの事後確率最大化
P(構造|データ) = P(構造) 𝑃 データ 構造,パラメータ 𝑃(パラメータ|構造)𝑑パラメータ
パラメータを周辺化した事後確率
構造 (1)-(11)のどれか
パラメータ 各部分の条件付き確率
構造の事前確率 パラメータの事前確率
事前確率としては、標準的なもの
変数の個数pとともに指数的な計算?
Alarm p=37
最も知られたベンチマーク
library(BNSL)
g=bnsl(alarm)
plot(g)
PCで、1日かかる
g=bnsl(alarm[,1:20])など、変数の個数を限定する
BNSLの高速化の検討
アプローチ 現状 将来 (1年以内)
分枝限定法(最適な構造)
ICML-96、UAI-17通常の方法より10倍速い
PCで1時間以内にnを定数として、pの多項式時間
ヒューリスティック(近似)
親集合の個数を制限構造の探索のしかたを制限
やり方は無数にある
{D,X}は、Eの親集合
BNではなく、事後確率を最大にする森を求める
高速化のためにRcppを適用
• Rでプログラミングするより、50-100倍高速
• C++で関数を構築して、Rから呼び出す
Rにはポインタがない。RcppではRの関数が使えないR, C++を知っていても、インターフェイスになれるのに若干時間がかかる
alarmはBNで1日かかるが、森だと5秒で完了
pの2乗の時間
asia alarm
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)
(デモだけやって、プログラムはあとで)
データ -> 相互情報量の推定値 -> 森(Chow-Liu, Kruskal)
分布が森で表現されることを仮定
相互情報量の推定値大きいものから、ループができない限り、辺を結んでいく
相互情報量
独立であるときだけ0になる
独立性を仮定した場合とのK-L情報量
相互情報量を推定したい
離散
連続だと、かなりむずかしい
独立性を検知できる推定量 (Suzuki 93)
(負のときは0とする)
Suzuki 93を用いると、事後確率最大の森が生成される
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)
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)
日経225銘柄の前日との差分
• PCでの実行時間: 3時間
• 離散でも連続でもない (整数値だが、取りうる値が多い)
有限個とみるのも、連続値の正規分布とみるのも難しい
quantmodパッケージ (金融データ処理)
Install.packages(“quantmod”)以外に、install.packages(“XML”)が必要
通常のAPIとは異なり、webで公開されているデータを獲得している
(RFinanceYJパッケージは、バグが多い)
Wouter ThielenさんgetSymbols.yahooj担当者 (東京在住)
Joshua UlrichさんQuantmodパッケージ責任者 (米国在住)
時系列のクラスxtsのオブジェクトが得られる
始値 最高値 終値最安値 取引高 調整値
同業8社の株価(データサイエンス新興企業)
8社の株価の相関係数
• ある銘柄の取引で成功した場合、同様の成功が得られるのは、どの銘柄か• ある銘柄の変動を、他の銘柄から予測できないか。
8社の株価の相互情報量(連続な変量として処理)
1: 2158 UBIC2: 2389 オプト3: 3622 ネットイヤー4: 3655 ブレインパッド5: 3680 ホットリンク6: 3905 データセクション7: 3906 ALBERT8: 6031 サイジニア
8社の株値の関連性を森で表すと
連続: 正規分布を仮定する場合
相関係数の推定に帰着
一般の場合は、どうするのか
X,Yが正規分布でないとき
Xが離散、Yが連続のとき
mi(x,y proc=10)の動作 (Suzuki,16)
X, Y ともに等頻度の分割表ができる
Xを等頻度に分割
Yを等頻度に分割
X,Yは離散でも連続でもよいが、区切って頻度を数える
相互情報量の推定量 𝐽𝑛を計算
いろいろなサイズの分割表を生成して、 𝐽𝑛の最大値を計算連続値は、量子化される
メッシュに区切っていく
(離散などで) 同じ値が境界にあるとき
nが大きいと、メッシュを細かくしても、推定できる
連続値も離散値も区別しない
データセット(連続)
• 日経225銘柄 (2015年4月-2016年3月)の終値
(前日との差分をとったもの、年間データのない2社を除く)nikkei225-2.csv
• 乳がん患者の遺伝子発現データ
(p51遺伝子をもつサンプル192個、もたないサンプル58個)breastcancer.csv
ゲノム解析への応用 (1)
Int. J. Approximate Reasoning, 2016
青: p値の大きな遺伝子赤: 症例/対照
1000個の連続変量1個の2値変量
乳がん患者の遺伝子発現データ(p51遺伝子をもつサンプル192個、もたないサンプル58個)
大規模なグラフの作図は igraphよりCytoscape
論文に投稿すると、査読者もイチコロ
ゲノム解析への応用 (2)
Int. J. Approximate Reasoning, 2016
青: 遺伝子発現量赤: SNP (3値)
マイクロアレイからRNA-seqへ
ゲノム解析データが大量に取得できるが、確率的モデルが異なる
古い 主流になりつつある(産総研瀬々氏のスライド)
多い質問(1): BNだと向きがわかるが、無向だとわからない
BNの構造学習
因数分解して同じになる構造は
同じスコア(事後確率)になるので、方向は判定できない
3構造と1構造は区別される
区別されない
3構造間は区別されない
多い質問(2): スコアとして、BDeu, MDL, AICのどれがいいのですか
どれが良いかは、データによる。ちまたにあふれたガセを信じべからず
• MDLは、事後確率最大の近似解
• AICは、他のと比べると、過学習で枝が多くなる
• BDeuは、デファクトに近い待遇をうけてきたが、
• 致命的な性質が証明された (Suzuki 2017)少ないサンプルでも枝が多くなる。使われなくなると予想。
他ツールとの比較 (自己評価)
bnlearn BayoLink BNSL
連続 △ ☓ ◯
研究の最先端 ☓ ☓ ◎
大規模なBNの構造学習
近似を許して、大規模な処理を行う
近似を許して、大規模な処理を行う
最適解が求まる場合しか動かない
ユーザ数 ◎ ◯ △
価格 無料 (Rパッケージ) 有料 無料 (Rパッケージ)
グラフィック △ ◎ ☓
まとめと今後の課題
RパッケージBNSLの使い方と、知っておくべき理論について説明
今後の課題
連続変数でも対応可能な、BNの構造学習
最適性を犠牲にしてでも、大規模なBNの構造学習を可能にする
ベンチマーク alarmを1時間で処理できるレベルに
グラフィックやマクロを整備して、商品価値を高める
学者が、論文を広めるためにつくったRパッケージという感が強い民間で広く使っていただくことが重要