ホールドアウトセットを作成するためのより適切な方法は何ですか:一部の被験者を削除するか、各被験者からいくつかの観察を削除しますか?


11

26個のフィーチャと31000行のデータセットがあります。38人の被験者のデータセットです。生体認証システム用です。だから私は主題を識別できるようになりたいです。

テストセットを取得するには、いくつかの値を削除する必要があることを知っています。

それでは、何をする方が良いのか、そしてその理由は何か。

  1. (a)30人の被験者をトレーニングセットとして保持し、8人の被験者をテストセットとして削除する

  2. (b)38人の被験者を保持しますが、それぞれの行をいくつか削除します。最後に、トレーニングセット:38800科目の24800行とテストセット:38科目の6200行で終わります。


1
被験者を特定したい場合、どうすればテストセットの「全体」の被験者を削除できますか?30人の被験者でトレーニングされたモデルは、これらの30人の被験者のみを識別でき、これまで見たことのない8人の被験者は識別できません。「生体認証システム」についてのあなたの説明は、ほとんどの既存の答えを適用外にするかもしれません。
アメーバは、モニカを

1
(1)正確な目標、予測しようとしている結果変数は何か(2)持っているデータ、そしておそらく(3)使用するアプローチ。
Matthew Gunn

システムをトレーニングしたら、どのように展開しますか?トレーニングセットに参加していない人に使用することを目標としていますか?新しいデータは同じ38科目からのものですか?私はシステムがどのように使用されることになっているのか、そしてあなたが@AmiTavoryの答えのケース(1)またはケース(2)のどちらにいるのかを理解しようとしています。
Matthew Gunn

@amoeba私はあまり経験がありません:(データを分割することが推奨されているため、質問しました(トレーニング、検証、およびテスト)。したがって、それは、一部の被験者または一部の観察を削除するか、オンラインで利用可能なデータセットを使用することです。 1)対象を識別できるようにしたい。機能が属しているのは誰ですか。2)私は脳波を使用しています(したがって時系列)。3)Stratified-foldを使用しています。しかし、それはkfoldよりも精度が高いためです。私はkフォールド、層別化、および1度除外を知っていました。私はいつもデータの不均衡を補償することだと思っていました。しかし、私は提案を受け入れています。
Aizzaac 2016年

@MatthewGunnデータセットに含まれていない人には使用できないと思います。それは非常に困難ですが、達成されれば非常に興味深いでしょう。したがって、ケース1と言います
。– Aizzaac

回答:


9

マシューガンの答えは正しいと思いますが、「レコードごとの」CVは2つの異なる概念をカバーできるように思えます。

  1. レコードは、件名や時間に関係なく、ランダムにフォールドに分割されます。

  2. レコードは時間ベースのフォールドに分割され、テストフォールドの開始後のデータを含むトレーニングにはフォールドは使用されません。

最初のケースでは、トレーニングセットにテストセットの前後のデータを含めることができるため、データの時系列の性質が損なわれています。トレーニング/テストの原則は、トレーニングデータは現在知られているデータを表し、テストデータはまだ目に見えないデータ(おそらく文字通り未来からのデータ)を表すということです。

おそらく、時系列の自己相関はオプション#2を危険にさらします。おそらく、モデルの時間要素はそれほど重要ではないため、「過去」と「将来」の観測は同じになる可能性があります。これらの場合、#1と#2のどちらも進むべき道ではありません。

傾向のみではなく季節性しかない場合、一部の被験者のトレーニングに「未来」を含めて、新しい被験者(同じ季節性の影響を受ける人)を予測することは問題ないようです。傾向がある場合、将来のトレーニングでは、モデルを本番環境で使用するときに実際にはわからない未来について何かを学ぶ必要があります。

OPの例では、件名は良いように思えます。しかし、傾向と時系列の懸念がモデルの一部である場合は、特定の時点の前に1セットのサブジェクトでトレーニングし、その後に他のサブジェクトでテストするように、サブジェクトベースおよび時間ベースのパーティション分割を使用しようとしますその特定の時点。


