Dashで機械学習ができるWebアプリを作る [ラスト]
Dashを使って、機械学習をさせるWebアプリケーション作ろうStep5!ラスト!
いやー長かったですね。
ようやく完成です!
またまたおさらいします。一応ね。
Step1: タイトルとデータアップロードの枠だけ作り、cssでいい感じに表示させる
Step2: 単純な線形モデルを作り、グラフとスコアを表示させる
Step3: モデルを選択するドロップダウンを作って、選択したモデルに応じて出力結果が変わるような動的なページを作る
Step4: ファイルをアップロードし、データフレームとして表示させる
ラストはここ!!↓
Step5: アップロードしたデータを読み込んで学習させるようにする
今回のステップを経ると、無事、完成品ができます!
最初、何もグラフとして表示されていたなかった淡白なページに、
データがアップロードされ…
自動的にデータの中身を読み込んで学習されるようなアプリになりました。
今回は、前回、callbackのOutput
としてdash_table.Datatable
の中身を返しましたが、
今回はそれをInput
として、モデルの学習に使います。
かっこよく言ってchain callbackってやつ。
コールバックの全体像はこんな感じ
スタートはデータのアップロードから。
それとは別にモデルの種類を選択するドロップダウンも作って、
その両方の情報を機械学習に使う。
そろそろ、callbackの雰囲気も掴めてきたのではないでしょうか?
Step3では、ドロップダウンで選択したモデルを値としてInputして、学習させていました。
この時データは、一番最初にdf = pd.read_csv
で読み込んでいました。
が、今回は、手動でアップロードし、data_tableに送られたデータの情報がInputとして追加で必要になります。
@app.callback([Output('rmse-sentence', 'children'), Output('r2-sentence', 'children'), Output('residual-plot', 'figure') ], [Input('model-dropdown', 'value'), Input('output-data-upload', 'data')] ) def update_result(model_name, dict_data): # コールバックが起こるがまだデータはアップロードされていないので、例外処理を行う if dict_data is None: raise dash.exceptions.PreventUpdate # アップロードしたデータテーブルの中身を読み込む df = pd.DataFrame(data=dict_data)
data_tableに格納されているデータの型はdict型で、pd.DataFrame(data=)
でデータフレームに変換することができます。
あとのモデルを学習させる続きは、Step3と一緒です(雑)
終わりに
これでようやく完成しました〜〜
ここまで見てくれてありがとうございました!
へ〜こんな簡単にアプリ作れるんだ!と実感してくれたら嬉しいです。
今回、モデルは2つしか使っていませんが、
ドロップダウンを増やしたり、
パラメータを変化させたり、、、
簡単な前処理も施せるかも。
ここから、色々機能を追加できると思います!
ぜひ色々試してみてください。
私はちなみに、学習モデルとして勾配ブースティングと決定木のアンサンブルモデルであるXGboostも付け足してみて、
loading機能も加えてちょっとお洒落にしてみました。
やっぱり、スコアは3つのモデルの中でxgboostが一番よかった。
若干自己満な感じあるけど、楽しかったからよし。笑
ここまで読んでくれてありがとうございました〜〜!!!