29 lines
1.4 KiB
Haskell
29 lines
1.4 KiB
Haskell
module HushGP.GP.Downsample where
|
|
|
|
import System.Random.Shuffle
|
|
import System.Random
|
|
import HushGP.Genome
|
|
import HushGP.GP.PushData
|
|
import HushGP.GP.PushArgs
|
|
|
|
-- |Sets the index of the passed training data.
|
|
assignIndiciesToData :: [PushData] -> [PushData]
|
|
assignIndiciesToData oldData = zipWith (\dat idx -> dat{_downsampleIndex = Just idx}) oldData [0..]
|
|
|
|
-- |Initializes cases distances for passed training data.
|
|
initializeCaseDistances :: PushArgs -> [PushData]
|
|
initializeCaseDistances pushArgs = [ dat{_caseDistances = Just (replicate (length $ trainingData pushArgs) (fromIntegral @Int @Double $ populationSize pushArgs))} | dat <- trainingData pushArgs ]
|
|
|
|
-- |Updates the cases distances when downsampling
|
|
updateCaseDistances :: [Individual] -> [PushData] -> [PushData] -> String -> Double -> [PushData]
|
|
updateCaseDistances evaledPop downsampleData trainingData informedDownsamplingType solutionThreshold = undefined
|
|
|
|
-- |Draws a random amount of data points from a passed list of data points.
|
|
selectDownsampleRandom :: PushArgs -> [PushData] -> IO [PushData]
|
|
selectDownsampleRandom pushArgs pushData = take (floor (downsampleRate pushArgs * fromIntegral @Int @Float (length pushData))) . shuffle' pushData (length pushData) <$> initStdGen
|
|
|
|
selectDownsampleMaxmin :: PushArgs -> [PushData] -> IO [PushData]
|
|
selectDownsampleMaxmin pushArgs@(PushArgs {downsampleRate = dsRate}) pushData = do
|
|
shuffledCases <- shuffle' pushData (length pushData) <$> initStdGen
|
|
|