今回は、クロスバリデーションという手法でモデルの妥当性を検証しました。
学習したデータに対してとても良い精度を出すモデルであっても、予測が必要な新たなデータに対する精度が非常に低い、いわゆる「過学習」という状態になることが良くあります。こうならないように、汎用的に良い精度になるモデルを作成するためには、妥当性の検証が必要になります。
その1手法であるクロスバリデーションに挑戦しました。
今回も Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]の第4章を参考にさせていただきながら、取り組んでいます。
今回は、Jupyter notebookを使って実行を行いました。
Jupyter notebookについては、以下もご参照ください。
では、振り返っていきたいと思います。
クロスバリデーションとは、日本語では「交差検証」とも呼ばれます。 この手法は、データを複数のグループに分割して、学習用データと、検証用データを入れ替えていくことで少ないデータでもモデルの妥当性を評価することができる検証法になります。 例:4つのグループに分割する場合 コード全体は以下の通りで、Jupyter Notebook上で実行しました。 では、コードを順番に見ていきます。 scikit-learnには、分類や、回帰などの機械学習のサンプルデータとして、色々なデータが用意されています。 その中で、今回は、アヤメ(iris)のデータを使って品種を分類を実施します。 datasetsをimportしておいて、load_iris()メソッドを使う事で、データを取得できます。引数に、return_X_y=Trueを渡す事で、予測に使うデータと(説明変数X)と、分類のラベル(目的変数y)が取得できます。 以前も利用した、scikit-learnからインポートしたsvm(サポートベクターマシン)のモジュールから、SVC(Support Vector Classification)のクラスを呼び出して、サポートベクターマシンを使った分類ができるモデルの実体を作ります。 ただし、今回は「kernel='liner'」を指定し、線形に分離します。また、「C=1」は、誤分類の許容度を表して、小さければ小さいほど誤分類を許容します。 sklearn.model_selectionモジュールの、cross_val_score()メソッドを使って、クロスバリデーションを行ってモデルの評価を行います。 これまでと違って、学習用データを使って学習(fit())を行い、検証データから予測(predict())を行ってから、精度(accuracy_score())などを求めるのではなく、一気に学習、検証、精度計算まで実施できます。 先ほど作成したファイルをJupyter Notebook上で実行してみます。 以下の通り、クロスバリデーションを実施して、このモデルの精度が測定できました。 正解率は、98%となり、前回単純に作成したSVMモデルの93%より精度が上がりました。前回の実施内容は以下の通りです。 次回は、グリッドサーチを使った、ハイパーパラメータのチューニングを行っていきたいと思います。 今後も、Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]で、スクレイピングと機械学習開発に取り組んでいきたいと思います。 【過去記事】 2019年8月31日(土)にE資格を受験して、合格しました! E資格対策として勉強の進め方や、参考書などをまとめました。 これから受験される方がいらっしゃいましたらご参考まで。 2019年3月9日(土)にG検定を受験し、見事合格できました! 受験の体験記や勉強法などを別のブログにまとめました。 これから受験される方がいらっしゃいましたらご参考まで。 【E資格対策に使った参考書】 クロスバリデーションでモデルの妥当性を検証する
1.クロスバリデーションとは
2.全体像
3.アヤメのデータを読み込む
4.モデルを定義する
5.クロスバリデーションを行う
6.Jupyter Notebook上で実行してみる