LoginSignup
17
14

More than 5 years have passed since last update.

半歩ずつ進める機械学習 ~scikit-learn 回帰モデルの評価指標~

Last updated at Posted at 2019-04-09

前回

前回の投稿でscikit-learnのLinearRegressionを使用して作成した
ボストン住宅価格の予測を行うモデルの交差検証を行いました。
交差検証はcross_val_scorecross_validateを使って行いましたが
その際に、scoreという引数で評価指標を変更出来るという所まで勉強しました。
今回はscikit-learnに実装されている評価指標について、回帰モデル用の物に絞って勉強します

回帰用の評価指標

scikit-learnに実装されている、回帰用の評価指標は以下の6種です

  • explained_variance
  • mean_absolute_error
  • mean_squared_error
  • mean_squared_log_error
  • median_absolute_error
  • r2

ではひとつずつ確認していきます
また、ここからは良く使うモデルの予測値などを以下の記号で定義します

y = 正解値\\
\hat{y} = 予測値\\
n = サンプル数\\

!!注意!!

cross_val_scorecross_validateから出力されるスコアは
高い程良く、低い程悪いという風に統一されています
その為、例えば平均誤差や平均二乗誤差等、本来小さい程良い結果となる指標は
cross_val_scorecross_validateでは符号を逆転させて出力されます。
その為、cross_val_scorecross_validatescore引数に指定する時にneg_(negative)という文字が頭に付く場合があります。

explained_variance

誤差の分散を表す指標です

var() = 分散の関数\\
1 - \frac{var(y-\hat{y})}{var(y)}

あくまで分散を表す物なので、他の評価指標と組み合わせて
誤差の大きさも同時に見るのが良いと思います。
リファレンス

mean_absolute_error

平均絶対誤差
MAE(mean absolute error)と表記される事があります。
scoreに指定する場合"neg_mean_absolute_error"

MAE = \frac{1}{n}\sum_{i=1}^{n}|y_i - \hat{y_i}|

単純に、誤差の絶対値の平均です
プラス方向かマイナス方向かはさておき、誤差の大きさが平均でどの程度あるのか
誤差の大きさの指標になるかと思います
リファレンス

mean_squared_error

平均二乗誤差
MSE(mean squared error)と表記される事があります。
scoreに指定する場合"neg_mean_squared_error"

MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y_i})^2

これも平均絶対値誤差と同じく、基本的に誤差の大きさの指標になるかと思います。
リファレンス

mean_squared_log_error

平均二乗対数誤差
MSLE(mean squared log errorと表記される事があります
scoreに指定する場合"neg_mean_squared_log_error"

MSLE = \frac{1}{n}\sum_{i=1}^{n}(\log_e(1+y_i) - \log_e(1+\hat{y_i}))^2

データの特性上、誤差の値がどうしても巨大になってしまう場合に、数字を圧縮する効果があります。
例えば国家予算の予測を行うモデルを評価する時
数%の誤差にも関わらず、数兆という誤差が出てしまうので、これを扱いやすい小さい数字にする事が出来ます

誤差の大きさは、学習データを予め標準化しておけば基本的に防げる問題で、平均二乗対数誤差の特徴を表すものとして不適切でした
平均二乗対数誤差は実測値と予測値の比率(自然対数の)を表す指標です
例えば計算結果が4だった場合、予測値と実測値の間には、約e^√4倍(2.7182^2)の関係があるという事になります。

リファレンス

median_absolute_error

絶対誤差中央値
scoreに指定する場合"neg_median_absolute_error"

median = 中央値を計算する関数\\
median(|y_1 - \hat{y_1}|,|y_2 - \hat{y_2}|...|y_n - \hat{y_n}|)

誤差の絶対値の中央値を計算します。
絶対平均誤差や二乗平均誤差は、例えば1個のとてつもなく大きい誤差があると
その結果が足を引っ張って全体の結果が悪くなってしまう可能性があります。
平均絶対値誤差等と組み合わせて使う事で
平均誤差:大 中央値:小 といったケースで外れ値・異常値の存在を疑う
といった使い方が出来るかと思います
リファレンス

r2

決定係数
R^2と表記される事があります

\bar{y} = 正解値の平均\\
R^2 = 1 - \frac{\sum_{i=1}^{n}(y_i - \hat{y_i})^2}{\sum_{i=1}^{n}(y_i - \bar{y})^2}\\

決定係数には複数の定義があるようで、上記はscikit-learnに実装されている物の定義です
単純に正解値の平均を返すだけのモデルと比較してどの程度、モデルが有効かという指標になります

リファレンス

次回へ

今回はscikit-learnに実装されているモデル評価指標の中でも
回帰モデル用の物だけをピックアップして学びました。
いずれ分類モデル用の評価指標なども纏めたいと思います。
次回は、scikit-learnに実装されているLinearRegression以外の回帰関数を使って
ボストン住宅価格予測モデルの作成と、検証を行いたいと思います。

お願い

機械学習の初心者が、学んだ知識の確認と備忘用に投稿しています。
間違っている部分や、何かお気づきの事がありましたらご指摘頂けますと幸いです
あと、独学者なので「私も今勉強中なんです!」みたいな人がいればコメント貰えると喜びます。

17
14
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
14