packages feed

kmeans-vector-0.3.1: examples/example.hs

import Control.Applicative
import Control.Monad
import Math.KMeans
import Math.Probable

import qualified Data.Vector.Unboxed as V
import qualified Data.Vector         as G

runKMeans :: [V.Vector Double] -> Clusters (V.Vector Double)
runKMeans = kmeans id euclidSq 2

oneVecOf :: RandT IO Double -> RandT IO (V.Vector Double)
oneVecOf doubleGen = vectorOf 10 doubleGen

doubleGen1 :: RandT IO Double
doubleGen1 = normal (-1500) 0.1

doubleGen2 :: RandT IO Double
doubleGen2 = normal 1500 0.1

main :: IO ()
main = do
    v1s <- mwc $ listOf 500 (oneVecOf doubleGen1)
    v2s <- mwc $ listOf 500 (oneVecOf doubleGen2)
    let input = v1s ++ v2s

    let clusters = runKMeans input
    G.mapM_ print clusters
    putStrLn $ show (G.length clusters)
            ++ " cluster(s) found."