packages feed

svm-simple-0.1.0: Examples/Plot.hs

{-# LANGUAGE ForeignFunctionInterface, BangPatterns, ScopedTypeVariables, TupleSections, 
             RecordWildCards, NoMonomorphismRestriction #-}
module Main where

import AI.SVM.Simple
import qualified Data.Vector.Storable as V
import Diagrams.Prelude
import Diagrams.Backend.Cairo.CmdLine
import Diagrams.Backend.Cairo



main = do
    let trainingData = [('r', V.fromList [0,0])
                       ,('r', V.fromList [1,1])
                       ,('b', V.fromList [0,1])
                       ,('b', V.fromList [1,0])
                       ,('i', V.fromList [0.5,0.5::Double])
                        ]
    let (m,svm2) = trainClassifier (C 1) (RBF 4) trainingData
    let plot = 
               (circle # fc green # scale 5 )
               `atop` 
               (circle # fc green # scale 5
               `atop` circle # scale 100 # lineWidth 5) # translate (200,200) 
               `atop` 
               (circle # fc green # scale 5 # translate (400,400) )
               `atop` 
               foldl (atop) (circle # scale 1)
               [circle # scale 5 # translate (400*x,400*y) # fc (color svm2 (x,y))
               | x <- [0,0.025..1], y <- [0,0.025..1]] 
    fst $ renderDia Cairo (CairoOptions ("test.png") (PNG (400,400))) plot
  where
    color svm (x,y) = case classify svm  [x,y] of
                        'r' -> red
                        'b' -> blue
                        'i' -> indigo
 
between a x b = a <= x && x <= b