From f8912299377b4c1f535eae0f86a44b6e83a528c6 Mon Sep 17 00:00:00 2001 From: Johannes Merl Date: Mon, 11 Mar 2024 11:03:38 +0100 Subject: [PATCH] template --- src/IrisData.hs.template | 177 +++++++++++++++++++++++++++++++++++++++ src/IrisDataset.hs | 6 -- 2 files changed, 177 insertions(+), 6 deletions(-) create mode 100644 src/IrisData.hs.template diff --git a/src/IrisData.hs.template b/src/IrisData.hs.template new file mode 100644 index 0000000..e5db1c4 --- /dev/null +++ b/src/IrisData.hs.template @@ -0,0 +1,177 @@ +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TypeApplications #-} +{-# LANGUAGE NoImplicitPrelude #-} + +module IrisData where + +import Data.Csv +import Protolude + +data IrisClass = Setosa | Virginica | Versicolor deriving (Eq, Generic, Show, Enum, Bounded) + +instance FromRecord IrisClass + +instance ToRecord IrisClass + +irisData :: [((Float, Float, Float, Float), IrisClass)] +irisData = + [ + ((5.0, 3.5, 1.6, 0.6), Setosa), + ((4.6, 3.1, 1.5, 0.2), Setosa), + ((4.8, 3.4, 1.6, 0.2), Setosa), + ((4.8, 3.0, 1.4, 0.3), Setosa), + ((6.4, 2.9, 4.3, 1.3), Versicolor), + ((5.5, 2.6, 4.4, 1.2), Versicolor), + ((5.2, 2.7, 3.9, 1.4), Versicolor), + ((6.0, 2.9, 4.5, 1.5), Versicolor), + ((5.3, 3.7, 1.5, 0.2), Setosa), + ((6.4, 3.2, 5.3, 2.3), Virginica), + ((6.4, 3.1, 5.5, 1.8), Virginica), + ((5.1, 3.8, 1.6, 0.2), Setosa), + ((5.1, 3.7, 1.5, 0.4), Setosa), + ((4.6, 3.4, 1.4, 0.3), Setosa), + ((5.6, 3.0, 4.1, 1.3), Versicolor), + ((6.1, 3.0, 4.6, 1.4), Versicolor), + ((5.2, 3.5, 1.5, 0.2), Setosa), + ((7.4, 2.8, 6.1, 1.9), Virginica), + ((6.5, 2.8, 4.6, 1.5), Versicolor), + ((6.3, 3.3, 6.0, 2.5), Virginica), + ((4.8, 3.1, 1.6, 0.2), Setosa), + ((7.7, 3.0, 6.1, 2.3), Virginica), + ((6.0, 2.2, 5.0, 1.5), Virginica), + ((5.5, 2.5, 4.0, 1.3), Versicolor), + ((6.5, 3.0, 5.5, 1.8), Virginica), + ((4.4, 2.9, 1.4, 0.2), Setosa), + ((6.4, 3.2, 4.5, 1.5), Versicolor), + ((5.0, 3.4, 1.6, 0.4), Setosa), + ((6.1, 2.6, 5.6, 1.4), Virginica), + ((6.6, 2.9, 4.6, 1.3), Versicolor), + ((6.7, 3.1, 4.4, 1.4), Versicolor), + ((5.4, 3.7, 1.5, 0.2), Setosa), + ((5.4, 3.0, 4.5, 1.5), Versicolor), + ((5.1, 3.8, 1.5, 0.3), Setosa), + ((5.0, 2.3, 3.3, 1.0), Versicolor), + ((6.0, 2.7, 5.1, 1.6), Versicolor), + ((4.6, 3.2, 1.4, 0.2), Setosa), + ((5.6, 2.7, 4.2, 1.3), Versicolor), + ((6.7, 3.3, 5.7, 2.1), Virginica), + ((6.9, 3.1, 5.1, 2.3), Virginica), + ((7.7, 3.8, 6.7, 2.2), Virginica), + ((6.1, 2.8, 4.7, 1.2), Versicolor), + ((5.8, 2.7, 3.9, 1.2), Versicolor), + ((6.7, 3.3, 5.7, 2.5), Virginica), + ((5.0, 3.4, 1.5, 0.2), Setosa), + ((4.7, 3.2, 1.6, 0.2), Setosa), + ((6.8, 3.0, 5.5, 2.1), Virginica), + ((6.2, 2.2, 4.5, 1.5), Versicolor), + ((5.7, 3.8, 1.7, 0.3), Setosa), + ((5.8, 4.0, 1.2, 0.2), Setosa), + ((7.2, 3.2, 6.0, 1.8), Virginica), + ((5.8, 2.7, 4.1, 1.0), Versicolor), + ((6.5, 3.0, 5.8, 2.2), Virginica), + ((6.9, 3.2, 5.7, 2.3), Virginica), + ((5.8, 2.7, 5.1, 1.9), Virginica), + ((5.2, 4.1, 1.5, 0.1), Setosa), + ((4.6, 3.6, 1.0, 0.2), Setosa), + ((4.7, 3.2, 1.3, 0.2), Setosa), + ((6.9, 3.1, 5.4, 2.1), Virginica), + ((6.1, 2.9, 4.7, 1.4), Versicolor), + ((6.0, 3.4, 4.5, 1.6), Versicolor), + ((5.6, 3.0, 4.5, 1.5), Versicolor), + ((5.2, 3.4, 1.4, 0.2), Setosa), + ((6.3, 3.3, 4.7, 1.6), Versicolor), + ((7.2, 3.6, 6.1, 2.5), Virginica), + ((6.5, 3.2, 5.1, 2.0), Virginica), + ((6.3, 2.5, 4.9, 1.5), Versicolor), + ((5.1, 3.8, 1.9, 0.4), Setosa), + ((7.0, 3.2, 4.7, 1.4), Versicolor), + ((4.9, 3.1, 1.5, 0.1), Setosa), + ((4.9, 2.4, 3.3, 1.0), Versicolor), + ((6.1, 3.0, 4.9, 1.8), Virginica), + ((4.9, 3.1, 1.5, 0.1), Setosa), + ((6.2, 2.9, 4.3, 1.3), Versicolor), + ((5.7, 3.0, 4.2, 1.2), Versicolor), + ((7.2, 3.0, 5.8, 1.6), Virginica), + ((5.0, 2.0, 3.5, 1.0), Versicolor), + ((4.3, 3.0, 1.1, 0.1), Setosa), + ((6.7, 3.1, 4.7, 1.5), Versicolor), + ((5.5, 2.4, 3.8, 1.1), Versicolor), + ((5.7, 2.8, 4.5, 1.3), Versicolor), + ((7.7, 2.8, 6.7, 2.0), Virginica), + ((7.6, 3.0, 6.6, 2.1), Virginica), + ((4.9, 2.5, 4.5, 1.7), Virginica), + ((5.1, 2.5, 3.0, 1.1), Versicolor), + ((6.4, 2.8, 5.6, 2.1), Virginica), + ((6.4, 2.8, 5.6, 2.2), Virginica), + ((5.9, 3.0, 5.1, 1.8), Virginica), + ((4.4, 3.2, 1.3, 0.2), Setosa), + ((6.3, 2.3, 4.4, 1.3), Versicolor), + ((5.4, 3.4, 1.7, 0.2), Setosa), + ((4.9, 3.0, 1.4, 0.2), Setosa), + ((6.7, 3.0, 5.2, 2.3), Virginica), + ((5.0, 3.5, 1.3, 0.3), Setosa), + ((5.1, 3.3, 1.7, 0.5), Setosa), + ((7.7, 2.6, 6.9, 2.3), Virginica), + ((5.6, 2.9, 3.6, 1.3), Versicolor), + ((7.3, 2.9, 6.3, 1.8), Virginica), + ((6.7, 3.1, 5.6, 2.4), Virginica), + ((6.3, 2.8, 5.1, 1.5), Virginica), + ((5.6, 2.5, 3.9, 1.1), Versicolor), + ((5.4, 3.9, 1.3, 0.4), Setosa), + ((5.5, 2.3, 4.0, 1.3), Versicolor), + ((6.4, 2.7, 5.3, 1.9), Virginica), + ((5.1, 3.5, 1.4, 0.3), Setosa), + ((5.5, 3.5, 1.3, 0.2), Setosa), + ((5.0, 3.2, 1.2, 0.2), Setosa), + ((5.1, 3.4, 1.5, 0.2), Setosa), + ((5.4, 3.9, 1.7, 0.4), Setosa), + ((4.5, 2.3, 1.3, 0.3), Setosa), + ((6.7, 3.0, 5.0, 1.7), Versicolor), + ((5.0, 3.3, 1.4, 0.2), Setosa), + ((7.1, 3.0, 5.9, 2.1), Virginica), + ((5.8, 2.6, 4.0, 1.2), Versicolor), + ((6.3, 2.7, 4.9, 1.8), Virginica), + ((6.8, 3.2, 5.9, 2.3), Virginica), + ((6.6, 3.0, 4.4, 1.4), Versicolor), + ((5.4, 3.4, 1.5, 0.4), Setosa), + ((5.0, 3.6, 1.4, 0.2), Setosa), + ((5.9, 3.2, 4.8, 1.8), Versicolor), + ((6.3, 2.5, 5.0, 1.9), Virginica), + ((6.0, 3.0, 4.8, 1.8), Virginica), + ((7.9, 3.8, 6.4, 2.0), Virginica), + ((5.9, 3.0, 4.2, 1.5), Versicolor), + ((4.8, 3.0, 1.4, 0.1), Setosa), + ((5.7, 2.8, 4.1, 1.3), Versicolor), + ((6.7, 2.5, 5.8, 1.8), Virginica), + ((5.7, 2.6, 3.5, 1.0), Versicolor), + ((4.4, 3.0, 1.3, 0.2), Setosa), + ((4.8, 3.4, 1.9, 0.2), Setosa), + ((6.3, 3.4, 5.6, 2.4), Virginica), + ((5.5, 4.2, 1.4, 0.2), Setosa), + ((5.0, 3.0, 1.6, 0.2), Setosa), + ((5.7, 2.9, 4.2, 1.3), Versicolor), + ((6.2, 2.8, 4.8, 1.8), Virginica), + ((6.2, 3.4, 5.4, 2.3), Virginica), + ((6.5, 3.0, 5.2, 2.0), Virginica), + ((4.9, 3.1, 1.5, 0.1), Setosa), + ((5.8, 2.7, 5.1, 1.9), Virginica), + ((5.1, 3.5, 1.4, 0.2), Setosa), + ((5.6, 2.8, 4.9, 2.0), Virginica), + ((5.5, 2.4, 3.7, 1.0), Versicolor), + ((6.1, 2.8, 4.0, 1.3), Versicolor), + ((5.7, 4.4, 1.5, 0.4), Setosa), + ((6.9, 3.1, 4.9, 1.5), Versicolor), + ((5.8, 2.8, 5.1, 2.4), Virginica), + ((5.7, 2.5, 5.0, 2.0), Virginica), + ((6.8, 2.8, 4.8, 1.4), Versicolor), + ((6.3, 2.9, 5.6, 1.8), Virginica), + ((6.0, 2.2, 4.0, 1.0), Versicolor), + ] + +irisTestData :: [((Float, Float, Float, Float), IrisClass)] +irisTestData = + [ + + ] diff --git a/src/IrisDataset.hs b/src/IrisDataset.hs index 077e697..e80a8d0 100644 --- a/src/IrisDataset.hs +++ b/src/IrisDataset.hs @@ -12,15 +12,12 @@ module IrisDataset ) where -import qualified Data.ByteString.Lazy as B -import Data.Csv import qualified Data.List.NonEmpty as NE import qualified Data.Map.Strict as Map import Data.Random import Data.Random.Distribution.Uniform import qualified Data.Text as T import Data.Tuple.Extra -import qualified Debug.Trace as DB import GA import LambdaCalculus import IrisData @@ -96,7 +93,6 @@ data FittnesRes = FittnesRes fitnessGeoMean :: R, fitnessMean :: R, accuracy :: Int, - biasDist :: R, biasSize :: R } deriving (Show) @@ -126,7 +122,6 @@ evalResult ex tr = do let res = map (\(a, b, c, d) -> result a b c d) (fst (trainingData ex)) let resAndTarget = (zip (snd (trainingData ex)) res) let acc = (foldr (\ts s -> if ((fst ts) == (snd ts)) then s + 1 else s) 0 resAndTarget) :: Int - let biasWellDistributed = (foldr (*) 1 (map (\ty -> (foldr (\ts s -> if ((snd ts) == ty) then s + 1 else s) 1 resAndTarget)) ([minBound .. maxBound] :: [IrisClass]) :: [R])) ** (1 / 3) -- 1 (schlecht) bis 51 (gut) let biasSmall = exp (-(fromIntegral (countTrsR tr))) -- 0 (schlecht) bis 1 (gut) let fitness' = meanOfAccuricyPerClass resAndTarget let score = fitness' + (biasSmall - 1) @@ -138,7 +133,6 @@ evalResult ex tr = do fitnessMean = meanOfAccuricyPerClass resAndTarget, fitnessGeoMean = geomeanOfDistributionAccuracy resAndTarget, accuracy = acc, - biasDist = biasWellDistributed, biasSize = biasSmall } )