Laplace-Glättung biopython
-
25-09-2019 - |
Frage
Ich versuche, Laplace-Glättungs Unterstützung biopython des Naive Bayes-Code 1 hinzufügen für mein Bioinformatics Projekt.
Ich habe viele Dokumente über Naive Bayes-Algorithmus und Laplace-Glättung gelesen und ich denke, ich die grundlegende Idee, aber ich kann einfach nicht diese Integration mit diesem Code (eigentlich kann ich nicht sehen, welcher Teil I 1 -laplacian Nummer hinzufügen wird).
Ich bin nicht vertraut mit Python und ich bin ein Neuling Coder. Ich schätze, wenn jemand vertraut mit biopython mir einige Vorschläge geben kann.
Lösung
Versuchen Sie, diese Definition der _contents()
Methode statt:
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
Dann das Gespräch auf Line 194
ändert in:
# Estimate P(value|class,dim)
nb.p_conditional[i][j] = _contents(values, True)
Verwendung True
die Glättung zu aktivieren, und False
sie zu deaktivieren.
Hier ist ein Vergleich des Ausgangs mit / ohne Glättung:
# 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}]]
Neben dem oben genannten, ich denke, es könnte ein Fehler mit dem Code sein:
Der Code teilt die Instanzen nach ihrer Klasse, und dann für jede Klasse und jede Dimension zu geben, es zählt, wie oft jede dieser Dimension Wert erscheinen.
Das Problem ist, wenn für eine Teilmenge der Instanzen einer Klasse gehören, es kommt vor, dass nicht alle Werte einer Dimension in dieser Teilmenge erscheinen, dann, wenn die _contents()
Funktion aufgerufen wird, wird es nicht alle möglichen Werte sehen und damit werden die falschen Wahrscheinlichkeiten zurückkehren ...
Ich glaube, Sie verfolgen die alle eindeutigen Werte halten, müssen für jede Dimension (aus dem gesamten Datensatz), und nehmen Sie das in Erwägung während des Zählvorgangs.