3
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

たった数行で機械学習体験(後編)。PyCaretを詳しく解説。モデルの構築と評価の分析。

Last updated at Posted at 2020-05-03

unseen dataに関して

PyCaretを勉強していると、unseen dataをテストデータと勘違いしそうですが、unseen dataはテストデータではあるのですが詳しく説明すると、

トレーニングデータで予測モデルを作成
トレーニングデータにテストデータを組み合わせて最終予測モデルを作成
最後に、そのモデルにunseen dataを入力して、モデルの精度を確認

という流れになります。

前回のおさらい

たった数行で機械学習体験(前編)。PyCaretを詳しく解説。データセット準備から複数モデルの精度比較まで。の続きになります。
前回はデータセットの準備から、モデルの精度比較まで行いました。

今回の目的

part2では、モデルの作成から、プロット、最終モデルの作成までを行います。

訓練データを使ってモデルを作成

compare_models()の目的は、トレーニングされたモデルを作成する事ではなく、パフォーマンスの高いモデルを評価し、モデルの候補を選定する為にあります。今回は、ランダムフォレストを使ってモデルをトレーニングします。

code.py
rf = create_model('rf')

image.png

tune_model()は、ハイパーパラメーターのランダムグリッドサーチです。デフォルトでは、精度を最適化するように設定されています。

code.py
tuned_rf = tune_model('rf')

image.png

例えば、ランダムフォレストで、AUCの値を高くするモデルを作成したい場合は、以下のようなコードになります。

code.py
tuned_rf_auc = tune_model('rf', optimize = 'AUC')

tuned_modelで作成したモデルの方が、1.45%精度が高くなったので、こちらを使っていきます。

モデルの精度をプロット

AUC Plotを実行

code.py
plot_model(tuned_rf, plot = 'auc')

image.png

Precision-Recall Curve

code.py
plot_model(tuned_rf, plot = 'pr')

image.png

Feature Importance Plot

code.py
plot_model(tuned_rf, plot='feature')

image.png

code.py
evaluate_model(tuned_rf)

image.png

Confusion Matrix

code.py
plot_model(tuned_rf, plot = 'confusion_matrix')

image.png

訓練データとテストデータを組み合わせて予測モデルの作成へ

最終的に予測モデルを完成させる前に、テストデータを使って、学習モデルが過剰適合していないか確認します。ここで、精度の差が大きくなってしまう場合は、検討が必要になりますが、今回は精度に大きな違いは無いので先に進みます。

code.py
predict_model(tuned_rf);

image.png

いよいよ最終版の予測モデルが完成します。
ここのモデルには、トレーニングデータとテストデータが組み合わさったモデルが完成されます。

code.py
final_rf = finalize_model(tuned_rf)
print(final_rf)

RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,
criterion='gini', max_depth=10, max_features='auto',
max_leaf_nodes=None, max_samples=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=2, min_samples_split=10,
min_weight_fraction_leaf=0.0, n_estimators=70,
n_jobs=None, oob_score=False, random_state=123,
verbose=0, warm_start=False)

code.py
predict_model(final_rf);

image.png

精度やAUCのパフォーマンスが高くなっていますね。これはテストデータが組み合わさり、予測モデルの品質が向上したからです。

unseen dataを用いてモデルの評価

では、最後にunseen data(1200のデータセット)を使って、予測モデルを評価します。

code.py
unseen_predictions = predict_model(final_rf, data=data_unseen)
unseen_predictions.head()

image.png

データセットに、LabelとScoreが追加されています。
Labelは、モデルが予測したラベルになります。
Scoreは、予測の確率になります。

モデルの保存

予測する新しいデータが増えた場合に、もう一度最初から実行するのは大変です。PyCaretには、save_modelが用意されており、モデルを保存しておく事ができます。

code.py
save_model(final_rf,'Final RF Model')

Transformation Pipeline and Model Succesfully Saved

保存したモデルのロード

モデルのロードをするには、以下を実行します。

code.py
saved_final_rf = load_model('Final RF Model')

Transformation Pipeline and Model Sucessfully Loaded

先ほどのunseen dataを使います。結果は、先ほどと同じなので省略します。

code.py
new_prediction = predict_model(saved_final_rf, data=data_unseen)
code.py
new_prediction.head()

さいごに

Level Beginnerチュートリアルの解説の実行をしてみました。
十数行で、ここまでできてしまうのはびっくりです。
機械学習をするハードルが、さらに低くなった気がします。

ご指摘等あれば、コメントいただければと思います。
読んでいただき、ありがとうございました。

3
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?