Biopythonにラプラシアンスムージング
-
25-09-2019 - |
質問
私はBiopythonのナイーブベイズコードにラプラシアン平滑化サポートを追加しようとしています 1私のバイオインフォマティクスプロジェクトのに。
私はナイーブベイズアルゴリズムとラプラシアンスムージングに関する多くの文書を読んでいると私は、私は基本的なアイデアを得たが、私はちょうどそのコード(実際に私は私が1つの-laplacian番号を追加しますどの部分を見ることができない)でこれを統合することはできないと思います。
私は、Pythonに慣れていないと私は初心者コーダています。 Biopythonに精通している誰もが私にいくつかの提案を与えることができれば、私は感謝しています。
解決
の代わりに_contents()
方法のこの定義を使用してみてください。
def _contents(items, laplace=False):
# count occurrences of values
counts = {}
for item in items:
counts[item] = counts.get(item,0) + 1.0
# normalize
for k in counts:
if laplace:
counts[k] += 1.0
counts[k] /= (len(items)+len(counts))
else:
counts[k] /= len(items)
return counts
その後にLine 194
の呼び出しを変更
# Estimate P(value|class,dim)
nb.p_conditional[i][j] = _contents(values, True)
使用スムージングを有効にするTrue
、それを無効にするFalse
ます。
ここで平滑なし/と出力の比較があります:
# without
>>> carmodel.p_conditional
[[{'Red': 0.40000000000000002, 'Yellow': 0.59999999999999998},
{'SUV': 0.59999999999999998, 'Sports': 0.40000000000000002},
{'Domestic': 0.59999999999999998, 'Imported': 0.40000000000000002}],
[{'Red': 0.59999999999999998, 'Yellow': 0.40000000000000002},
{'SUV': 0.20000000000000001, 'Sports': 0.80000000000000004},
{'Domestic': 0.40000000000000002, 'Imported': 0.59999999999999998}]]
# with
>>> carmodel.p_conditional
[[{'Red': 0.42857142857142855, 'Yellow': 0.5714285714285714},
{'SUV': 0.5714285714285714, 'Sports': 0.42857142857142855},
{'Domestic': 0.5714285714285714, 'Imported': 0.42857142857142855}],
[{'Red': 0.5714285714285714, 'Yellow': 0.42857142857142855},
{'SUV': 0.2857142857142857, 'Sports': 0.7142857142857143},
{'Domestic': 0.42857142857142855, 'Imported': 0.5714285714285714}]]
<時間>
別に上から、私はコードにバグがあるかもしれないと思う。
コード彼らのクラスに応じてインスタンスを分割して、各クラスのために、各次元を与えて、それがこのディメンション値のそれぞれが表示される回数をカウントします。
_contents()
関数が呼び出されたときに一つのクラスに属するインスタンスのサブセットのために、それは次元のないすべての値が、そのサブセットに表示されていることを起こる、そして、それはこのようにすべての可能な値を見ると、ない場合は問題があります間違った確率を返します...
私はあなたが(データセット全体から)各次元のすべての一意の値を追跡する必要があると思う、とカウント処理の際に考慮に入れているがかかります。
所属していません StackOverflow