newlisp/qa-specific-tests/qa-bayes

70 lines
2.8 KiB
Plaintext
Executable File

#!/usr/bin/newlisp
(println)
(println "R.A. Fisher's Chi2:")
;; from Project Gutenberg: http://www.gutenberg.org/catalog/
;; The Adventures of Sherlock Holmes - Sir Arthur Conan Doyle
;; A Comedy of Masks - Ernest Dowson and Arthur Moore
(set 'docs '(
; A Comedy of Masks - Ernest Dowson and Arthur Moore, 547KB
"http://www.gutenberg.org/files/16703/16703.txt"
; The Adventures of Sherlock Holmes - Conan Doyle, 576KB
"http://www.gutenberg.org/cache/epub/1661/pg1661.txt"
; The tale of Beowulf - anonymous, 219KB
"http://www.gutenberg.org/files/20431/20431-8.txt"
))
;if files are available locally
;(bayes-train '() (parse (lower-case (read-file "Comedy.txt")) "[^a-z]+" 0) 'DoyleDowson)
;(bayes-train (parse (lower-case (read-file "Sherlock.txt")) "[^a-z]+" 0) '() 'DoyleDowson)
; training with the Doyle novel
(println "Loading from Gutenberg project ...")
(set 'AdventuresOfSherlockHolmes (read-file (docs 1)))
(println "training: The Adventures of Sherlock Holmes (Doyle)")
(bayes-train (parse (lower-case AdventuresOfSherlockHolmes) "[^a-z]+" 0) '() 'DoyleDowson)
; training with the Dowson novel
(println "... Loading from Gutenberg project ...")
(set 'ComedyOfMasks (read-file (docs 0)))
(println "training: Comedy of Masks (Dowson)")
(bayes-train '() (parse (lower-case ComedyOfMasks) "[^a-z]+" 0) 'DoyleDowson)
(setf result (bayes-query (parse "he was putting the last touches to a picture") 'DoyleDowson))
(println "result: " result " " '(0.0359554723158327 0.964044527684167))
(set 'diff (apply add (map abs (map sub result '(0.0359554723158327 0.964044527684167)))))
(println (format "diff: %10.5f " diff)
(if (< diff 0.001) ">>>>> bayes SUCCESSFUL" ">>>>> ERROR in bayes"))
(setf result (bayes-query (parse "immense faculties and extraordinary powers of observation") 'DoyleDowson))
(println "result: " result " " ' (0.983569359827141 0.0164306401728594) )
(set 'diff (apply add (map abs (map sub result ' (0.983569359827141 0.0164306401728594) ))))
(println (format "diff: %10.5f " diff)
(if (< diff 0.001) ">>>>> bayes SUCCESSFUL" ">>>>> ERROR in bayes"))
(println)
(println "Chain Bayes:")
(set 'Data:test-positive '(8 18))
(set 'Data:test-negative '(2 72))
(set 'Data:total '(10 90))
(pretty-print 80 " " "%1.15f")
(setf result (bayes-query '(test-positive) Data true) )
(println "result: " result " difference: " (map sub result '(0.3076923077 0.6923076923)))
(setf result (bayes-query '(test-positive test-positive) Data true) )
(println "result: " result " difference: " (map sub result '(0.64 0.36)))
(setf result (bayes-query '(test-positive test-positive test-positive) Data true) )
(println "result: " result " difference: " (map sub result '(0.8767123288 0.1232876712)))
(pretty-print 80 " " "%1.15g")
(exit)
; eof