1
tt

1
アプリケーションは適切な分割が何であるかを決定すると思います。たとえば、時系列の場合でも、未知の被験者のその後の測定のために従属変数を予測することは、分割が時間ごとだけでなく被験者ごとに行われなければならないことを意味するタスクかもしれません。
cbeleitesはSXに不満2016

3
@cbeleites:そうですね。これは私が最近のプロジェクトでやったことです。データをトレーニングとテストの被験者に分け、トレーニングには日付前のデータを使用し、テストには日付以降のデータのみを使用するため、これまでにない被験者でテストしていました。見た、ある時期にはまだ見ていなかった。モデルが実際にどれだけうまく機能するかを本当に知りたい場合は、デッキを積み重ねて、行き過ぎないようにします。
ウェイン

16

重要な違いは、あなたがしたいかどうかです。

  1. [最も一般的なケース]:(データと同じ母集団から得られた)新しい被験者のパフォーマンスの見積もりを作成します。
  2. サンプルと同じ対象からの新しい観測のパフォーマンスの推定を作成します。

より一般的なケースは、ケース番号(1)です。たとえば、緊急治療室に来る人の心臓発作をどの程度うまく予測できますか?(1)の場合は、ほぼ確実に、(b)レコード単位のクロス検証ではなく、(a)サブジェクト単位のクロス検証を行う必要があります。ケース(1)でレコードごとの検証を行うと、新しい被験者のパフォーマンスについて、不当に高くて偽の推定値につながる可能性があります。

私はあなたが何をしようとしているのかを正確に理解していません(そして、おそらくそれは独学ですので、質問は完全に現実的ではありません)。どちらのケースにいるかはわかりません。あまり一般的でないケース(2)の場合は、レコードごとの検証で問題ない可能性があります。

統計の一般的なテーマは、何が独立していて何が相関しているのかを注意深く考えることです。一般的に言えば、独立した観察は異なる主題になる傾向があります新しい科目の成績を予測したい場合は、トレーニングしていない科目をテストする必要があります。

なぜレコード単位ではなくサブジェクト単位の相互検証が必要なのですか?

典型的な設定では、同じ個人の繰り返しの観察は、特徴に条件付けした後でも互いに相関しています。したがって、レコードごとの相互検証により、テストセットトレーニングセットから独立していません。完全な相関の極端なケースでは、トレーニングセットとテストセットでまったく同じ観測が得られます。あなたはテストセットでトレーニングするでしょう!交差検証で測定されたパフォーマンスは、新しい被験者のパフォーマンスを予測するものではありません

たとえば、この最近の論文では、レコードごとの相互検証を「Voodoo Machine Learning」と呼んでいます。

対象が少ないのでどうするか...

k=n

トレーニング用のデータを最大化するためにできることは、相互検証の対象を1つ除外することです。反復ごとに、異なるホールドアウトサブジェクトでテストし、その他すべてのトレーニングを行います。

n=38


データセットを3つに分割する必要があることを知っています。トレーニング、検証、テスト。相互検証では、「トレーニングと検証」が使用されます。ホールドアウトセットは「テスト」です。それであなたは提案していますか?トレーニングと検証のために37の被験者を使用し、1つの被験者でテストしますか?そして、私はあらゆる種類の交差検証を行うことができます:k分割、層別など?
Aizzaac 2016年

1
OPは、「生体認証システムのため、被験者を特定できるようにしたい」と編集しました。それが何を意味するのかを正しく理解している場合、サンプルに基づいてサブジェクトIDを予測することが目標であるため、レコード単位のCVのみが意味をなすことを意味します。
アメーバは、モニカ

@amoeba新しいデータが同じ38の被験者からのものである場合のみ。例えば。指紋が一致するか一致しないかをシステムが言うことになっている場合、それが私の家の正面玄関に配備される(つまり、見知らぬ人を見知らぬ人として識別する必要がある)場合、同じ被験者でのトレーニングとテストは問題になります(これまでに見たことのない、トレーニングを受けたことのない人にエントリを許可する頻度を知りたい)。「バイオメトリックシステム用」という疑問が生じることにも同意します...
Matthew Gunn

