Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

機械学習によるモデル自動生成の一考察 ー 決定表と決定木によるアプローチ -

134 views

Published on

SES2019の研究アイデア論文で発表したものですが、17、18シート目の様々な機械学習まとめや、22~26シート目のRとScikit-learnによる決定木、MLPのソースのほうが、意味あるかも?

Published in: Software
  • Be the first to comment

  • Be the first to like this

機械学習によるモデル自動生成の一考察 ー 決定表と決定木によるアプローチ -

  1. 1. 機械学習によるモデル自動生成 の一考察 ー 決定表と決定木によるアプローチ - 放送大学 教養学部(科目履修生) 岡野 道太郎 【SES2019 研究アイデア論文】
  2. 2. はじめに 研究のアイデア • 開発の流れ • 要求分析 → 設計 → 実装 → テスト • 要求分析、設計の段階で、テストデータを作成することは可能:テスト駆動快活 • 機械学習の流れ • データ→モデル構築(学習)→推論 : 予測を行う • 機械学習の場合、データには誤差が伴う : 100%予測はできない • ではここで、テストデータ、設計データ等を機械学習させれば、プ ログラムは出力できるのか? • 機械学習:特徴ベクトルを入力・学習、目的変数を出力 • 本研究:決定表を学習、決定表の条件部を入力し、行動を出力(=目的変数) • 深層学習:特徴抽出も必要なくなってきている • 強化学習:Q(S,A):状態を入力、行動を出力
  3. 3. 目次 • 提案手法ー決定表から決定木による自動化 • 自動化の比較 • ハッシュマップ • 深層学習(MLP) • 想定外データへの対応 • 決定木 • 深層学習(MLP) • 本研究の位置づけ • センサー→制御→出力(行動)と自然言語処理のトレンドの違い • 今後の研究 • 状態遷移図:状態→特徴量(決定表)→機械学習 vs 強化学習 新規ないとのことだったので、この話は時 間が余った時、簡単に‥ 決定木に新規性はなく、決定木が従来の 方法より優れているところをということ なので、ここをMLPと比較し、詳しく
  4. 4. 決定表から決定木による自動化
  5. 5. 1.課題:自動販売機 仕様 • お金を入れたら,入金額を加算する. • いくつかの商品のボタンがあり,そ の商品ボタンを押したとき • 今まで入金した額が商品金額より大き ければ、商品とお釣りを出す • 今まで入金した額が商品金額と同額な ら、商品を出す • 今まで入金した額が商品金額未満であ れば、何もしない • 返却ボタンが押されたら,直ちに返 却処理をする。 • 返却処理とは返金,初期化等の一連の 処理とする 決定表
  6. 6. 2.データ(学習用、入力用)の作成 学習用データ(訓練データ) MONEY_I N PUSH GT EQ LT RET DO 1 0 0 0 0 01_0_0_0_0 0 1 1 0 0 00_1_1_0_0 0 1 0 1 0 00_1_0_0_0 0 1 0 0 1 00_0_0_1_0 0 0 0 0 0 10_0_0_0_1 入力用データ(テストデータ) MONEY_ IN PUSH GT EQ LT RET 1 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 1 :以降繰り返し (全体で20回繰り返し) ※実際のデータは項目区切りはタブではなく,(カンマ)で区切られている 決定表
  7. 7. 3.決定木の作成・実施 決定木の学習・実施・結果 決定木 前ページより
  8. 8. 自動化の比較
  9. 9. 自動化の比較(想定外データに対して) • ハッシュマップ • 決定表の条件部分をキーに、行動部分を値としてもつ • 決定表に条件が記載されている場合 • 正しい行動を必ず返せる • 決定表に条件が記載されていない場合 • すべて、エラーとして返す(似たような条件があっても) • 決定木の場合 • 決定表に条件が記載されている場合 • 正しい行動を返せる決定木が作れれば行動を返せる • 決定表に条件が記載されていない場合 • (決定木に限らず機械学習は)何らかの答えを返す→深層学習と決定木で比較
  10. 10. 自動化の比較ー深層学習(MLP) • 深層学習の場合 • ここでは、多重パーセプトロン(MLP)を対象とする • 複雑なモデルにすると、考慮すべき点、論点が広がってしまい決定木との比較が 行いにくくなるので • 深層学習でも決定表の学習は「当然」できる • 学習データ、入力データはそのままで実現可能 • ここでは、Rのライブラリ「RSNNS」を用いて行う • 入力層6層、隠れ層30X5層、出力層5層:全結合 • 2000エポック • 予期しないデータを送った場合、どうなるか
  11. 11. 想定外データへの対応
  12. 12. 想定外データへの対応(決定木) 問題点 • 返却(RET)について、決 定木に出てこない • RETの情報が足りない • RETに対する情報を増やす 改善策 • RETに関するデータを増やす • 決定表を詳細に記述する
  13. 13. 改良版決定木の作成・実施 決定木の学習・実施・結果 決定木
  14. 14. 改良版のデータをMLPで実施したら? 概要 結果 • 先ほど学習・推論 したMLPと同じ 条件(隠れ層の段 数、エポック数は 同じ) • 学習データ・入力 データは「改良版 決定木」のものを 用いる
  15. 15. ここまでのまとめ • 機械学習で、テストデータ、設計データ等を入れれば、プログラム は出力できるのか? • 入力(特徴ベクトル):決定表の条件部 • 出力(目的変数の値):決定表の行動:実際にはプログラムになる • 機械学習で実行可能なことを確認 • 決定木:出力までの推論過程が決定木として見える • 深層学習:推論過程がわからない • 想定外の出力のとき、どうしたらよいか(変えるのはデータ?ハイパーパラメタ?) • 推論過程を表現不要・不能のものには向いている:画像識別等 • 意図しない動きをする場合 • 決定木:意図するようにデータを増やす • 深層学習でも、決定木で作成したデータが有効?
  16. 16. 本研究の位置づけ(1) • センサー入力→制御→アクチュエーター出力のモデルでは、特 徴量+機械学習より、特徴量も機械学習で見つける、いくつか のタスクを合わせて行う方向へ進んでいる • ソフトウェア工学の詳細化とは逆に、統合化の方向
  17. 17. 本研究の位置づけ(2) • 一方、言語処理ではBERT等、特徴量(特徴ベクトル)抽出 の前に事前処理を行うなど、特徴量抽出までのタスクを詳細化 しつつある 前処理側 が発展 ※前処理部分:決定表の導出過程については、 本研究では何も語っていない
  18. 18. 今後の研究 • ソフトウェア自動化の場合:2つの方向が考えられる • 特徴量(決定表で表現)までを詳細化する • 状態→特徴量→機械学習・深層学習 • 特徴量である決定表の条件を求めず、環境を入力として機械学習 • 強化学習 • これらの比較を行うには • 状態→特徴量:状態から決定表の条件を作成する • UMLの状態遷移図から決定木の条件・行動を作りだす • 本研究で語っていない前処理の話題 • 帰納論理プログラミングの可能性
  19. 19. ここから先は発表では掲載し なかったもの
  20. 20. 会場から出た質問 • Q:決定木と決定表は同じなのでは? • A:決定表をすべて埋めた場合、決定木で機械学習させる意味はない (同じものが出てくるので)が、決定表をすべて埋められない、つま り状態をすべて表せない場合、決定木で機械学習させると埋められて いない部分も、適当なものを返してくれる可能性がある。この発表の 後半は、この「適当なものを返す」ための手法を示している • Q:このぐらい、プログラマの頭の中にあるのでは • A:意外と、人と考えるのとは違うケースを決定木は出してきます (ただし、それが、「おお~」と納得する場合もあるし、今回のよう に「???」というのを出してくることもあります
  21. 21. ボツ企画1-1 Scikit learnで決定木 • はじめ、Rでなく、Scikit learnを使おうと思った • 決定木はうまくいく • 右側にソース • 下に決定木 #決定木初期化 from sklearn import tree clf = tree.DecisionTreeClassifier(max_depth=5) #データ入力 import csv file_name='model.csv' file=open(file_name,'r') fdata=csv.reader(file) feature_names=[] # 見出し data = [] # 学習用データ(説明変数) target=[] # 学習用データ(目的変数) for row in fdata: if not row: continue elif len(feature_names) == 0: feature_names=row[0:6] else: data.append(row[0:6]) target.append(row[6]) file.close() #入力(テスト)データ input=[ [1,0,0,0,0,0], [0,1,1,0,0,0], [0,1,0,1,0,0], [0,1,0,0,1,0], [0,0,0,0,0,1], [0,1,1,0,0,1] ] #決定木を書くための目的変数見出し(ソート済み) target_names=[ '0_0_0_0_1', '0_0_0_1_0', '0_1_0_0_0', '0_1_1_0_0', '1_0_0_0_0' ] #学習実施 clf = clf.fit(data,target) #推論結果 predicted = clf.predict(input) print(predicted) #決定木の出力 from IPython.display import Image from sklearn.externals.six import StringIO dot_data = StringIO() tree.export_graphviz(clf, feature_names=feature_names, class_names=target_names, filled=True, rounded=True, out_file=dot_data) graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) #決定木の出力:ノートブックに可視化 graph.progs = {'dot': u"C:¥¥Program Files (x86)¥¥Graphviz2.38¥¥bin¥¥dot.exe"} #Image(graph.create_png()) #jupyter notebook表示用 #決定木の出力:PDFファイルに出力 graph.write_pdf("graph.pdf")
  22. 22. ボツ企画1-2 Scikit learnでMLP • 決定木はいいのだが、MLP の場合、出力が、各ケースの 確率ではなく、どのケースが 選ばれるか(それも小数点 で)となってしまい、説明し にくいので、Rでやることに した。 • 右にソース • 下に出力結果 こんな感じで何 番が選ばれるか を返す(確率で はなく) #MLP初期化 from sklearn.neural_network import MLPRegressor #データ入力 #学習用データは、エポック数分繰り返し学習される # 学習用データ(説明変数) data=[ [1,0,0,0,0,0], [0,1,1,0,0,0], [0,1,0,1,0,0], [0,1,0,0,1,0], [0,0,0,0,0,1] ] # 学習用データ(目的変数) target=[ 1,2,3,4,5, ] #入力(テスト)データ input=[ [1,0,0,0,0,0], [0,1,1,0,0,0], [0,1,0,1,0,0], [0,1,0,0,1,0], [0,0,0,0,0,1], [0,1,1,0,0,1] ] #学習実施 model = MLPRegressor(hidden_layer_sizes=(6,20,10,5),max_iter=20000) model.fit(data,target) #推論結果 predicted = model.predict(input) print(predicted) # 重みの出力・・・見てもわからないと思う W=model.coefs_ print(W)
  23. 23. ボツ企画2 酒屋倉庫問題で決定表 • 査読(閲覧)のときは、これを出していたが、査読(閲覧)結 果から、決定木の特色(MLPとの違い)を強調するため削除 • 書くスペースなかった・・・ • 決定表 • 結果は右のとおり
  24. 24. 付録:「3.決定木の作成・実施」の ソースコード • ソースコードは右のとおり • これを実行する前に、「ディレク トリの変更」をしてcsvファイルが あるところを指定すること library("rpart") #正解データ読み込み data<-read.csv("model.csv",header=TRUE) #モデル作成 model<-rpart(DO~.,data) #テストデータ読み込み mytest<-read.csv("mytest.csv",header=TRUE) #テスト実施 predict(model,mytest) #決定木の表示 plot(model) text(model,xpd=T)
  25. 25. 付録:「MLPでの学習・実施」のソース コード install.packages("RSNNS") library("RSNNS") data<-read.csv("model.csv",header=TRUE) mytest<-read.csv("mytest.csv",header=TRUE) X=data[,1:6] Y=decodeClassLabels(data[,7]) data <- splitForTrainingAndTest(X, Y, ratio=0.15) model <- mlp(data$inputsTrain, data$targetsTrain, size=c(30,5), learnFuncParams=c(0.1), maxit=2000, inputsTest=data$inputsTest, targetsTest=data$targetsTest) options(scipen=2) predict(model,mytest) weightMatrix(model) ●下がソースコード、 「ディレクトリの変更」をすることは、前に書いた通り 隠れ層を30ノードと多くしている理由は、最後のシートの【参考:MLPの隠れ層】を参照
  26. 26. 「本研究の位置づけ(1)(2)」の参 考文献 その1:論文 [SIFT]Distinctive Image Features from Scale-Invariant Keypoints https://www.robots.ox.ac.uk/~vgg/research/affine/det_eval_files/lowe_ijcv2 004.pdf [AlexNet]ImageNetClassificationwithDeepConvolutional NeuralNetworks https://www.cs.toronto.edu/~kriz/imagenet_classification_with_deep_convol utional.pdf [ResNet]Deep Residual Learning for Image Recognition https://arxiv.org/abs/1512.03385 [Vgg]VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION http://thunders1028.hatenablog.com/entry/2017/11/01/035609 [YOLO]You Only Look Once: Unified, Real-Time Object Detection https://arxiv.org/abs/1506.02640 [SSD]SSD: Single Shot MultiBox Detector https://arxiv.org/abs/1512.02325 [DQN]Playing atari with deep reinforcement learning http://www.cs.toronto.edu/~vmnih/docs/dqn.pdf [Rainbow]Rainbow: Combining Improvements in Deep Reinforcement Learning https://arxiv.org/abs/1710.02298 [R2D2R2D2: Repeatable and Reliable Detector and Descriptor https://arxiv.org/abs/1906.06195 [LDA]D. Blei, A. Ng, and M. Jordan, “Latent Dirichlet Allocation”, in Journal of Machine Learning Research, 2003, pp. 1107-1135. http://jmlr.csail.mit.edu/papers/v3/blei03a.html [Word2Vec]word2vec Explained: Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method https://arxiv.org/pdf/1402.3722.pdf [BERT]BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding https://arxiv.org/abs/1810.04805
  27. 27. 「本研究の位置づけ(1)(2)」の参 考文献 その2:参考 【参考:SAD,SSD,NCC】 テンプレートマッチングの原理・計算式・例題(SAD, SSD, NCC) https://algorithm.joho.info/image-processing/template-matching-sad-ssd-ncc/ 顔・人物画像検出のための特徴量と認識率について http://www.cc.kyoto-su.ac.jp/~kano/pdf/study/student/NishiuraPresen.pdf 【参考:SIFT】 SIFT (Scale-Invariant Feature Transform, スケール不変の特徴変換)の紹介 http://lang.sist.chukyo- u.ac.jp/classes/OpenCV/py_tutorials/py_feature2d/py_sift_intro/py_sift_intro.html 【参考:Haar-Like・HOG】 OpenCVで物体検出器を作成する② ~Haar-Like特徴~ https://www.pro-s.co.jp/blog/system/opencv/6231 【参考:音声(DTW、MFCC+GMM-HMM,MFCC+DNN-HMM,RNN)まとめ】 河原達也「音声認識技術」電子情報通信学会誌, Vol.98, No.8, pp.710--717, 2015. 【参考:各種Net】 代表的なCNNのアーキテクチャについて http://thunders1028.hatenablog.com/entry/2017/11/01/035609 【参考:YOLO】 YOLO: Real-Time Object Detection https://pjreddie.com/darknet/yolo/ 【参考:MLPの隠れ層】 ※MLPで隠れ層の1層目を多くしているのは、「横幅が広いと局所最 適解が大域的最適解になる」そうなので。 このことが書いてあるのが、以下の参考資料の165ページ目(Over- parametrization) 大阪大学集中講義 深層学習の数理 鈴木大慈 https://www.slideshare.net/trinmu/ss-161240890

×