5

こんにちは、私は MLlib が初めてで、Spark Web サイトでそれに関するドキュメントを読んでいます。次のコードで、トレーニング用に「0」、テスト用に「1」をキャッシュする必要がある理由を理解するのが困難です。

  val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L)
  val training = splits(0).cache()
  val test = splits(1)

誰かが理由を理解するのを手伝ってくれますか? 私の知る限り、正と負のサンプルが必要なので、「1」は正、「0」は負になる可能性がありますが、なぜこのように分割されるのですか?

ありがとうございました!

4

1 に答える 1

7

これは、正例と負例とは関係ありません。これらは、データ セット内に (両方の種類で) 既に存在している必要があります。

データをランダムに分割して 2 つのセットを生成しています。これは広く行われており、非常に良いアイデアです。オーバーフィッティングをキャッチすると、実際には各データ ポイントの答えを効果的に記憶しているだけで、補間や一般化ができないときに、優れた ML ソリューションを持っているように見える可能性があります。

実際、合理的な量のデータを3 つのデータセットに分割する場合は、ML アルゴリズムを実行する「トレーニング」をお勧めします。「テスト」、トレーニングの進行状況を確認するために使用します。そして、ML プロセス全体が最適化されたと考えるまで使用しない「検証」。(最適化では、収束をチェックするなど、テスト セットを数回使用する必要がある場合があります。これにより、データ セットにある程度適合するようになるため、多くの場合、過剰適合を本当に回避したことを確認するのは困難です。検証セットを最後まで保持します。を確認するのが最善の方法です (または、新しいデータを収集できる場合は、代わりにそれを行うことができます)。

異なるデータセットに統計的に異なるデータが含まれる問題を回避するために、分割はランダムであることに注意してください。たとえば、初期のデータは後期のデータとは異なる可能性があるため、データセットの前半と後半を取得すると問題が発生する可能性があります。

于 2014-07-21T04:27:24.157 に答える