情報知能学基礎演習 豊田秀樹(2008)『データマイニング入門』 (東京図書)。2章と3章 情報知能学基礎演習 豊田秀樹(2008)『データマイニング入門』 (東京図書)。2章と3章 情報知能学科 白井 英俊
2章を振り返って 2.5.1 偽札データの分析: 判別モデル 2.5.2 助数詞の分析 パッケージ nnet を用いる。 Flurry & Riedwyl (1988)のお札のデータ(図2.7)による学習 中間層が1層のニューラルネット(a=3, b1=2, b2=3, b3=1) 2.5.2 助数詞の分析 パッケージneuralを用いる。助数詞「本」の音韻変化。 中間層が1層のニューラルネット(a=3, b1=1, b2=10, b3=1) ユニット内部の信号変換:ラジアル基底関数(RBF: radial basis function) 2.5.3 ケーキの購入意思の予測 パッケージneuralを用いる。多層のニューラルネット(MLPモデル) データは図2.20。これを評価にも用いる MultiLayer Perceptron
2.5.1偽札データの分析 入力層と出力層に対応する行列を作る: 学習を行う 下部マージンと対角線を入力とする。最大値と最小値と用いて、値を0から1の間の数に変換する (2.10式参照) 下部マージン <- (お札データ$下部マージン - min(お札データ$下部マージン))/ (max(お札データ$下部マージン)-min(お札データ$下部マージン)) 入力層と出力層に対応する行列を作る: 入力層<-cbind(下部マージン,対角線) 出力層<-class.ind(お札データ$真偽) 学習を行う set.seed(3) # 乱数の初期値の設定(しなくてもよい) ネットワーク学習 <- nnet(入力層, 出力層, size=3, rang=0.3, maxit=2000)
2.5.1偽札データの分析(続) 検証 ネットワーク適用 <- predict(ネットワーク学習, 入力層) 試してみよう # 学習させたネットワークに再度、入力層データを適用 適用結果 <- round(ネットワーク適用, digits=3) 試してみよう いろいろなトポロジーで試そう 結果を図示させてみよう
2.5.1偽札データの分析(続):元データ
2.5.1偽札データ(続):適用結果
2.5.2 助数詞の分析 ユニット内部の信号変換に、シグモイド関数ではなく、ガウシアン関数(RBF)を用いる 入力層と出力層に対応する行列を作る 入力層<-as.matrix(鉛筆データ$本数) 出力層<-as.matrix(鉛筆データ$ポン) 学習させる ネットワーク学習<-rbftrain(入力層, neurons=10, 出力層, it=1000) 検証 ネットワーク適用<-rbf(入力層, ネットワーク学習$weight, ネットワーク学習$dist, ネットワーク学習$neurons, ネットワーク学習$sigma) 入力を1変数とする場合
表示されるネットワーク
学習された関数の表示(「ぽん」) 10 1 6 8
2.5.2 助数詞の分析(続き) 注意:出力層としては「ボン」を選んでいる つまり、これは「ボン」の判別分析 つまり、これは「ボン」の判別分析 疑問: ガウシアン関数ではなく、シグモイド関数だとどうだろう? 「ホン」、「ポン」も同様に作らないといけない 同様に以下を実行 ネットワーク学習ホ <- nnet(入力層, 出力層ホ , size=10, rang=0.3,maxit=2000) ネットワーク適用ホ <- predict(ネットワーク学習ホ, 入力層) 適用結果ホ <- round(ネットワーク適用ホ, digits=1) ネットワーク学習ボ <- nnet(入力層, 出力層ボ , size=10, rang=0.3, maxit=2000) ネットワーク適用ボ <- predict(ネットワーク学習ボ, 入力層) 適用結果ボ <- round(ネットワーク適用ボ, digits=1)
2.5.2 助数詞の分析(続き) 以下をやってみると… choose <- function(x,h,b,p) { if (h[x] > b[x] && h[x] > p[x]) cat(x,"HON \n") else { if (b[x] > h[x] && b[x] > p[x]) cat(x,"BON \n") else cat(x,"PON \n") } } lapply(1:10,function(x) {choose(x,適用結果ホ,適用結果ボ,適用結果)}) choose2 <- function(x,h,b,p) { if (h[x] > b[x] && h[x] > p[x]) paste(x,"HON ") else { if (b[x] > h[x] && b[x] > p[x]) paste(x,"BON ") else paste(x,"PON ") } } sapply(1:10,function(x) {choose2(x,適用結果ホ,適用結果ボ,適用結果)}) その結果は: [1] "1 PON " "2 HON " "3 BON " "4 HON " "5 HON " "6 PON " "7 HON " [8] "8 PON " "9 HON " "10 PON "
実は… この課題は、ガウシアン関数を用いるために作られたもの:入力も出力も1変数に限定していた 入力を「本数」に対応した10個の変数とすれば、nnetで(も)簡単に学習が可能 入力層<-class.ind(鉛筆データ$本数) 出力層<-鉛筆データ[,2:4] set.seed(3) ネットワーク学習 <- nnet(入力層, 出力層, size=3, rang=0.3, maxit=2000) ネットワーク適用 <- predict(ネットワーク学習, 入力層) 適用結果 <- round(ネットワーク適用, digits=3)
2.5.3 ケーキの購入意思の予測 多層ネットワークを用いる例 7変数の入力、1変数の出力 入力層<-cbind(高級感,甘さ,新奇性,濃厚さ,食感,華やかさ,値段) 出力層<-as.matrix(ケーキデータ$購入意思) ネットワーク学習<-mlptrain(入力層, neurons=c(5,3), 出力層, it=1000) ネットワーク適用<-mlp(入力層, ネットワーク学習$weight, ネットワーク学習$dist, ネットワーク学習$neurons, ネットワーク学習$actfns) colnames(ネットワーク適用)<-c("予測確率(買う)") 適用結果<-round(ネットワーク適用, digits=3)
2.5.3 ケーキの購入意思の予測(続) 多層のネットワーク
2.5.3 ケーキの購入意思の予測(続) 検証 count = 0 ng = c() for (i in 1:nrow(ケーキデータ)) if (ケーキデータ$購入意思[i] == 1 && 適用結果[i] <= 0.5) { cat(i,"\t","*NG-Fooled*\n") ng = c(ng,i) count = count+1 } else { if (ケーキデータ$購入意思[i] == 0 && 適用結果[i] > 0.5) { cat(i,"\t","*NG*\n") count = count+1 } } とすると、1か所、予測ミスがあることがわかる
3章 人工知能と決定木 古典的な人工知能:エキスパートシステム 専門家から「知識を獲得」し、プログラムとして実現ー知識表現 3章 人工知能と決定木 古典的な人工知能:エキスパートシステム 専門家から「知識を獲得」し、プログラムとして実現ー知識表現 データ量の爆発的な増加⇒知識を獲得するアルゴリズム、特に磁力で知識を獲得するアルゴリズムの重要性=機械学習(machine learning) 機械学習の技術的本質=統計学の「多段層別」技法 決定論的命題ではなく、統計的な相関関係の獲得
3.2 決定木:タイタニックデータを例に タイタニック号の生還者と死亡者の表(表3.1)から、どのような要因が生還・死亡(生死)を分けたかを考える 基準変数:この例では「生死」。目的変数ともいう。 予測変数:基準変数(この例では「生死」)を予測するのに使える変数。説明変数ともいう。この例では、「等級・立場」、「大人・子ども」、「性別」 カテゴリカル変数:値が数値ではなくカテゴリ(分類) ダミー変数:値が二者選択(二つの水準)の変数
決定木:タイタニックデータを例に(続き) CART(Classification And Regression Tree) Breiman, Olshen, Stone, Friedman(1984) 説明変数を二進分岐させ、決定木を生成 分岐の評価基準:ジニ係数(Gini index)や情報利得(information gain) パッケージは mvpart (他に tree, rpart) タイタニック木 <- rpart(生死~等級+大人子ども+性別, data=タイタニックデータ, method="class")
決定木:タイタニックデータを例に(続き) printによる表示 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 2201 711 死亡 (0.6769650 0.3230350) 2) 性別=男性 1731 367 死亡 (0.7879838 0.2120162) 4) 大人子ども=大人 1667 338 死亡 (0.7972406 0.2027594) * 5) 大人子ども=子ども 64 29 死亡 (0.5468750 0.4531250) 10) 等級=3等 48 13 死亡 (0.7291667 0.2708333) * 11) 等級=1等,2等 16 0 生還 (0.0000000 1.0000000) * 3) 性別=女性 470 126 生還 (0.2680851 0.7319149) 6) 等級=3等 196 90 死亡 (0.5408163 0.4591837) * 7) 等級=1等,2等,乗務員 274 20 生還 (0.0729927 0.9270073) *
決定木の図示
3.4 予測変数が連続変数の場合 偽札データを例に、予測変数が連続変数の場合の扱いを見る お札木 <- rpart(真偽 ~ ., data=お札データ) print(お札木) n= 215 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 215 100 偽札 (0.534883721 0.465116279) 2) 対角線< 140.45 103 1 偽札 (0.990291262 0.009708738) * 3) 対角線>=140.45 112 13 真札 (0.116071429 0.883928571) 6) 下部マージン>=9.45 16 3 偽札 (0.812500000 0.187500000) * 7) 下部マージン< 9.45 96 0 真札 (0.000000000 1.000000000) *
決定木の表示 判別 偽札 真札 1 115 4 2 0 96
分類木をデータで表示してみると
本日の学習 Rの作業:p.99~p.111 2章の復習:特に内容に注意して 3章の理解:何が行われているか、ツールを『使える』だけではなく、ツールの仕組みも理解できるようにしよう ジニ係数と情報量:3.3.2節の計算を、自分でやってみよう