feat(naivebayes): implement NaiveBayes algorithm
feat(example): a document classifier using NaiveBayes over reuters data
This commit is contained in:
		
							
								
								
									
										29
									
								
								examples/naivebayes-doc-classifier.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								examples/naivebayes-doc-classifier.hs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
module Main
 | 
			
		||||
  where
 | 
			
		||||
    import Sibe
 | 
			
		||||
    import Sibe.NaiveBayes
 | 
			
		||||
    import Text.Printf
 | 
			
		||||
    import Data.List
 | 
			
		||||
    import Data.Maybe
 | 
			
		||||
    import Debug.Trace
 | 
			
		||||
 | 
			
		||||
    main = do
 | 
			
		||||
      dataset <- readFile "examples/naivebayes-doc-classifier/data-reuters"
 | 
			
		||||
      test <- readFile "examples/naivebayes-doc-classifier/data-reuters-test"
 | 
			
		||||
 | 
			
		||||
      classes <- map (filter (/= ' ')) . lines <$> readFile "examples/naivebayes-doc-classifier/data-classes"
 | 
			
		||||
 | 
			
		||||
      let intClasses = [0..length classes - 1]
 | 
			
		||||
          documents = createDocuments classes dataset
 | 
			
		||||
          testDocuments = createDocuments classes test
 | 
			
		||||
          nb = initialize documents
 | 
			
		||||
 | 
			
		||||
      let testResults (Document text c) =
 | 
			
		||||
            let r = determine text nb intClasses documents
 | 
			
		||||
            in trace (classes !! c ++ " ~ " ++ classes !! r) c == r
 | 
			
		||||
 | 
			
		||||
      let results = map testResults testDocuments
 | 
			
		||||
 | 
			
		||||
      putStr "Accuracy: "
 | 
			
		||||
      putStr . show . round $ (genericLength (filter (==True) results) / genericLength results) * 100
 | 
			
		||||
      putStrLn "%"
 | 
			
		||||
		Reference in New Issue
	
	Block a user