18
bnlearnパッケージの紹介 2013/02/23 () 29R勉強会 #TokyoR Kentaro Taguchi

Bnlearn tokyo r29th

Embed Size (px)

Citation preview

Page 1: Bnlearn tokyo r29th

bnlearnパッケージの紹介

2013/02/23 (土)

第29回R勉強会 #TokyoR

Kentaro Taguchi

Page 2: Bnlearn tokyo r29th

自己紹介

• 背景 経営工学

• 仕事 データマイニング

• 趣味 unityの勉強

2

Page 3: Bnlearn tokyo r29th

目次

1. 目標

2. データ入手

3. bnlearnの使用

4. 分析結果

3

Page 4: Bnlearn tokyo r29th

1.目標

bnlearn (Bayesian network learning and inference)パッケージによるベイジアンネットワークの作成

• 題材

映画タイトルのツイート分析

4

Page 5: Bnlearn tokyo r29th

2.データ入手

http://www.tweetarchivist.com/

ツイート1000件×3タイトルを取得

5

Page 6: Bnlearn tokyo r29th

MeCab,RMeCabのインストール

• 和布蕪(MeCab)

日本語形態素解析ソフト

• RMeCab

R からMeCabを呼び出して使うインターフェイス

MeCabのインストールと解説 石田基広氏

http://rmecab.jp/wiki/

6

Page 7: Bnlearn tokyo r29th

MeCabで形態素解析

data1 = read.csv(“twitter.csv”, header=TRUE) # CSVファイル読み込み

library(RMeCab) # RMeCab読み込み

res <- RMeCabDF(data1, 2) # 出現頻度の高い形容詞に絞り込み

head(res) # 内容の確認

7

Page 8: Bnlearn tokyo r29th

ターム・文書行列を作成

res <- docMatrixDF(data1[,"text"], pos=c("形容詞"), minFreq=20) # 出現頻度

の高い形容詞を指定

ターム1 ターム2 ・・・ タームm

ツイート1 ツイート2 ・・・ ツイートn

頻度

8

Page 9: Bnlearn tokyo r29th

形容詞の出現頻度

res <- t(res) # 転置

head(res) # 内容の確認

9

Page 10: Bnlearn tokyo r29th

離散変数に変換

res2 <- res>=1 # 1回以上出現しているならばTRUE

head(res2) # 内容の表示

data2 <- data.frame(data1$title, res2) # タイトルと結合

10

Page 11: Bnlearn tokyo r29th

3.bnlearnの使用

install.packages(“bnlearn”) # bnlearnのインストール

source(“http://bioconductor.org/bioLite.R”) # パッケージのurl指定

bioLite(“Rgraphviz”) # グラフ表示用パッケージのインストール

情報元サイト http://www.bnlearn.com

• bnlearn ベイジアンネットワークのグラフ作成,パラメータ推定

11

Page 12: Bnlearn tokyo r29th

空のグラフ作成

library(bnlearn) # パッケージの読み込み

e = empty.graph(LETTERS[1:12]) # ノード12個の空のグラフを作成

plot(e) # グラフを表示

12

Page 13: Bnlearn tokyo r29th

エッジを追加

arc.set = matrix(c(“A”, “B”, “A”, “C”, ... , “A”, “L”), ncol = 2, byrow = TRUE) #

エッジを指定

arcs(e) = arc.set # 空のグラフにエッジを追加

plot(e) # グラフを表示

13

Page 14: Bnlearn tokyo r29th

データを再度加工

head(data3) # 内容の表示

• numeric型かfactor型に統一しておく必要がある • 「いい」「良い」などが混ざっていたので,頻度の多いほうを採用

14

Page 15: Bnlearn tokyo r29th

パラメータ推定

fit <- bn.fit(e, data3) # 最尤法によるパラメータ推定

fit # 内容の表示

条件付き確率

15

Page 16: Bnlearn tokyo r29th

棒グラフの表示

bn.fit.barchart(fit$B) # 棒グラフの表示

16

Page 17: Bnlearn tokyo r29th

4.分析結果

0

0.01

0.02

0.03

0.04

0.05

0.06

0.07

0.08

0.09

いい

かわいい

ない

やばい

悪い

楽しい 凄い

早い

怖い

面白い

欲しい

T

D

B

17

Page 18: Bnlearn tokyo r29th

ベイジアンネットワークの事例

http://www.bnlearn.com/bnrepository/

18