非プログラマーのためのインフォマティクス入門。(仮)

非プログラマーがインフォマティクスについて勉強したことを記録します。主にKNIMEというソフトを使用しています。

非プログラマーのためのインフォマティクス入門。(仮)

【KNIME】KNIMEで作った予測モデルを配りたい

お久しぶりです。気が付けば年末です。皆様いかがお過ごしでしょうか?

傍から見れば、意味が無かったり・スピードがゆっくりに見えたり、場合により私の能力の低さに対して不愉快な印象をもつ方も周囲にはいるようですが、個人的にはinputを積極的に続けている日々です。集団ってのは怖いものです。

さて、今回は"KNIMEで作ったモデル"を配りたいときにどうするか?というショートな記事です。ニッチな内容です。

f:id:sumtat:20191226223047j:plain

さてさて急に話が始まりますが、scikit-learn(python機械学習するときに使えるとっても便利なライブラリ)などでモデル作って、「joblib(やpickle等)でdumpしたからどうぞー」みたいなことをされても、受け取る側が???になる場合ってのがあるわけです。"まずはKNIMEでやりたいの!"っていう需要があると思うんです*1。で、今回のタイトルのように学習済みのモデルを配布したいという場面に遭遇した場合、KNIMEはメモリを結構喰うので、学習に必要となったデータ量が大きかったり・処理が複雑だったりするとワークフローをそのまま提供すること自体気が引けるし、相手のマシンスペックによっては動かない場合も想定されます。

でも、まあ心配は要りません。ちゃんと学習済みのモデルを保存できますよ!irisデータセットを使って、雑ですが試してみましょう!

f:id:sumtat:20191226191240p:plain

全体図

かっ飛ばしていきます。irisのデータを読みました(詳細割愛)。で、ランダムにシャッフルして(詳細割愛)、training:80%, test:20%にランダムで分けました(Partitioning: 設定画面は下の感じです)。

f:id:sumtat:20191226191740p:plain
 で、設定はデフォルトのままrandamforest learnerに繋ぎました。ここの話がメインではないので。詳しく知りたい方は、t_kahi氏が綺麗にまとめているので、合わせて読むと良いです。

この時に今回のメインである、Model Writerにつないで、モデルを書き出しましょう!設定することは、書き出しの場所だけ。形式はzipです。overwrite OKにしておけば、モデルの更新時に楽チンですね。今回の場合、モデル(zip)のファイルサイズは8Kでした。

f:id:sumtat:20191226195756p:plain

書き出したモデルは読み込めば使えます。上で保存したモデルを読んで(Model Reader)、predictorに繋ぎます。learnerから直で繋いだ結果と、保存したモデルを読み込んで予測させた結果を比べてみましょうね。

f:id:sumtat:20191226200444p:plain

左:learnerに直接繋いだ方、右:読み込んだモデルを使った方

probabilityも含めて、全く一緒なのが確認できると思います(そりゃそうだ)。

なので、下みたいな感じにモデルを作る人、モデルを使わせてもらう人でワークフローを分ければ、わかりやすく運用できるのではないでしょうか?

f:id:sumtat:20191226201159p:plain
f:id:sumtat:20191226201208p:plain
左:モデルを作る人 右:モデルを使わせてもらう人

モデルのファイルを配布してもいいんですが、モデルの保存先を共有フォルダ(サーバーとか)にしておいて、モデルの読み込みはいつもそこから行うってことにしておけば、モデルを使わせてもらう人の設定は、予測させたいデータの場所だけになるので、より運用しやすいのではないかと思います。

大したことない内容ですが、どこかで役に立ってくれることを祈っています。

それでは皆様良いお年を!そして2020年も宜しくお願いします!

 

*1:逆に言えば、pythonなどを使いたくなった時には、KNIMEでやってたことをコードにすればいいので、なんとなくできそうなことが想像し易い。調べるきっかけができるというのは助かるはず