Translate

#53 Section9 分類(6)予測

今回は、compare_models関数で求めた最も性能が良かったモデル(lr/logistic Regression)で、予測をしてみましょう。




 下記のコードは、setup()で分割したテストデータ(231行×9列/Transformed test set shape)に対して予測した結果を返してくれます。

holdout_pred = predict_model(モデル名)

宣言した『holdout_pred』のholdoutは、モデルを評価するデータを作るためにデータを分割することを意味しています。別に何と宣言してもいいのですが、わかりやすいように『holdout_pred』としておきましょう。

出力は、主な評価指標となります。

『compare_models』関数を使って、モデルを評価した際の評価指標一覧と比べて、どうでしょうか?正解率(Accuracy)とF1-score (F1)はやや下がっていますが、数値が高いまま維持されています。





次に、予測結果の性能評価をした「holdout_pred」の最初の5行を見てみましょう。

holdout_pred.head()

出力を見ると、テストデータに予測ラベルprediction_label)と予測確率prediction_score)が付与されていますね。

予測ラベル(prediction_label)は、予測されたインスタンスのクラスを表しています。「0」が糖尿病陰性、 「1」が糖尿病陽性でしたね。

また、予測確率(prediction_score)は、インスタンスが予測されたクラスである確率を表しています。





最も性能の良かったモデル「best」(lr/logistic Regression)をget_data('diabetes')で読込んだ「data」(訓練データ+テストデータ)すべてにあてはめて性能を確認してみます。

まずは、 「data」 の列名「Class variable」を削除し、 モデルをあてはめるデータを作成します。 「data」をコピーして、列名「Class variable」を削除し、「new data」と宣言します。次に「new data」の最初の5行を確認してみます。





下記のコードを使って、「new_data」で予測をしてみましょう!

predict_model(モデル名, data = データ名)

今回は、PyCaretが前処理で分離したテストデータを使うのではないので、引数としてデータ名も追加しておきます。

さて、予測した結果を「predictions」と宣言し、最初の5行を見てみます。






出力は、下図のようになります。

テストデータにおける予測結果と同じように予測ラベルと予測確率が付与されています。





既存のデータから新しいデータを作成し、予測してみました。

新規のデータが無い場合でも、このような工夫で、選択したモデルで予測をすることができます。

実際には、新しい患者さんのデータを、このモデル『best』に当てはめて、糖尿病か否かを予測することになります。














コメント