Commit a3c7c18b authored by Alexandre Delanoë's avatar Alexandre Delanoë

[FIX] Order 2

parent fa5c63fb
...@@ -31,20 +31,24 @@ import Test.QuickCheck.Arbitrary ...@@ -31,20 +31,24 @@ import Test.QuickCheck.Arbitrary
import qualified Data.Text as Text import qualified Data.Text as Text
------------------------------------------------------------------------ ------------------------------------------------------------------------
data Similarity = Conditional | Distributional data Similarity = Conditional | Distributional_A | Distributional_B
deriving (Show, Eq) deriving (Show, Eq)
measure :: Similarity -> Matrix Int -> Matrix Double measure :: Similarity -> Matrix Int -> Matrix Double
measure Conditional x = measureConditional x measure Conditional x = measureConditional x
measure Distributional x = logDistributional2 x measure Distributional_A x = logDistributional2 1 x
measure Distributional_B x = logDistributional2 0 x
------------------------------------------------------------------------ ------------------------------------------------------------------------
withMetric :: GraphMetric -> Similarity withMetric :: GraphMetric -> Similarity
withMetric Order1 = Conditional withMetric Order1 = Conditional
withMetric Order2 = Distributional withMetric Order2_A = Distributional_A
withMetric _ = Distributional_B
------------------------------------------------------------------------ ------------------------------------------------------------------------
data GraphMetric = Order1 | Order2 -- Order2 type is for keeping Database json compatibility
-- it is supposed to be removed in the future
data GraphMetric = Order1 | Order2 | Order2_A | Order2_B
deriving (Generic, Eq, Ord, Enum, Bounded, Show) deriving (Generic, Eq, Ord, Enum, Bounded, Show)
instance FromJSON GraphMetric instance FromJSON GraphMetric
......
...@@ -168,16 +168,16 @@ distributional m' = run $ result ...@@ -168,16 +168,16 @@ distributional m' = run $ result
result = termDivNan z_1 z_2 result = termDivNan z_1 z_2
logDistributional2 :: Matrix Int -> Matrix Double logDistributional2 :: Exp Double -> Matrix Int -> Matrix Double
logDistributional2 m = trace ("logDistributional2, dim=" `mappend` show n) . run logDistributional2 o m = trace ("logDistributional2, dim=" `mappend` show n) . run
$ diagNull n $ diagNull n
$ matMaxMini $ matMaxMini
$ logDistributional' n m $ logDistributional' o n m
where where
n = dim m n = dim m
logDistributional' :: Int -> Matrix Int -> Acc (Matrix Double) logDistributional' :: Exp Double -> Int -> Matrix Int -> Acc (Matrix Double)
logDistributional' n m' = trace ("logDistributional'") result logDistributional' o n m' = trace ("logDistributional'") result
where where
-- From Matrix Int to Matrix Double, i.e : -- From Matrix Int to Matrix Double, i.e :
-- m :: Matrix Int -> Matrix Double -- m :: Matrix Int -> Matrix Double
...@@ -204,7 +204,7 @@ logDistributional' n m' = trace ("logDistributional'") result ...@@ -204,7 +204,7 @@ logDistributional' n m' = trace ("logDistributional'") result
-- m_{i,j} = 0 if n_{i,j} = 0 or i = j, -- m_{i,j} = 0 if n_{i,j} = 0 or i = j,
-- m_{i,j} = log(to * n_{i,j} / s_{i,j}) otherwise. -- m_{i,j} = log(to * n_{i,j} / s_{i,j}) otherwise.
mi = (.*) (matrixEye n) mi = (.*) (matrixEye n)
(map (lift1 (\x -> cond (x == 0) 0 (log (1 + x * to)))) ((./) m ss)) (map (lift1 (\x -> cond (x == 0) 0 (log (o + x * to)))) ((./) m ss))
-- mi_nnz :: Int -- mi_nnz :: Int
-- mi_nnz = flip indexArray Z . run $ -- mi_nnz = flip indexArray Z . run $
-- foldAll (+) 0 $ map (\a -> ifThenElse (abs a < 10^(-6 :: Exp Int)) 0 1) mi -- foldAll (+) 0 $ map (\a -> ifThenElse (abs a < 10^(-6 :: Exp Int)) 0 1) mi
......
...@@ -73,7 +73,6 @@ defaultClustering x = spinglass 1 x ...@@ -73,7 +73,6 @@ defaultClustering x = spinglass 1 x
------------------------------------------------------------- -------------------------------------------------------------
type Threshold = Double type Threshold = Double
cooc2graph' :: Ord t => Similarity cooc2graph' :: Ord t => Similarity
-> Double -> Double
-> Map (t, t) Int -> Map (t, t) Int
...@@ -84,7 +83,7 @@ cooc2graph' distance threshold myCooc ...@@ -84,7 +83,7 @@ cooc2graph' distance threshold myCooc
$ measure distance $ measure distance
$ case distance of $ case distance of
Conditional -> map2mat Triangle 0 tiSize Conditional -> map2mat Triangle 0 tiSize
Distributional -> map2mat Square 0 tiSize _ -> map2mat Square 0 tiSize
$ Map.filter (> 1) myCooc' $ Map.filter (> 1) myCooc'
where where
...@@ -93,7 +92,6 @@ cooc2graph' distance threshold myCooc ...@@ -93,7 +92,6 @@ cooc2graph' distance threshold myCooc
myCooc' = toIndex ti myCooc myCooc' = toIndex ti myCooc
-- coocurrences graph computation -- coocurrences graph computation
cooc2graphWith :: PartitionMethod cooc2graphWith :: PartitionMethod
-> BridgenessMethod -> BridgenessMethod
...@@ -197,7 +195,7 @@ doSimilarityMap Conditional threshold strength myCooc = (distanceMap, toIndex ti ...@@ -197,7 +195,7 @@ doSimilarityMap Conditional threshold strength myCooc = (distanceMap, toIndex ti
$ Map.filter (> threshold) $ Map.filter (> threshold)
$ similarities `seq` mat2map similarities $ similarities `seq` mat2map similarities
doSimilarityMap Distributional threshold strength myCooc = (distanceMap, toIndex ti diag, ti) doSimilarityMap distriType threshold strength myCooc = (distanceMap, toIndex ti diag, ti)
where where
-- TODO remove below -- TODO remove below
(diag, theMatrix) = Map.partitionWithKey (\(x,y) _ -> x == y) (diag, theMatrix) = Map.partitionWithKey (\(x,y) _ -> x == y)
...@@ -208,7 +206,7 @@ doSimilarityMap Distributional threshold strength myCooc = (distanceMap, toIndex ...@@ -208,7 +206,7 @@ doSimilarityMap Distributional threshold strength myCooc = (distanceMap, toIndex
tiSize = Map.size ti tiSize = Map.size ti
similarities = (\m -> m `seq` m) similarities = (\m -> m `seq` m)
$ (\m -> m `seq` measure Distributional m) $ (\m -> m `seq` measure distriType m)
$ (\m -> m `seq` map2mat Square 0 tiSize m) $ (\m -> m `seq` map2mat Square 0 tiSize m)
$ theMatrix `seq` toIndex ti theMatrix $ theMatrix `seq` toIndex ti theMatrix
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment