【KNIME】KNIMEで作った予測モデルを配りたい
お久しぶりです。気が付けば年末です。皆様いかがお過ごしでしょうか?
傍から見れば、意味が無かったり・スピードがゆっくりに見えたり、場合により私の能力の低さに対して不愉快な印象をもつ方も周囲にはいるようですが、個人的にはinputを積極的に続けている日々です。集団ってのは怖いものです。
さて、今回は"KNIMEで作ったモデル"を配りたいときにどうするか?というショートな記事です。ニッチな内容です。
さてさて急に話が始まりますが、scikit-learn(pythonで機械学習するときに使えるとっても便利なライブラリ)などでモデル作って、「joblib(やpickle等)でdumpしたからどうぞー」みたいなことをされても、受け取る側が???になる場合ってのがあるわけです。"まずはKNIMEでやりたいの!"っていう需要があると思うんです*1。で、今回のタイトルのように学習済みのモデルを配布したいという場面に遭遇した場合、KNIMEはメモリを結構喰うので、学習に必要となったデータ量が大きかったり・処理が複雑だったりするとワークフローをそのまま提供すること自体気が引けるし、相手のマシンスペックによっては動かない場合も想定されます。
でも、まあ心配は要りません。ちゃんと学習済みのモデルを保存できますよ!irisデータセットを使って、雑ですが試してみましょう!
かっ飛ばしていきます。irisのデータを読みました(詳細割愛)。で、ランダムにシャッフルして(詳細割愛)、training:80%, test:20%にランダムで分けました(Partitioning: 設定画面は下の感じです)。
で、設定はデフォルトのままrandamforest learnerに繋ぎました。ここの話がメインではないので。詳しく知りたい方は、t_kahi氏が綺麗にまとめているので、合わせて読むと良いです。
この時に今回のメインである、Model Writerにつないで、モデルを書き出しましょう!設定することは、書き出しの場所だけ。形式はzipです。overwrite OKにしておけば、モデルの更新時に楽チンですね。今回の場合、モデル(zip)のファイルサイズは8Kでした。
書き出したモデルは読み込めば使えます。上で保存したモデルを読んで(Model Reader)、predictorに繋ぎます。learnerから直で繋いだ結果と、保存したモデルを読み込んで予測させた結果を比べてみましょうね。
probabilityも含めて、全く一緒なのが確認できると思います(そりゃそうだ)。
なので、下みたいな感じにモデルを作る人、モデルを使わせてもらう人でワークフローを分ければ、わかりやすく運用できるのではないでしょうか?
モデルのファイルを配布してもいいんですが、モデルの保存先を共有フォルダ(サーバーとか)にしておいて、モデルの読み込みはいつもそこから行うってことにしておけば、モデルを使わせてもらう人の設定は、予測させたいデータの場所だけになるので、より運用しやすいのではないかと思います。
大したことない内容ですが、どこかで役に立ってくれることを祈っています。
それでは皆様良いお年を!そして2020年も宜しくお願いします!