プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

分類器の性能を評価する方法とは?代表的な3つの評価手法を解説

機械学習では、訓練中にモデルの汎化誤差(generalization error)を推定する手法がいくつか存在します。この誤差の推定値は、学習アルゴリズムがモデル選択を行う際の重要な指標となり、過学習(overfitting)に陥らない適切な複雑さを持つモデルを見つけるのに役立ちます。

モデルが構築された後は、テストセットを用いて、まだ見たことのないデータのクラスラベルを予測できます。テストセット上でモデルの性能を測定することは、汎化誤差の偏りのない(unbiased)推定値を得られるため非常に有用です。テストセットから求めた精度や誤り率は、同じドメインにおける複数の分類器の相対的な性能を比較する際にも活用できます。

ここでは、分類器の性能評価によく用いられる代表的な手法を3つ紹介します。

1. ホールドアウト法(Holdout Method)

ホールドアウト法では、ラベル付きデータからなる元のデータセットを、訓練セットとテストセットという2つの互いに重ならない集合に分割します。訓練セットから分類モデルを構築し、その性能をテストセット上で評価します。分類器の性能は、テストセット上での構築済みモデルの成績に基づいて算出されます。

しかし、ホールドアウト法にはいくつかのよく知られた欠点があります。

第一に、テスト用に一部のデータを確保するため、訓練に使えるラベル付きデータが減少します。その結果、すべてのラベル付きデータを訓練に使えた場合と比べて、構築されるモデルの質が低下する可能性があります。

第二に、モデルの性能が訓練セットとテストセットの分割の仕方に大きく依存してしまう点です。どのデータを訓練に回すかによって評価結果が変動しやすくなります。

さらに、逆に訓練セットを大きく取りすぎると、小さくなったテストセットから算出される精度の推定値の信頼性が下がります。つまり、推定値の信頼区間が広くなってしまうのです。

2. ランダムサブサンプリング(Random Subsampling)

ホールドアウト法を複数回繰り返すことで、分類器の性能推定の精度を高めることができます。この手法はランダムサブサンプリングと呼ばれます。

i番目の反復におけるモデルの精度を acci とすると、全体の精度は次の式で表されます。

accsub = Σi=1〜k acci / k

ただし、ランダムサブサンプリングにもホールドアウト法と同様の課題があります。利用可能なデータを十分に訓練に使えない点です。さらに、各データが訓練・テストに使用される回数を制御できないため、一部のデータが他のデータよりも多く訓練に使われる可能性があります。

3. クロスバリデーション(Cross-Validation)

ランダムサブサンプリングの代替手法として、クロスバリデーションがあります。この手法では、各データが複数回訓練に使用され、テストには正確に1回だけ使用されます。

例えば、データセットを同じサイズの2つの部分集合に分割できる場合を考えてみましょう。まず、一方の部分集合を訓練に、もう一方をテストに使用します。次に、両者の役割を入れ替え、先ほど訓練セットだった側を今度はテストセットとして使用します。この手法は「2分割交差検証(twofold cross-validation)」と呼ばれます。

  1. Java 9のSubscriptionインターフェースのルールとは?基本から徹底解説

    Java 9で導入されたReactive Streams(java.util.concurrent.Flow)において、SubscriptionはPublisherとSubscriberの間のデータ交換を仲介するための重要な役割を担います。Subscriptionは必ず1つのPublisherと1つのSubscriberのペアでのみ共有されます。そのため、subscribe()メソッドは生成されたSubscriptionを返さず、戻り値はvoidになっています。SubscriptionはonSubscribe()メソッドのコールバックを通じてのみSubscriberへ渡されます。Subscri

  2. Java 9のインターフェースで使えるプライベートメソッドのルールと使い方を解説

    Java 9では、インターフェースにプライベートメソッドという新機能が追加されました。private修飾子を使用して定義でき、Java 9以降では、インターフェース内にprivateメソッドとprivate staticメソッドの両方を記述することが可能です。 インターフェースにおけるプライベートメソッドのルール メソッド本体が必須: プライベートメソッドにはインターフェース内で本体(処理内容)が必要です。通常の抽象メソッドのように宣言することはできません。本体なしで宣言しようとすると、「This method requires a body instead of a semicolon(セ