前のステップで 訓練 が終わりました。
ここからは モデルを評価 します。つまりモデルの "賢さ" を具体的な数値で確認します。
さらに、別のアルゴリズムで学習モデルを作り、前のステップで作成したモデルと比較してみます。結果がよいものを採用すれば、よりよい予測ができます。
あるデータセットを使って訓練することで、モデルは知能を獲得します。ただし、それだけでは どのくらい賢いか が分かりません。
別のデータセットを使って、実際に学習済みのモデルを使って予測してみます。
評価で使うのは 正解が分かっているデータセット です。ただし訓練に使ったデータセットとは別のものです。
フォーマットは訓練に使ったデータセットから Survived 列(予測対象の列)を削除したものです。
訓練用のデータセットで予測し、その結果と正解とを比較することで "賢さ" が数値で分かります。"精度" (=データセットの件数に対して何個正解したか) が分かりやすい指標だと思いますが、他の数値でも賢さの判断に利用できます。
評価することで具体的な賢さが分かりますが、ベストの学習だったとは言い切れません。
そこで別のモデルを作って、それも評価します。それぞれのモデルの賢さを比較して、よりよいモデルを採用します。
何個のモデルを比較すればいいのか、ルールはありません。開発のコストを考慮した上でどれだけ比較するかを決めます。
-
モジュール一覧で、[Machine Learning]-[Score]-[Score Model] を Experiment にドロップします。続いて、"Train Model" の出力ノードと "Split Data" の右側の入力ノードとを接続します。
評価には、訓練には使用していないデータセット が必要です。
Machine Learning Studio にインポートした元のデータセットを 4:1 (80%と20%) とに分けました。その一方 (20% のほう) が残っています。評価ではこのデータセットを使います。"Split Data" モジュールの右側の出力ノードから出てくるデータセットです。 -
[Run]-[Run selected] で未実行のモジュールを実行します。[Score Model] の出力ノードを右クリックして、[Visualize] を選択します。
-
モデルのスコアが表示されます。
Survived が求めるべき値、Scored Labels が学習済みモデルが予測した値です。
ざっと見ると正解しているものが多そうですが、定量的な見方ではありません。そこで次の操作に進みます。
-
モジュール一覧で、[Machine Learning]-[Evaluate]-[Evaluate Model] を Experiment にドロップします。続いて、"Score Model" の出力ノードと "Evaluate Model" の左側の入力ノードとを接続します。
-
[Run]-[Run selected] で未実行のモジュールを実行します。[Evaluate Model] の出力ノードを右クリックして [Visualize] を選択します。
結果画面には ROC 曲線 が表示されます。詳しい説明は省略しますが、曲線の下側の面積が大きいほど学習モデルが "賢く"、傾きが 45度の直線に近いほど "賢くない" ことを意味します。
結果画面を下にスクロールするといくつかの数値が表示されています。
まずは "Accuracy" と "F1 Score" に注目するとよいでしょう。どちらも 1 に近いほど 優秀なモデルであることを意味します。"Accuracy" はモデルの "精度" を表します。"F1 Score" は総合的な "成績" を表します。
Accuracy が 0.798 なので、80% 程度は正しく予測できるモデルだと言えます。
モデルの用途によっては、"Precision" と "Recall" の値も気にかける必要があります。
ここまでが 学習の一連の操作 です。
ただし、どのくらい優秀だと言えるのか、もっと優秀なモデルは作れないのか、など疑問が残ります。
そこで続いて、同じデータセットを 別のアルゴリズム で訓練して、比較してみます。
別のアルゴリズムで、今回のデータセット(Split Dataした後のデータセット)を訓練してみます。
手順は 前のステップ と、このステップとで行った
- アルゴリズムの決定
- モデルを訓練する
- モデルを評価する
と同様のものです。
使用するアルゴリズムは今回は、 Two-Class Neural Network (モジュール一覧で、[Machine Learning]-[Initial Model]-[Two-Class Neural Network]) にします。
"Evaluate Model" で "Visualize" すると、今回のアルゴリズムで訓練したモデルの評価結果が表示されます。
二つのモデルのAccuracy, F1 Score を比較してみます。
モデルで使用したアルゴリズム | Accuracy | F1 Score |
---|---|---|
Two-Class Support Vector Machine | 0.798 | 0.710 |
Two-Class Neural Network | 0.826 | 0.726 |
"Two-Class Neural Network" を使ったモデルのほうが優秀であることが分かりました。
数値だけの比較では Two-Class Neural Network が優秀だというだけで、常にこちらを使うべきということではありません。
目的や用途に応じて、Two-Class Support Vector Machine を使うほうが良い、または使ってもよいということはあります。 目的を満たすのであれば、必ずしもスコアが一番高いモデルである必要はありません。
二つのモデルについて、Accuracy, F1 Score の数値を比較しました。
視覚的に、もう少し分かりやすく比較してみましょう。
- モジュール一覧で、[Machine Learning]-[Evaluate]-[Evaluate Model] を Experiment にドロップします。
- 一方の "Score Model" (Two-Class Support Vector Machine から接続されたもの) の出力ノードと "Evaluate Model" の 左側の入力ノード とを接続します。
- もう一方の "Score Model" (Two-Class Neural Network から接続されたもの) の出力ノードと "Evaluate Model" の 右側の入力ノード とを接続します。
- [Run]-[Run selected] で未実行のモジュールを実行します。最後に置いた [Evaluate Model] の出力ノードを右クリックして [Visualize] を選択します。
二つのモデルの ROC 曲線が表示されます。部分的に逆転している箇所がありますが、右側の入力ノード (あとで作った Two-Class Neural Network から接続されたもの) のほうがグラフが上になっているのが分かります。
ここまでで、学習モデルを 作成 し、どの程度 "賢い" のかを評価しました。
次のステップでは、作成した学習モデルを Web サービスとして クラウドに発行 します。
せっかく作ったモデルなので、サービスとして利用できるようにしましょう。