implemented phase 2
This commit is contained in:
32
ExtractRules.hs
Normal file
32
ExtractRules.hs
Normal file
@@ -0,0 +1,32 @@
|
||||
module ExtractRules (
|
||||
extractRules
|
||||
) where
|
||||
import DataModel
|
||||
import qualified Data.Set as Set
|
||||
import qualified Data.Map as Map
|
||||
import Data.Map(Map)
|
||||
|
||||
extractRules :: Confidence -> [ItemSet] -> [Rule]
|
||||
extractRules threshold patterns = filter (\x -> threshold <= confidence patterns x) rules where
|
||||
rules = Map.foldrWithKey (\k v old -> ruleFromSubset v k : old) [] subsets
|
||||
subsets = foldr (\x old -> insertMultiple (filteredPowerset x) x old) Map.empty patterns
|
||||
filteredPowerset (ItemSet set) = map (ItemSet . Set.fromList) $
|
||||
filter (\val -> val /= Set.toList set && val /= []) $ powerset $ Set.toList set
|
||||
|
||||
ruleFromSubset :: ItemSet -> ItemSet -> Rule
|
||||
ruleFromSubset set subset = Rule subset (difference set subset)
|
||||
|
||||
|
||||
|
||||
insertMultiple :: Ord k => [k] -> a -> Map k a -> Map k a
|
||||
insertMultiple keys value m = foldr (\x old -> Map.insert x value old) m keys
|
||||
|
||||
powerset :: [a] -> [[a]]
|
||||
powerset [] = [[]]
|
||||
powerset (x:xs) = xss /\/ map (x:) xss where
|
||||
xss = powerset xs
|
||||
|
||||
(/\/) :: [a] -> [a] -> [a]
|
||||
[] /\/ ys = ys
|
||||
(x:xs) /\/ ys = x : (ys /\/ xs)
|
||||
|
||||
Reference in New Issue
Block a user