2021-10-18機械学習モデルの性能を評価する手法の1つにホールドアウト検証があります。本記事では、Pythonの機械学習ライブラリであるscikit-learnを活用してホールドアウト検証を行う処理の実装方法について解説します。そもそも「ホールドアウト検証」とは?まずはホールドアウト検証とは何かについて簡単に説明します。モデルのテストでは、任意のデータに対して予測を行い、その予測がどの程度正しいかを調べます。テストを行う際、モデルの学習に使用したデータは使用することができません。モデルは学習データに対して正しい予測ができるように学習を進めるため、学習の完了したモデルに学習データを入力すればほぼ必ず正しい予測が得られるからです。答えを知っている問題でテストをしても適切な性能評価は行えません。そのため、機械学習モデルを構築する際は、元のデータセットを学習用とテスト用に分割して使用するのが一般的です。このやり方のことをホールドアウト検証と言います。「ホールドアウト検証」の実装例を紹介それでは、ホールドアウト検証の実装例をいくつか紹介しましょう。紹介するサンプルプログラムの言語にはPythonを使用しており、機械学習ライブラリのscikit-learnを活用してモデルを構築しています。train_test_splitメソッドを利用する最も簡単な方法はscikit-learnのtrain_test_splitメソッドを利用する方法です。train_test_splitメソッドは与えられたリストを複数個に分割するメソッドであり、このメソッドを利用すれば簡単にホールドアウト検証を実装できます。None):分割に使用する乱数のシード【引数】shuffle(bool):データをシャッフルするか否か【戻り値】分割後のリスト(複数個)この方法でのホールドアウト検証の実装例を以下に示します。test_y)))このプログラムを実行すると以下の出力結果が得られます。0.98個人的にはこの方法が最も簡単なので、特に理由がなければこの通りに実装することをおすすめします。スライスによるリスト分割を利用するもう一つはスライスによるリスト分割を利用する方法です。スライス操作によってリストを任意のインデックス以前と以後に分割することでホールドアウト検証を実装します。test_y)))このプログラムを実行すると以下の出力結果が得られます。0.98なお、スライス操作だけでは元のデータセットを格納したリストの中身が[0,0...1,1...2,2]のように特定のグループごとの塊になっている場合は上手く分割できません。分割後のリストの中身に偏りが出てしまうからです。これは元のデータセットの中身をシャッフルする処理を同時に実装すれば解決できますが、少し面倒なのでこのやり方はあまりおすすめしません。※train_test_splitメソッドでは、元のデータセットのシャッフルは自動で行われます。@htt_mdk・ITエンジニア・プログラミング関連の情報をメインに発信していきます。ProDesigns。