hinduce-examples 0.0.0.1 → 0.0.0.2
raw patch · 5 files changed
+135/−82 lines, 5 filesdep +containersdep +hinduce-associations-aprioridep +vectorPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: containers, hinduce-associations-apriori, vector
API changes (from Hackage documentation)
- Data.HInduce.Examples: Iris :: Double -> Double -> Double -> Double -> IrisClass -> Iris
- Data.HInduce.Examples: Setosa :: IrisClass
- Data.HInduce.Examples: Versicolor :: IrisClass
- Data.HInduce.Examples: Virginica :: IrisClass
- Data.HInduce.Examples: data Iris
- Data.HInduce.Examples: data IrisClass
- Data.HInduce.Examples: instance Eq Iris
- Data.HInduce.Examples: instance Eq IrisClass
- Data.HInduce.Examples: instance Layout IrisClass DisplayText
- Data.HInduce.Examples: instance Ord Iris
- Data.HInduce.Examples: instance Ord IrisClass
- Data.HInduce.Examples: instance Read Iris
- Data.HInduce.Examples: instance Read IrisClass
- Data.HInduce.Examples: instance Show Iris
- Data.HInduce.Examples: instance Show IrisClass
- Data.HInduce.Examples: iris :: [Iris]
- Data.HInduce.Examples: irisAttrs :: Iris -> [Double]
- Data.HInduce.Examples: irisAttrs' :: Iris -> ((Double, Double), (Double, Double))
- Data.HInduce.Examples: irisClass :: Iris -> IrisClass
- Data.HInduce.Examples: petalLength :: Iris -> Double
- Data.HInduce.Examples: petalWidth :: Iris -> Double
- Data.HInduce.Examples: readCSV :: [Char] -> IO (Either ParseError CSV)
- Data.HInduce.Examples: readIris :: IO [Iris]
- Data.HInduce.Examples: sepalLength :: Iris -> Double
- Data.HInduce.Examples: sepalWidth :: Iris -> Double
+ Data.HInduce.Examples.Associations: items :: Set Int
+ Data.HInduce.Examples.Associations: transactions :: Vector (Set Int)
+ Data.HInduce.Examples.DecisionTree: Iris :: Double -> Double -> Double -> Double -> IrisClass -> Iris
+ Data.HInduce.Examples.DecisionTree: Setosa :: IrisClass
+ Data.HInduce.Examples.DecisionTree: Versicolor :: IrisClass
+ Data.HInduce.Examples.DecisionTree: Virginica :: IrisClass
+ Data.HInduce.Examples.DecisionTree: data Iris
+ Data.HInduce.Examples.DecisionTree: data IrisClass
+ Data.HInduce.Examples.DecisionTree: instance Eq Iris
+ Data.HInduce.Examples.DecisionTree: instance Eq IrisClass
+ Data.HInduce.Examples.DecisionTree: instance Layout IrisClass DisplayText
+ Data.HInduce.Examples.DecisionTree: instance Ord Iris
+ Data.HInduce.Examples.DecisionTree: instance Ord IrisClass
+ Data.HInduce.Examples.DecisionTree: instance Read Iris
+ Data.HInduce.Examples.DecisionTree: instance Read IrisClass
+ Data.HInduce.Examples.DecisionTree: instance Show Iris
+ Data.HInduce.Examples.DecisionTree: instance Show IrisClass
+ Data.HInduce.Examples.DecisionTree: iris :: [Iris]
+ Data.HInduce.Examples.DecisionTree: irisAttrs :: Iris -> [Double]
+ Data.HInduce.Examples.DecisionTree: irisAttrs' :: Iris -> ((Double, Double), (Double, Double))
+ Data.HInduce.Examples.DecisionTree: irisClass :: Iris -> IrisClass
+ Data.HInduce.Examples.DecisionTree: petalLength :: Iris -> Double
+ Data.HInduce.Examples.DecisionTree: petalWidth :: Iris -> Double
+ Data.HInduce.Examples.DecisionTree: readCSV :: [Char] -> IO (Either ParseError CSV)
+ Data.HInduce.Examples.DecisionTree: readIris :: IO [Iris]
+ Data.HInduce.Examples.DecisionTree: sepalLength :: Iris -> Double
+ Data.HInduce.Examples.DecisionTree: sepalWidth :: Iris -> Double
Files
- data/T10I4D100K.dat too large to diff
- hinduce-examples.cabal +9/−1
- src/Data/HInduce/Examples.hs +19/−81
- src/Data/HInduce/Examples/Associations.hs +27/−0
- src/Data/HInduce/Examples/DecisionTree.hs +80/−0
+ data/T10I4D100K.dat view
file too large to diff
hinduce-examples.cabal view
@@ -1,5 +1,5 @@ Name: hinduce-examples-Version: 0.0.0.1+Version: 0.0.0.2 License: BSD3 Author: Robert Hensing Synopsis: Example data for hInduce@@ -13,6 +13,7 @@ data/iris/iris.data data/iris/bezdekIris.data data/iris/iris.names+ data/T10I4D100K.dat Library Build-Depends: base >= 4 && < 5@@ -21,7 +22,14 @@ , csv >= 0.1.2 , hinduce-classifier >= 0.0.0.0 , hinduce-classifier-decisiontree >= 0.0.0.0+ , hinduce-associations-apriori >= 0.0.0.0 , convertible+ , containers >= 0.4.2.0+ , vector >= 0.9.1 Exposed-Modules: Data.HInduce.Examples+ -- These need not be exposed, but we do to make+ -- the haddock documentation more readable.+ , Data.HInduce.Examples.DecisionTree+ , Data.HInduce.Examples.Associations Other-Modules: Paths_hinduce_examples Hs-Source-Dirs: src
src/Data/HInduce/Examples.hs view
@@ -1,89 +1,27 @@-{-# LANGUAGE MultiParamTypeClasses #-}-module Data.HInduce.Examples (- -- * Re-exports- module Data.HInduce.Classifier+-- | This package / module provides example data and example code to help you+-- get started with HInduce. You are advised to import this module (ghci: +-- @:m + Data.HInduce.Examples@), not the individual ones below, because+-- @Data.HInduce.Examples@ re-exports modules that are required to run the+-- examples yourself.+--+-- Click on a module below to view the examples you're interested in. Also note+-- the grey "Source" links at the right hand site of the webpage.+module Data.HInduce.Examples ( -- * The Examples+ module Data.HInduce.Examples.DecisionTree+ , module Data.HInduce.Examples.Associations+ -- * Re-exports for convenience+ , module Data.HInduce.Classifier , module Data.HInduce.Classifier.DecisionTree+ , module Data.HInduce.Associations.Apriori , module Data.List.HIUtils , module Text.Layout- , module Data.Convertible- -- * Helpers (TODO move to module)- , readCSV- -- * Iris data set- -- | Taken from the UCI Machine Learning Repository: <http://archive.ics.uci.edu/ml/datasets/Iris>- -- - -- Let's build a decision tree and try it:- --- -- >>> let model = buildDTree (genMany autoDeciders) irisAttrs irisClass iris- --- -- >>> classify model [5,4,2,1]- -- Setosa- -- >>> iris !! 10- -- Iris {sepalLength = 5.4, sepalWidth = 3.7, petalLength = 1.5, petalWidth = 0.2, irisClass = Setosa}- --- -- Seems good! But can we really know that?- -- Let's train and test on separate data- --- -- >>> let model' = buildDTree (genMany autoDeciders) irisAttrs irisClass (oddIx iris)- --- -- >>> dt $ confusion' model' (map (irisAttrs &&& irisClass) $ evenIx iris)- -- Table: Confusion Matrix- -- ||-->Actual- -- Predicted\/ Setosa Versicolor Virginica- -- Setosa 0.3333333333333333 - -- Versicolor 0.30666666666666664 4.0e-2- -- Virginica 2.666666666666667e-2 0.29333333333333333- --- -- Now we see that even though not the whole data set was available- -- when the model was induced, only few misclassifications occur.-- , Iris(..), IrisClass(..), irisAttrs, irisAttrs', readIris, iris- ) where-import Paths_hinduce_examples+ ) where +import Data.HInduce.Examples.DecisionTree+import Data.HInduce.Examples.Associations import Data.HInduce.Classifier import Data.HInduce.Classifier.DecisionTree-import Text.Layout-import Data.Convertible+import Data.HInduce.Associations.Apriori import Data.List.HIUtils-import System.IO-import Text.CSV-import System.IO.Unsafe--test :: FilePath -> IO FilePath-test = getDataFileName--readCSV x = do- f <- getDataFileName $ "data/" ++ x- parseCSVFromFile f--openDataR x = do- f <- getDataFileName $ "data/" ++ x- openFile f ReadMode--data IrisClass = Setosa | Versicolor | Virginica- deriving (Eq, Ord, Show, Read)-instance Layout IrisClass DisplayText where format = fromShow--data Iris = Iris { sepalLength :: Double - , sepalWidth :: Double - , petalLength :: Double - , petalWidth :: Double - , irisClass :: IrisClass- }- deriving (Eq, Ord, Show, Read)- -irisAttrs (Iris p q r s _) = [p, q, r, s]-irisAttrs' (Iris p q r s _) = ((p, q), (r, s))--readIris = do- (Right csv) <- readCSV "iris/iris.data"- return $ map readIrisEntry $ filter (/=[""]) csv--readIrisEntry [p,q,r,s,"Iris-setosa"] = - Iris (read p) (read q) (read r) (read s) Setosa-readIrisEntry [p,q,r,s,"Iris-versicolor"] = - Iris (read p) (read q) (read r) (read s) Versicolor-readIrisEntry [p,q,r,s,"Iris-virginica"] =- Iris (read p) (read q) (read r) (read s) Virginica+import Text.Layout -iris = unsafePerformIO readIris
+ src/Data/HInduce/Examples/Associations.hs view
@@ -0,0 +1,27 @@+-- | An example of association rule mining:+--+-- >>> rules transactions items (top ((take 40) . (filter (\(_,a)->a>= 60))))+-- > fromList [((fromList [32],fromList [947]),0.1694915254237288),((fromList [39],fromList [145]),0.17238139971817754),((fromList [39],fromList [145,419]),8.266791921089714e-2),((fromList [39],fromList [368]),0.1326914044152184),((fromList [39],fromList [419]),0.1200093940817285),+module Data.HInduce.Examples.Associations where+import Data.HInduce.Associations.Apriori+import Text.Layout+import System.IO.Unsafe+import qualified Data.Set as S+import qualified Data.Vector as V+import Control.Arrow+import Data.Set+import Data.Vector++import Paths_hinduce_examples++-- | The transactions in the T10I4D100K.dat data set.+transactions :: Data.Vector.Vector (Data.Set.Set Int)++-- | The items in the T10I4D100K.dat data set.+items :: Data.Set.Set Int++(transactions, items) = unsafePerformIO $ do+ name <- getDataFileName "data/T10I4D100K.dat"+ ds <- loadDataSet name+ return $ V.fromList &&& S.unions $ ds+
+ src/Data/HInduce/Examples/DecisionTree.hs view
@@ -0,0 +1,80 @@+{-# LANGUAGE MultiParamTypeClasses #-}+module Data.HInduce.Examples.DecisionTree (+ -- * Helpers (TODO move to module)+ readCSV+ -- * Iris data set+ -- | Taken from the UCI Machine Learning Repository: <http://archive.ics.uci.edu/ml/datasets/Iris>+ -- + -- Let's build a decision tree and try it:+ --+ -- >>> let model = buildDTree (genMany autoDeciders) irisAttrs irisClass iris+ --+ -- >>> classify model [5,4,2,1]+ -- Setosa+ -- >>> iris !! 10+ -- Iris {sepalLength = 5.4, sepalWidth = 3.7, petalLength = 1.5, petalWidth = 0.2, irisClass = Setosa}+ --+ -- Seems good! But can we really know that?+ -- Let's train and test on separate data+ --+ -- >>> let model' = buildDTree (genMany autoDeciders) irisAttrs irisClass (oddIx iris)+ --+ -- >>> dt $ confusion' model' (map (irisAttrs &&& irisClass) $ evenIx iris)+ -- Table: Confusion Matrix+ -- ||-->Actual+ -- Predicted\/ Setosa Versicolor Virginica+ -- Setosa 0.3333333333333333 + -- Versicolor 0.30666666666666664 4.0e-2+ -- Virginica 2.666666666666667e-2 0.29333333333333333+ --+ -- Now we see that even though not the whole data set was available+ -- when the model was induced, only few misclassifications occur.++ , Iris(..), IrisClass(..), irisAttrs, irisAttrs', readIris, iris+ ) where+import Paths_hinduce_examples++import Data.HInduce.Classifier+import Data.HInduce.Classifier.DecisionTree+import Text.Layout+import Data.Convertible+import Data.List.HIUtils+import System.IO+import Text.CSV+import System.IO.Unsafe++readCSV x = do+ f <- getDataFileName $ "data/" ++ x+ parseCSVFromFile f++openDataR x = do+ f <- getDataFileName $ "data/" ++ x+ openFile f ReadMode++data IrisClass = Setosa | Versicolor | Virginica+ deriving (Eq, Ord, Show, Read)+instance Layout IrisClass DisplayText where format = fromShow++data Iris = Iris { sepalLength :: Double + , sepalWidth :: Double + , petalLength :: Double + , petalWidth :: Double + , irisClass :: IrisClass+ }+ deriving (Eq, Ord, Show, Read)+ +irisAttrs (Iris p q r s _) = [p, q, r, s]+irisAttrs' (Iris p q r s _) = ((p, q), (r, s))++readIris = do+ (Right csv) <- readCSV "iris/iris.data"+ return $ map readIrisEntry $ filter (/=[""]) csv++readIrisEntry [p,q,r,s,"Iris-setosa"] = + Iris (read p) (read q) (read r) (read s) Setosa+readIrisEntry [p,q,r,s,"Iris-versicolor"] = + Iris (read p) (read q) (read r) (read s) Versicolor+readIrisEntry [p,q,r,s,"Iris-virginica"] =+ Iris (read p) (read q) (read r) (read s) Virginica++iris = unsafePerformIO readIris