0

私は新しい情報に基づいて確率を調整する必要があるベイジアン確率プロジェクトに取り組んでいます。これを行うための効率的な方法をまだ見つけていません。私がやろうとしているのは、異なるシナリオの等確率リストから始めることです。元。E、T、M、Q、L、Z の 6 人がいて、それぞれの初期の選択確率は次のように表されます。

myList=[.1667, .1667, .1667, .1667, .1667, .1667]

アルファベット順で最初の 3 分の 1 の人々が選ばれる確率は全体で 70% であるという新しい情報が明らかになりました。新しいリストが作成され、名前 (E、L、M、Q、T、Z) でアルファベット順に並べ替えられ、新しい情報だけが含まれます。(.7/.333=2.33、.3/.667=.45)

    newList=[2.33, 2.33, .45, .45, .45, .45)

リスト内包表記で正しい値を乗算し、調整確率に到達できるように、newList を myList と同じ順序にする方法が必要です。このプロセスは、それぞれ異なる基準 (母音、P に最も近いなど) を使用して数回繰り返され、約 1000 項目のリストになるため、単一の一貫した順序を持つことが重要です。代わりに、各 newList を newDictionary にすることもできます。調整基準が作成されると、それらをリストに並べることができますが、複数の辞書を変換するのは効率が悪いようです。それは...ですか?これを行う簡単な方法はありますか?

ありがとう!

4

2 に答える 2

1

Python でメソッドの速度を上げるためにできる最善の方法は、標準型の代わりに numpy を使用することです (したがって、事前にコンパイルされた C コードを使用して算術演算を実行することになります)。これにより、劇的な速度向上が実現します。numpy 配列の順序はとにかく固定されており、構文は数学演算により直接的に適用できます。演算を行列演算として表現する方法を検討する必要があるだけです。あなたの例:

myList = np.ones(6) / 6.
newInfo = np.array( [.7/2, .7/2, .3/4, .3/4, .3/4, .3/4] )
result = myList * newInfo

両方のベクトルには単位和があるため、正規化する必要はありません (あなたがあなたの例で何をしていたのかわからないので、私が見逃した微妙な点があれば教えてください)、それが必要な場合は些細なことです:

result /= np.sum(result)
于 2012-11-26T13:00:08.697 に答える
0

タプルのリストとして情報を保存してみてください。

bayesList = [('E', 0.1667), ('M', 0.1667), ...]

リスト内包表記は、

newBayes = [(person, prob * normalizeFactor) for person, prob in bayesList]

リスト内包表記を設定する前に、normalizeFactorが計算された場所

于 2012-11-22T06:27:55.083 に答える