kaggle本第5章
第5章 モデルの評価
5.1 モデルの評価とは?
5.2 バリデーションの手法
5.2.2 クロスバリデーション(5.2.2 p.277)
クロスバリデーションでモデルの汎化性能を評価する際は、通常は各foldにおけるスコアを平均して行いますが、それぞれのfoldの目的変数と予測値を集めてデータ全体で計算する方法もあります。なお、評価指標によっては各foldのスコアの平均と、データ全体で目的変数と予測値から計算したスコアが一致しません。例えば、MAEやloglossではそれらが一致しますが、RMSEでは各foldのスコアの平均はデータ全体で計 算するより低くなります。
RMSEでは~の部分がいまいちピンとこないwakame.icon
感覚ですが、MAEが実際の値なのに対し、RMSEが最後にルートを取った値なので、整数であるfold数で割ると等価じゃないよって感じな気がします。すみませんちゃんとは分かりませんがsinchir0.icon
各foldでの平均の場合、すでにfoldでのRMSEを計算してある状態のところに、さらにfold数で割っているので低くなる?のかなと直感的に思いましたが、自分もきちんと言葉にはできません・・・汗takapy.icon
お二人のコメントで理解できました、ありがとうございますwakame.icon
そうするとkaggleのLB / CVスレで投稿されるスコアってどっちを投稿するのが一般的なんだろうwakame.icon
気になる。自分は各foldの平均が投稿されていると思っていました。(自分はこれで計算しているので)takapy.icon
検証?してみたwakame.icon
code:rmseで4fold
fold: 0
2.8433820331892
fold: 1
3.3723949057933553
fold: 2
4.003202606396968
fold: 3
3.867003107082048
各foldのスコアの平均: 3.521495663115393
validationデータ全体で計算: 3.5502324828557343 ←普段こっちしか計算しないのでピンとこなかった
fold数に対する訓練データセットの割合wakame.icon
table:fold数に対する訓練データセットの割合
fold数 訓練データセットの割合 fold2に対する比率
2 50% x1
3 66% x1.32
4 75% x1.5
5 80% x1.6
6 83% x1.66
7 85.7% x1.71
8 87.5% x1.75
5.2.3 stratified k-fold(5.2.3 p.277)
層化抽出をしない方が良い場合ってあるんですかね?基本しておいて損はない手法だと思っています。sinchir0.icon
気になる。自分の場合は層化抽出試してみた方が良い特徴量があれば試してみて、他のCVと比較して良い方を選択したりしますねtakapy.icon
5.2.5 leave-one-out(5.2.2 p.279)
leave-one-outを使うケースが思い浮かばない、学習データのレコード数が極めて少ないケースというのはそもそも機械学習するのに適してないケースのようなwakame.icon
仰る通りの指摘なのですが、受託分析などのお仕事している場合、お客さんがそれ以上データを用意できない or まずは軽くデータを集めて様子見をしたい、などの理由で100行程度のデータに対して機械学習を試さざるを得ない場合があります。特に工場などの製造系は多い気がします。そういった場合にValidationの候補に上がることはあります。(実際に使ったことはないです。)sinchir0.icon
5.3 時系列データのバリデーション手法
5.4 バリデーションのポイントとテクニック
5.4.1 バリデーションを行う目的(5.4.1 p.290)
例えば、二値分類タスクであれば、コンペでの評価指標にかかわらずloglossやAUCを参考にする方法があります。
質問です、皆さんが取り組んだ〇〇コンペでそのコンペの評価指標以外に〇〇の評価指標使ってますという経験があったら教えてほしいです。wakame.icon
PetFinderなどでは、QWKの評価指標でQWKとRMSEの両方を参考にしていました。currypurin.icon
言われてみれば確かに両方見てましたねwakame.icon
5.4.6 クロスバリデーションのfoldごとに特徴量を作り直す(5.4.6 p.300)
本筋ではないですが、target encodingの他にfoldごとに行う必要があるものとして、標準化や標準偏差の計算もあるよね、という話をkaggler-jaで見かけ「確かに」と思ったので紹介します。sinchir0.icon
ちなみに、交差検証で精度を見る上で特徴量を作成するとき、知っている人にとっては当たり前ですが初心者にありがちなミスを話しておくと、平均値や中央値、分散などの統計値を利用するプロセスは交差確認の中で行わないと正しく精度を求められないことがあります。
ただKaggleの場合は、trainとtestを合わせて標準化などを行うことが多いと思うので、実務での話題かと思っているがどうなんだろう。currypurin.icon
この本ではスコープ外ですが、業務におけるモデル選定の際に、CVで汎化性能測った場合は各CV分のモデルができると思うのですが、その中から「どのモデルを本番にデプロイするか」という部分で、みなさんどのように選定しているのかを知りたいです。本番でも全部のモデルを使って平均を計算しているのか?それともシングルモデルで運用しているのか・・・?(本書の内容ではないので、スルーでもOKです)takapy.icon
👀wakame.icon
5foldだと、5つモデルができるので、本番も5つ計算すると重いみたいな問題意識ですよね。前回の全部のデータで学習するのがもしかしたら本番でも使えるのかも?と思いましたcurrypurin.icon