情報知能学基礎演習 豊田秀樹(2008)『データマイニング入門』 (東京図 書)。2章と3章 情報知能学科 白井 英俊 2章を振り返って • 2.5.1 偽札データの分析: 判別モデル パッケージ 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モデル) MultiLayer Perceptron データは図2.20。これを評価にも用いる 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偽札データの分析(続):元データ 140 偽 偽 偽 偽 偽偽 真 139 偽偽 偽 138 お札データ$対角線 141 142 真 真 真 真 偽偽 真 真 真 真真 真 真 真真真 真 真 偽 真 真 真 真 真真 真 真 真真 真 真 真 偽 真 真真 真真 真 真 真 真 真 真 真真 真 偽偽 真真 真 真真真 真 真 真 真真 真 真真 真真 偽 偽 真 真真真 真真 真真 真 真 偽 偽 真 真 真 真 真 真真 真真 真 真真 真 真真 真 偽 偽 真 真 真 偽 偽 偽 偽 偽 偽 偽 7 偽 8 偽偽 偽 偽 偽 偽 偽 偽 偽 偽 偽 偽偽 偽 偽 偽 偽偽 偽 偽偽 偽 偽偽 偽偽偽 偽 偽 偽偽 偽 偽偽 偽 偽 偽 偽 偽 偽 偽 偽偽 偽 偽 偽 偽 偽 偽 偽偽 偽 偽 偽 偽 偽偽 偽 偽 偽偽 偽 偽 偽 偽偽 偽 偽 偽 偽 偽 偽 9 10 お札データ$下部マージン 11 12 2.5.1偽札データ(続):適用結果 140 偽 偽 偽 偽 偽偽 ■ 真 139 偽偽 偽 138 お札データ$対角線 141 142 真 真 真 真 偽偽 真 真 真 真真 真 真 真真真 真 真 偽 ■ 真 真 真 真 ■ 真真 真 真 真真 真 真 真 偽 真 真真 真真 真 真 真 真 真 真 真真 真 偽偽 真真 真 真真真 真 真 真 真真 真 真真 真真 偽 偽 真 真真真 真真 真真 真 真 偽 偽 真 真 真 真 真 真真 真真 真 真真 真 真真 真 偽 偽 真 真 真 偽 偽 偽 偽 偽 偽 偽 7 偽 8 偽偽 偽 偽 偽 偽 偽 偽 偽 偽 偽 偽偽 偽 偽 偽 偽偽 偽 偽偽 偽 偽偽 偽偽偽 偽 偽 偽偽 偽 偽偽 偽 偽 偽 偽 偽 偽 偽 偽偽 偽 偽 偽 偽 偽 偽 偽偽 偽 偽 偽 偽 偽偽 偽 偽 偽偽 偽 偽 偽 偽偽 偽 偽 偽 偽 偽 偽 9 10 お札データ$下部マージン 11 12 2.5.2 助数詞の分析 • ユニット内部の信号変換に、シグモイド関数では なく、ガウシアン関数(RBF)を用いる • 入力層と出力層に対応する行列を作る 入力層<-as.matrix(鉛筆データ$本数) 出力層<-as.matrix(鉛筆データ$ポン) 入力を1変数とする場合 • 学習させる ネットワーク学習<-rbftrain(入力層, neurons=10, 出力層, it=1000) • 検証 ネットワーク適用<-rbf(入力層, ネットワーク学習$weight, ネット ワーク学習$dist, ネットワーク学習$neurons, ネットワーク学習 $sigma) 表示されるネットワーク RBF network START 0.61 0.04 1.5 0 3 1 4 0 0.45 5 0 0.35 0.45 0.58 6 0.23 7 8 0 0.01 -0.09 9 0 -0.93 10 -0.58 0 Prev Iteration: Error: 0 Next 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 0 1 2 3 4 5 6 7 8 9 1000 0.4964 0.4117 0.3364 0.3083 0.2725 0.2403 0.2366 0.2147 0.2025 0.1962 0.1948 0.1839 0.1583 0.1584 0.1569 0.1539 0.1404 0.1219 0.1325 0.1222 0.1205 0.1044 0.1147 0.0996 0.1048 0.0992 0.0958 0.0938 0.0891 0.0877 0.0803 0.0769 0.0793 0.0773 0.0678 0.0822 0.0669 0.0751 0.0712 0.0625 0.0708 0.0623 0.0592 0.0652 0.0598 0.0603 0.0583 0.0563 0.0522 0.0539 0.0567 0.0558 0.0601 0.0553 0.0546 0.0533 0.0548 0.0518 0.0511 0.0517 0.0497 0.0476 0.0469 0.0443 0.0495 0.0503 0.0442 0.0465 0.0438 0.0454 0.0474 0.0415 0.0441 0.0396 0.0455 0.0447 0.0451 0.0381 0.0417 0.0394 0.0414 0.0436 0.0413 0.0424 0.0407 0.0371 0.0401 0.0393 0.0386 0.0343 0.0369 0.0395 0.0398 0.0359 0.0361 0.0333 0.0372 0.0384 0.0346 0.0344 0.0336 0.0319 0.0342 0.0339 0.0294 0.0308 0.0326 0.0289 0.0313 0.0286 0.0298 0.0318 0.0312 0.0314 0.0266 0.0282 0.0276 0.0301 0.0272 0.0264 0.0269 0.0275 0.0254 0.0244 0.0258 0.0271 0.0226 0.0229 0.0238 0.0268 0.0236 0.0259 0.0231 0.0221 0.0202 0.0234 0.0247 0.0219 0.0233 0.0243 0.0217 0.0213 0.0215 0.0212 0.0208 0.0222 0.0216 0.0201 0.0192 0.0194 0.0185 0.0209 0.0199 0.0198 0.0206 0.0193 0.0184 0.0195 0.0197 0.0189 0.0174 0.0171 0.0163 0.0168 0.0181 0.0165 0.0176 0.0164 0.0159 0.0155 0.0147 0.0162 0.0153 0.0151 0.0152 0.0154 0.0158 0.0138 0.0142 0.0133 0.0146 0.0148 0.0143 0.0131 0.0144 0.0136 0.0141 0.0125 0.0134 0.0128 0.0127 0.0113 0.0126 0.0114 0.0118 0.0119 0.0108 0.0115 0.0105 0.0107 0.0102 0.0104 0.0106 0.0092 0.0101 0.0103 0.0096 0.0091 0.0093 0.0099 0.0084 0.0098 0.0088 0.0086 0.0074 0.0076 0.0089 0.0071 0.0082 0.343 0.165 0.139 0.114 0.083 0.072 0.045 0.038 0.034 0.033 0.035 0.031 0.028 0.027 0.029 0.026 0.025 0.021 0.017 0.016 0.011 0.009 NaN 0.09 0.04 0.02 0.01 0 0.1 -0.78 0 -0.08 学習された関数の表示(「ぽん」) RBF network 1 0.98 6 8 EXIT 10 0.843 NETW 0.706 0.569 0.431 0.294 0.157 0.02 0.1 1.643 3.186 4.729 6.271 7.814 9.357 10.9 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 ケーキの購入意思の予測(続) MLP Network START 多層のネットワーク 0.25 -0.47 -0.26 0.32 0.5 0.54 0.26 0.15 0 -0.88 -0.58 0.82 0 -0.59 0.74 0.44 -0.6 0.3 0.64 0.34 0.24 0.59 0.64 -0.78 0.58 0.29 -0.32 -0.75 -0.65 0.98 0.8 0.5 0.67 1 -0.05 -0.18 0.11 0.72 0.67 -0.12 -0.23 0.55 0.2 -0.01 -0.97 0.87 0.13 0.06 0.46 0.39 0.77 0.65 0.6 Iteration: -0.04 -0.47 -0.24 0.37 0.89 0.68 -0.63 -0.24 FNS Prev -0.95 0.57 0.45 Next 207 206 205 204 203 202 201 200 199 198 197 196 195 194 193 192 191 190 189 188 187 186 185 184 183 182 181 180 179 178 177 176 175 174 173 172 171 170 169 168 167 166 165 164 163 162 161 160 159 158 157 156 155 154 153 152 151 150 149 148 147 146 145 144 143 142 141 140 139 138 137 136 135 134 133 132 131 130 129 128 127 126 125 124 123 122 121 120 119 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 0 9 8 7 6 5 4 3 2 1 1000 0.53 -0.04 0.48 0.49 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") ng = c(ng,i) count = count+1 } } とすると、1か所、予測ミスがあることがわかる 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) * 決定木の図示 性別=男性 性別=女性 死亡 1490/711 大人子ども=大人 大人子ども=子ども 死亡 1364/367 等級=1等,2等 死亡 35/29 死亡 35/13 等級=1等,2等,乗務員 生還 126/344 等級=3等 死亡 1329/338 等級=3等 死亡 106/90 生還 0/16 生還 20/254 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) * 決定木の表示 対角線< 140.4 対角線>=140.4 偽札 115/100 下部マージン>=9.45 偽札 102/1 判別 偽札 真札 1 115 4 2 0 96 下部マージン< 9.45 真札 13/99 偽札 13/3 真札 0/96 分類木をデータで表示してみると 真 真 真 偽偽 真 真 真 真真 真 真 真真真 真 真 偽 真 真 真 真 真真 真 真 真真 真 真 真 偽 真 真真 真真 真 真 真 真 真 真 真真 真 偽偽 真真 真 真真真 真 真 真 真真 真 真真 真真 偽 偽 真 真真真 真真 真真 真 真 偽 偽 真 真 真 真 真 真真 真真 真 真真 真 真真 真 偽 偽 真 真 真 偽 140 偽 偽 偽 偽 偽偽 真 139 偽偽 偽 138 お札データ$対角線 141 142 真 偽 偽 偽 偽 偽 偽 7 偽 8 偽偽 偽 偽 偽 偽 偽 偽 偽 偽 偽 偽偽 偽 偽 偽 偽偽 偽 偽偽 偽 偽偽 偽偽偽 偽 偽 偽偽 偽 偽偽 偽 偽 偽 偽 偽 偽 偽 偽偽 偽 偽 偽 偽 偽 偽 偽偽 偽 偽 偽 偽 偽偽 偽 偽 偽偽 偽 偽 偽 偽偽 偽 偽 偽 偽 偽 偽 9 10 お札データ$下部マージン 11 12 本日の学習 • Rの作業:p.99~p.111 • 2章の復習:特に内容に注意して • 3章の理解:何が行われているか、ツールを 『使える』だけではなく、ツールの仕組みも理 解できるようにしよう • ジニ係数と情報量:3.3.2節の計算を、自分で やってみよう
© Copyright 2024 ExpyDoc