内容
15stepで踏破 自然言語処理アプリケーション入門 を読み進めていくにあたっての自分用のメモです。
今回は2章Step07で、自分なりのポイントをメモります。
準備
- 個人用MacPC:MacOS Mojave バージョン10.14.6
- docker version:Client, Server共にバージョン19.03.2
章の概要
- 機械学習システムの予測精度を様々な指標で定量評価する
- 既存のシステムに改良を加える場合に、かえって性能低下を起こしていないことを評価によって保証し、安心してシステムをアップデートできる
- 過学習について理解し、発生を防ぐ
07.1 学習データとテストデータ、そして過学習と汎化
学習によって、識別器が学習データに対して過剰に適合してしまうことを過学習と呼ぶ。
学習データに含まれる特徴ベクトルを100%識別できるようにすると、無視しても良いノイズまでも正しく識別できるように細かい識別面になってしまう。
学習データ以外に対しても安定して予測が行えるようになることを汎化と呼ぶ。
学習と評価で同じデータを使うと、過学習したシステムを高く評価してしまうことになるので、評価用のテストデータは学習データと違うものを使って評価しなければならない。
(いくら学習データで良い精度が出てもあまり意味がないし、過学習していないことも確認しなければいけない)
07.2 評価指標
項目 | 内容 |
---|---|
Accuracy(正解率) | 全テストデータに対する正解テストデータの割合 |
Precision(適合率) | 対象クラスに予測したテストデータのうち、正解テストデータの割合 |
Recall(再現率) | 対象クラスのテストデータを正しく予測できた割合 |
F値 | PrecisionとRecallのバランスを表した指標 |
実装
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
accuracy_score(y_true, y_pred)
precision_score(y_true, y_pred)
recall_score(y_true, y_pred)
f1_score(y_true, y_pred, average='macro')
-
average
を指定することで、マクロ平均='macro'
やマイクロ平均='micro'
を算出できる - precisionとrecallはトレードオフの関係
07.3 評価の際の注意点
項目 | 内容 |
---|---|
精度の下限 | 精度の下限は当てずっぽうに予測した場合である |
分類クラスの数 | 2クラス分類より多クラス分類の方が難易度は当然高いので、評価指標はアプリケーションによって値は異なる |
テストデータの種類 | 色々なシステムを相対評価する場合、同一のテストデータで実施すべきである |
データ数の偏り | テストデータには各クラスのデータがなるべく均等に含まれるようにするのが望ましい |