Вопрос

Я пытаюсь добавить лаплаксианскую сглаживание поддержки на наивную байес биопатона 1 Для моего биоинформатического проекта.

Я прочитал много документов о Naive Bayes алгоритма и лапласианского сглаживания, и я думаю, что получил основную идею, но я просто не могу интегрировать это с этим кодом (на самом деле я не могу видеть, какую часть я добавлю 1 -LAPLACIAN номер).

Я не знаком с Python, и я новичок. Я ценю, если кто-то знаком с биопатоном, может дать мне несколько предложений.

Это было полезно?

Решение

Попробуйте использовать это определение _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() Функция называется, она не увидит все возможные значения, и, таким образом, вернет неправильные вероятности ...

Я думаю, вам нужно отслеживать все уникальные значения для каждого измерения (от всего набора данных) и принять это во внимание во время процесса подсчета.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top