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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top