Pythonによるデータ分析・機械学習ブログ

Pythonによるデータの前処理・グラフ化、機械学習、統計解析、画像処理、Webスクレイピング、自然言語処理の基礎について紹介していきます。

MENU

【第6回】ホールドアウト検証と交差検証による汎化能力の評価

はじめに

 ここまで、回帰や分類を行ってきました。これまでの記事では触れてきませんでしたが、回帰や分類のモデルを構築する際には、データセットを学習用データとテストデータに分割して学習データからモデルを構築して、構築したモデルを用いてテストデータから予測を行ってきました。そして予測結果と本来の実績(テストデータの目的変数)を比較して精度を評価してきました。テストデータは未知のデータとして扱われており、未知のデータに対して精度よく予測できる能力を汎化能力と言います。これまでの記事では最後に汎化能力を評価していたことになります。

 汎化性能を評価するために、モデルを構築するための学習データと汎化性能の評価に使用するテストデータの分割する必要があります。学習データとテストデータを分割した代表的な汎化性能の評価方法として「ホールドアウト検証」と「K分割交差検証」があります。

 本記事では、「ホールドアウト検証」と「K分割交差検証」について簡単に紹介していきます。

SAMURAI TERAKOYA

 

1. ホールドアウト検証

ホールドアウト検証は学習用データとテストデータの一定の割合で2つに分割して学習データからモデルを構築し、構築したモデルを用いてテストデータから予測結果を導き出して、汎化性能を評価します。

 

それではプログラムを確認していきましょう。

以下の例では乳がんのデータセットを用意して、ホールドアウト法により学習データとテストデータに分割しています。この方法で使用するのが、sklearn.model_selection.train_test_splitです。Xに説明変数、Yに目的変数、test_sizeにテストデータに充てる割合を指定します。以下の例ではtest_sizeに0.3を指定しているので、データセットの7割が学習データ(x_train、y_train)、3割がテストデータ(x_test、y_test)になります。

出力結果を見ると、データセット全体のデータ数は569個、学習データ数は398個、テストデータ数は171個となっており、テストデータが約3割になっています。

ホールドアウト検証の具体的なコードはこれまでに記載してきましたので省略します。確認したい方は以下の記事を参照してください。

 

chantastu.hatenablog.com

 

chantastu.hatenablog.com

 

2. k分割交差検証

k分割交差検証はデータセットをk個に分割してその内の1個をテストデータ、その他のk-1個を学習データとし、学習データからモデルを構築して、構築したモデルを用いてテストデータから予測結果を導いて精度評価を行います。テストデータに充てるデータを変えながら、上記の作業をk回繰り返します。そしてそれぞれの評価指標の平均値を求めて精度評価を行います。以下の例は6分割交差検証を行った際のイメージ図です。

 

それではプログラムを確認していきましょう。

以下の例では乳がんのデータセットを用意、回帰モデルとしてランダムフォレストのモデルを用意します。k分割交差検証を行うにはsklearn.model_selection.cross_val_scoreを用います。引数には使用するモデル(frf)、説明変数(X)、目的変数(Y)、分割数(cv)、評価指標(scoring)を指定しています。ここでは、モデルはランダムフォレスト、分割数に10、評価指標に決定係数R2を指定しています。評価指標に設定できる内容はこちらの記事を参考にしてください。結果を見るとscoreはリストで出力されており、10個の決定係数が格納されています。最終的にその10個の決定係数の平均値を精度評価の指標とします。

 

さらに、目的変数のクラスを一定とするk分割交差検証を層化k分割交差検証と言います。これにより各ブロックの目的変数のクラスの割合を全体の割合と一緒になるようにします。層化k分割交差検証にはsklearn.model_selection.StratifiedKFoldを用います。

 

オススメ書籍

Pythonによるあたらしいデータ分析の教科書

Python3エンジニア認定データ分析試験の教科書にもなっている書籍で、データ分析に必要なPythonの基礎手法を身に付けることができます。具体的には、numpyとpandasを用いたデータの前処理、matplotlibを用いたデータのグラフ化、scikit-learnを用いた機械学習の基礎記述方法を身に付けることができます。これ一つで基礎はバッチリで、実務でも十分活用できると思います。個人的には見やすい書籍でした。

データサイエンス教本 Pythonで学ぶ統計分析・パターン認識・深層学習・信号処理・時系列データ分析

こちらの書籍は初心者から少し記述できるようになった人、かつ数学的な理論と一緒にPythonの記述方法を理解したい方にオススメです。統計分析、パターン認識、深層学習、信号処理、時系列データといった幅広く実務で使用する手法を学びたい方にもオススメです。

東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~

こちらの基礎を抑えながら実務で必要なPython記述法を学べる書籍です。基礎を一つ一つ抑えるというよりも実務で活用できるように必要な知識を身に付けられると感じました。これ一冊あれば十分かなと思いました。

 

スキル修得&転職

 近年、DXの進展に伴うデジタル人材の需要の高まりに追いついていない状況が続いていると経済産業省がホームページで記載している通り、DX人材、IT人材が不足しているのが現状です。さらにコンピュータの性能向上やAI技術の発展により、よりDX人材、IT人材の需要が高まってきます。さらには、今後の長期間安定して職がある業種とも考えられます。

以下の求人では、IT業界の転職や、IT未経験だけどIT人材を志望する就活を支援してくれます。無料で会員登録もできるので、まずは登録だけでもして様子を見てみてはいかがでしょうか?

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

 

おわりに

本記事では、未知のデータに対して精度よく予測できる能力である汎化能力を評価する方法として、「ホールドアウト検証」と「K分割交差検証」について簡単に紹介しました。精度評価には必要な内容になるので、使用方法をマスターしましょう。