Weitere ähnliche Inhalte Ähnlich wie 機械学習によるモデル自動生成の一考察 ー 決定表と決定木によるアプローチ - (20) Mehr von Michitaro Okano (20) 機械学習によるモデル自動生成の一考察 ー 決定表と決定木によるアプローチ -2. はじめに 研究のアイデア
• 開発の流れ
• 要求分析 → 設計 → 実装 → テスト
• 要求分析、設計の段階で、テストデータを作成することは可能:テスト駆動快活
• 機械学習の流れ
• データ→モデル構築(学習)→推論 : 予測を行う
• 機械学習の場合、データには誤差が伴う : 100%予測はできない
• ではここで、テストデータ、設計データ等を機械学習させれば、プ
ログラムは出力できるのか?
• 機械学習:特徴ベクトルを入力・学習、目的変数を出力
• 本研究:決定表を学習、決定表の条件部を入力し、行動を出力(=目的変数)
• 深層学習:特徴抽出も必要なくなってきている
• 強化学習:Q(S,A):状態を入力、行動を出力
3. 目次
• 提案手法ー決定表から決定木による自動化
• 自動化の比較
• ハッシュマップ
• 深層学習(MLP)
• 想定外データへの対応
• 決定木
• 深層学習(MLP)
• 本研究の位置づけ
• センサー→制御→出力(行動)と自然言語処理のトレンドの違い
• 今後の研究
• 状態遷移図:状態→特徴量(決定表)→機械学習 vs 強化学習
新規ないとのことだったので、この話は時
間が余った時、簡単に‥
決定木に新規性はなく、決定木が従来の
方法より優れているところをということ
なので、ここをMLPと比較し、詳しく
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回繰り返し)
※実際のデータは項目区切りはタブではなく,(カンマ)で区切られている
決定表
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. ボツ企画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)
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. 「本研究の位置づけ(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. 「本研究の位置づけ(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