3

トレイン/テストスプリットでエミュレートしたい設定をどのように想定するかによります。物事を具体的にするために、各行が1晩の被験者の睡眠の質を説明するとします。

  1. 将来的には、各被験者が最初に睡眠実験室に来て、数日間の睡眠の質を提供する可能性があります。その後、これらの被験者の将来の夜の睡眠の質を予測する必要があります。この場合、オプションb)を使用します。ではsklearnsklearn.model_selection.StratifiedShuffleSplit

  2. 将来的には、いくつかの被験者が最初に睡眠実験室に来て、数日間の睡眠の質を提供する可能性があります。その後、他の被験者の将来の夜の睡眠の質を予測する必要があります。この場合、オプションa)を使用します。ではsklearnsklearn.cross_validation.LeavePLabelOut


1
しかし現実的には、問題はほぼ間違いなくあなたのケース(2)であり、オプション(a)、つまりサブジェクトごとの相互検証が適切です。
Matthew Gunn

1
@MatthewGunnそうですね。ケース2の方がはるかに一般的です。私は私が言わなければならないしている 1は正しい選択だった実際のケースに遭遇します。
Ami Tavory

1
面白い。(1)確立された大規模な顧客ベースの新しい観測値を予測するのに適切であることがわかりました。ポイントを取る。おそらく、医学分野におけるレコードごとの相互検証の広範な誤用についてこの論文を読んだので、おそらく私は非常に強く反応しています。
Matthew Gunn

これについてどう思いますか。私は、38の被験者をあらゆるタイプの相互検証で使用しています。そして、私のモデルが別の主題で使用できるかどうかをテストするために; オンラインデータセットを使用していますか?私は、モデルをテストするために、「新しい」データセットを用意することを目的としています。
Aizzaac、2016年

3

入り込むために、アプリケーションは未知の対象を予測することであると想定します。つまり、(時系列または本質的に順序付けられていない繰り返し測定があるかどうかに関係なく)未知の被験者がテストされるように分割を行う必要がある=>分割a)

ただし、被験者数が38であることを考えると、検証のリサンプリングを検討する必要があります。(より多くの機能がありますが)同様に小さいサンプルサイズを扱った私の経験から、一言で言えばいくつかの推奨事項があります。

  • サブジェクトごとのブートストラップ外または反復検証を行います。小さなサンプルサイズの問題で重要なモデルの安定性を評価できます。不安定さが問題になる場合は、結果を集約モデルに使用することもできます。

  • ではないリーブ・ワン・件名・アウトを行います。モデルの安定性を測定することも、それを減らすこともできません。さらに、サンプルサイズが小さいために、予想される最小の悲観的バイアスとは対照的に、大きな悲観的バイアスの影響を受ける状況があります。

  • 正確さ、感度、特異度などの典型的なメリットの分類値を使用していて、タスクが被験者を正しく分類する場合:テスト結果の不確実性は絶対数に依存するため、重要な問題はパフォーマンスの測定であることに注意してくださいテストケースの。例として、17人の真に陽性の被験者から17人の正しい予測を観察することは、約80%から100%の範囲の感度の95%信頼区間に対応します。
    つまり、それに基づいてデータ駆動型モデルの最適化を行うことはできません。

  • これは、ここでは統計的に無意味な比較でリソースを浪費するため、3セットの分割(ネストされた相互検証)を設定する必要がないことも意味します-最適化は失敗することがほぼ保証されています(ただし、安定性を確認しないでください)。

  • 提案された5(3)テスト/最適化/検証対象の二項信頼区間の同じ計算は、50%(30%)までのすべての正しい範囲に対して95%ciをもたらすので、完全なテスト結果に基づいて、信頼区間には依然として50 / 50推測!

これらの主題について私たちが書いたいくつかの論文:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.