3

次のような属性を持つデータセットがあります。

Marital_status = {M,S,W,D}
IsBlind = {Y,N}
IsDisabled = {Y,N}
IsVetaran = {Y,N}

など。そのような変数は約200あります。

一度に1つの値で、属性の組み合わせを生成するアルゴリズムが必要です。

言い換えれば、私の最初の組み合わせは次のようになります。

Marital_status = M, IsBlind = Y, IsDisabled = Y, IsVeteran = Y

次のセットは次のようになります。

Marital_status = M, IsBlind = Y, IsDisabled = Y, IsVeteran = N

各属性の各値を属性自体として扱い、単純な組み合わせジェネレーターを使用しようとしました。相互に排他的な選択肢が組み合わせに含まれており、可能な組み合わせの数が非常に多かったため、機能しませんでした(正確には、133873417996074857185490633899939406700260683726864088366400)

アルゴリズム(できればJavaでコーディングされたもの)を提案していただけますか?

ありがとう!!

4

3 に答える 3

5

別の方法を見つけてください。200個の変数があり、それぞれに少なくとも2つの選択肢がある場合、> = 2^200の組み合わせになります。ナノ秒ごとに1つの組み合わせを生成する場合、2^200の選択肢を列挙するのに約10^43年かかります。

于 2009-10-02T20:54:02.463 に答える
5

他の人が指摘しているように(そしてあなた自身も)、これを徹底的にテストすることは不可能です。

サンプリングアプローチを採用し、それをテストすることをお勧めします。あなたは強い理論的背景を持っているので、これを見つけて理解するためにインターネットで自分の道を見つけることができるでしょう。


しかし、簡単な例を挙げましょう。今のところ、パラメーターの可能な「クラスター」(強く関連している)は無視します。

  • 200個のパラメーターすべての可能なすべての値を含む1つのデータのサンプルを作成します。この網羅性により、パラメータ値を忘れることができなくなります。

    事前に作成する必要はありません。値はループで作成できます。

  • 1つのデータの各サンプルに、他の値を追加する必要があります。簡単なアプローチは、各1サンプルをテストする回数を選択することです(たとえば、N = 100)。1つのデータのサンプルごとに、他の値のN倍をランダムに生成します

200個のパラメーターすべてを使用して1000個の可能な値があり、N = 100の場合、100Kのテストが得られます。


この基本的な考え方については、さまざまな方法で詳しく説明できます。

  • テストを繰り返し可能にしたい場合は、テストを1回だけ生成して保存し、その後のすべてのテストで同じセットを再利用できます。
  • 各値がかなりの回数選択されるように、分布を制御できます。
  • 実生活では、200個のパラメーターすべてに接続がないわけではありません。値を一緒に見つける確率が均一ではないという点で、多くのパラメーターは実際には他のパラメーターに接続されます。以前に行ったように1つのパラメーターのみで初期の完全なセットを作成する代わりに、接続されたパラメーターのクラスターで完全なセットを実行し
    ます。
于 2009-10-03T06:36:55.447 に答える
3

キースが指摘したように、除外された組み合わせがないと、組み合わせの数が非常に多くなり、ニーズを満たすことができなくなります。ただし、相互に排他的な選択肢があると既に述べているため、ソリューションスペースは小さくなります。

どれくらい小さいですか?相互に排他的な選択肢の数によって異なります。頑張る前に、それについて数学をすることをお勧めします。

十分な選択肢が排他的であると仮定すると、基本的にブルートフォース攻撃を行う必要がありますが、既存の有用なアルゴリズムを見つけることはほとんどありません。

それは私に質問をもたらします:これを行うあなたの理由は何ですか-徹底的なテスト?良さそうに聞こえますが、それは不可能だと思うかもしれません。私自身もこの問題に遭遇しましたが、最終的には、慎重に選択された「エッジ」ケースと、準ランダムに選択された他のケースの組み合わせを余儀なくされる可能性があります。

上記のコメントを読んだら、「相互排除」の定義は私とは異なっているようで、問題があるのではないかと心配しています。

したがって、特定の患者は盲目でも盲目でもありません。素晴らしい。しかし、相互排除について言及したときに、私(およびここにいる他のすべての人)が理解したことではありません。

それらによって、私は、例えば、盲目の場合、障害者でないことはできない、またはそのようなことについて話している。

属性間の相互に排他的な相互関係が多数あり、それらの組み合わせが制限されていない場合、徹底的なテストを完了することはできません。

于 2009-10-02T21:23:23.323 に答える