2014-10-12 2 views
2

В настоящее время я изучаю этот алгоритм для байесовской классификации, и когда я пытался следовать примеру в книге, я получил эти странные результаты, которые не были краткими с примерами в книге ,Байесовская классификация, пример из Clojure для машинного обучения

Я не думаю, что мой код не так (потому что я в основном скопированы его вручную), но я до сих пор получить результаты в РЕПЛ что невозможно, например, как:

> (+ (evidence-of-sea-bass) (evidence-of-salmon)) 
==> 2.8139728009700775 

Он должен вернуть 1.000 ... с небольшой ошибкой точности с плавающей запятой.

Вот код:

(defn make-sea-bass [] 
    #{:sea-bass 
    (if (< (rand) 0.2) :fat :thin) 
    (if (< (rand) 0.7) :long :short) 
    (if (< (rand) 0.8) :light :dark)}) 

(defn make-salmon [] 
    #{:salmon 
    (if (< (rand) 0.8) :fat :thin) 
    (if (< (rand) 0.5) :long :short) 
    (if (< (rand) 0.3) :light :dark)}) 

(defn make-sample-fish [] 
    (if (< (rand) 0.3) (make-sea-bass) (make-salmon))) 

(def fish-training-data 
    (for [i (range 10000)] (make-sample-fish))) 

(defn probability 
    [attribute & {:keys 
       [category prior-positive prior-negative data] 
       :or {category nil 
        data fish-training-data}}] 
    (let [by-category (if category 
        (filter category data) 
        data) 
     positive (count (filter attribute by-category)) 
     negative (- (count by-category) positive) 
     total (+ positive negative)] 
    (/ positive negative))) 

(defn evidence-of-salmon [& attrs] 
    (let [attr-prob (map #(probability % :category :salmon) attrs) 
     class-and-attr-prob (conj attr-prob (probability :salmon))] 
    (float (apply * class-and-attr-prob)))) 

(defn evidence-of-sea-bass [& attrs] 
    (let [attr-prob (map #(probability % :category :sea-bass) attrs) 
     class-and-attr-prob (conj attr-prob (probability :sea-bass))] 
    (float (apply * class-and-attr-prob)))) 

ответ

1

Если вы ожидаете, что результат будет 1,0, то ваша вероятность результат сноски должен быть (/ positive total)

+0

Ниццы спасибо :) Я предполагаю, что я слепо принял автор представить правильные и связанный код с примерами .. –

Смежные вопросы