0

アプリケーションのさまざまなクラスが1つ以上の乱数を抽出する必要がある場合、適切な乱数シーケンスを生成するために、乱数ジェネレーターをどこで初期化する必要がありますか?

特に、ランダムフォレストをトレーニングするために、いくつかの決定木を構築する必要があります。各デシジョンツリーの構築には、次の手順が含まれます。

  1. データセット(複数行のデータで構成されている)がロードされます。
  2. このデータセットの一部の行は、新しいデータセットを構築するためにランダムに選択されます。この新しいデータセットは、ツリーの成長中に徐々に分割されます。
  3. この新しいデータセットは、決定木を成長させるために使用されます。各ノードを作成するには、この新しいデータセットのいくつかの行をランダムに選択する必要があります(1つのノードを作成する前に、この新しいデータセットのいくつかの小さな異なるサブセットをランダムに生成する必要があります) 。

上記の3つのステップは、各決定木の構築に対して実行されます。今説明した手順では、乱数の生成が数回発生します。たとえば、2番目のステップでは、各決定木が最初の決定木とはわずかに異なるデータセットでトレーニングされるようにする必要があります。したがって、乱数ジェネレーターは、等しいデータセットの生成を回避する必要があります(または、いずれの場合も、これが発生する可能性は非常に低いはずです)。 。

本質的に、この手順では、ランダム性の2つの原因を特定できます。

  • ランダムなデータセットの生成N。それぞれが単一の決定木をトレーニングします。
  • Mノードを作成する前に、特定のデータセットからランダムに抽出を実行する必要があります。

いくつの乱数ジェネレーターを使用する必要がありますか?ランダムフォレストを実装するクラスと、決定ツリーを実装する別のクラスがあるので、最初のクラス(最初のランダム性のソース)で乱数ジェネレーターを初期化し、2番目のクラスで別の乱数ジェネレーターを初期化すると思いましたクラス(ランダム性の2番目のソース)。これは正しいです?

一般に、正しい数の疑似乱数ジェネレーターを選択するためのガイドラインは何ですか?

4

4 に答える 4

5

使用するコンピューター言語に関係なく、生成される数値は常に疑似乱数になることに注意してください。これは、世代を生成するために使用される同じシードが与えられた場合、常に同じ結果が得られることを意味します。プログラミング言語に含まれているすべての乱数ジェネレーターは、可能な限り最適になるようにすでに開発され、テストされています。ランダム関数を使用した1回のパスで十分です。

于 2013-03-01T21:12:10.960 に答える
2

シーケンスの再現性によって異なります。たとえば、rand()呼び出しが行われる順序を保証できず、テストのために毎回同じシーケンスを生成する必要がある場合は、これらのキューごとに個別のシード/ジェネレーターが必要になります。

再現性を気にしない場合は、ジェネレーターとシードを1つずつ用意して、実行します。

于 2013-03-01T21:11:24.237 に答える
2

ランダムジェネレーターを1つだけ使用しますが、十分にシードされていることを確認してください。main()の先頭に配置して、後で使用するために乱数のシーケンスを生成するか、実行中にジェネレーターを呼び出すことができます。

たとえば、1秒以内の時間を使用してシードする場合は、同じ番号が生成される傾向があるため、電話をかけるたびにシードしないようにしてください。ジェネレーターを1回だけシードするのがベストプラクティスです。

実際、Unixライクなシステムを使用している場合は、ジェネレーターに/ dev/randomを使用することを検討してください。使用するシステムのほとんどは、ランダム性を生成するためのネイティブまたはライブラリを提供することが保証されているため、独自にコーディングしないでください。

一般に、独自に計算するのではなく、外部ソース(コンピューターハードウェアからのノイズ)を利用するジェネレーターの使用を検討してください。

于 2013-03-02T07:40:49.270 に答える
0

すべての機能に1つの乱数ジェネレーターのみを使用してください。

2つ以上の乱数ジェネレーターを使用すると、問題が発生する可能性があります。ほとんどの乱数ジェネレーターは、システム時間を開始シードとして使用します。2つの乱数クラスを時間的に接近してインスタンス化すると、同じシーケンスの乱数が生成される可能性があります。単一のランダムジェネレーターを使用すると、これは発生しない可能性があります。

于 2013-03-02T07:17:43.627 に答える