{-# LANGUAGE DeriveGeneric #-}
module LightGBM.Parameters
(
Param(..)
, PredictionParam(..)
, Application(..)
, BinaryClassParam(..)
, Booster(..)
, DARTParam(..)
, Device(..)
, Direction(..)
, FairRegressionParam(..)
, GOSSParam(..)
, GPUParam(..)
, LambdaRankParam(..)
, LocalListenPort
, MachineListFile
, Metric(..)
, Minutes
, MultiClassStyle(..)
, NDCGEvalPositions
, NumClasses
, NumMachines
, ParallelismParams(..)
, ParallelismStyle(..)
, PoissonRegressionParam(..)
, RegressionApp(..)
, TweedieRegressionParam(..)
, VerbosityLevel(..)
, XEApp(..)
, ColumnSelector(..)
, colSelArgument
) where
import Data.Hashable (Hashable)
import Data.Int (Int32)
import GHC.Generics (Generic)
import Numeric.Natural (Natural)
import LightGBM.Utils.Types
( IntGreaterThanOne
, LeftOpenProperFraction
, NonNegativeDouble
, OneToTwoLeftSemiClosed
, OpenProperFraction
, PositiveDouble
, PositiveInt
, ProperFraction
)
data Param
= Objective Application
| BoostingType Booster
| TrainingData FilePath
| ValidationData [FilePath]
| PredictionData FilePath
| Iterations Natural
| LearningRate PositiveDouble
| NumLeaves PositiveInt
| Parallelism ParallelismStyle
| NumThreads Natural
| Device Device
| RandomSeed Int
| MaxDepth Natural
| MinDataInLeaf Natural
| MinSumHessianInLeaf NonNegativeDouble
| BaggingFraction LeftOpenProperFraction
| BaggingFreq PositiveInt
| BaggingFractionSeed Int
| FeatureFraction LeftOpenProperFraction
| FeatureFractionSeed Int
| EarlyStoppingRounds PositiveInt
| Regularization_L1 NonNegativeDouble
| Regularization_L2 NonNegativeDouble
| MaxDeltaStep PositiveDouble
| MinSplitGain NonNegativeDouble
| MinDataPerGroup PositiveInt
| MaxCatThreshold PositiveInt
| CatSmooth NonNegativeDouble
| CatL2 NonNegativeDouble
| MaxCatToOneHot PositiveInt
| TopK PositiveInt
| MonotoneConstraint [Direction]
| MaxBin IntGreaterThanOne
| MinDataInBin PositiveInt
| DataRandomSeed Int
| OutputModel FilePath
| InputModel FilePath
| OutputResult FilePath
| PrePartition Bool
| IsSparse Bool
| TwoRoundLoading Bool
| SaveBinary Bool
| Verbosity VerbosityLevel
| LabelColumn (ColumnSelector Natural)
| WeightColumn (ColumnSelector Natural)
| QueryColumn (ColumnSelector Natural)
| IgnoreColumns [(ColumnSelector Natural)]
| CategoricalFeatures [(ColumnSelector Int32)]
| BinConstructSampleCount PositiveInt
| UseMissing Bool
| ZeroAsMissing Bool
| InitScoreFile FilePath
| ValidInitScoreFile [FilePath]
| ForcedSplits FilePath
| Sigmoid PositiveDouble
| Alpha OpenProperFraction
| BoostFromAverage Bool
| RegSqrt Bool
| Metric [Metric]
| MetricFreq PositiveInt
| TrainingMetric Bool
deriving (Eq, Show)
data PredictionParam
= PredictRawScore Bool
| PredictLeafIndex Bool
| PredictContrib Bool
| NumIterationsPredict Natural
| PredEarlyStop Bool
| PredEarlyStopFreq Natural
| PredEarlyStopMargin Double
deriving (Eq, Show)
data LambdaRankParam
= MaxPosition PositiveInt
| LabelGain [Double]
deriving (Eq, Show, Generic)
instance Hashable LambdaRankParam
data BinaryClassParam
= IsUnbalance Bool
| ScalePosWeight PositiveDouble
deriving (Eq, Show, Generic)
instance Hashable BinaryClassParam
data FairRegressionParam =
FairC PositiveDouble
deriving (Eq, Show, Generic)
instance Hashable FairRegressionParam
data PoissonRegressionParam =
PoissonMaxDeltaStep PositiveDouble
deriving (Eq, Show, Generic)
instance Hashable PoissonRegressionParam
data Booster
= GBDT
| RandomForest
| DART [DARTParam]
| GOSS [GOSSParam]
deriving (Eq, Show, Generic)
instance Hashable Booster
data TweedieRegressionParam =
TweedieVariancePower OneToTwoLeftSemiClosed
deriving (Eq, Show, Generic)
instance Hashable TweedieRegressionParam
data RegressionApp
= L1
| L2
| Huber
| Fair [FairRegressionParam]
| Poisson [PoissonRegressionParam]
| Quantile
| MAPE
| Gamma
| Tweedie [TweedieRegressionParam]
deriving (Eq, Show, Generic)
instance Hashable RegressionApp
data MultiClassStyle
= MultiClassSimple
| MultiClassOneVsAll
deriving (Eq, Show, Generic)
instance Hashable MultiClassStyle
data XEApp
= XEntropy
| XEntropyLambda
deriving (Eq, Show, Generic)
instance Hashable XEApp
type NumMachines = PositiveInt
type MachineListFile = FilePath
type LocalListenPort = Natural
type Minutes = Natural
data ParallelismParams
= SocketVer { nMachines :: NumMachines
, machineList :: MachineListFile
, port :: LocalListenPort
, timeOut :: Minutes }
| MPIVer { nMachines :: NumMachines }
deriving (Eq, Show, Generic)
instance Hashable ParallelismParams
data ParallelismStyle
= Serial
| FeaturePar ParallelismParams
| DataPar ParallelismParams
| VotingPar ParallelismParams
deriving (Eq, Show, Generic)
instance Hashable ParallelismStyle
data GPUParam
= GpuPlatformId Natural
| GpuDeviceId Natural
| GpuUseDP Bool
deriving (Eq, Show, Generic)
instance Hashable GPUParam
data Device
= CPU
| GPU [GPUParam]
deriving (Eq, Show, Generic)
instance Hashable Device
data Direction
= Increasing
| Decreasing
| NoConstraint
deriving (Eq, Show, Generic)
instance Hashable Direction
data VerbosityLevel
= Fatal
| Warn
| Info
deriving (Eq, Show, Generic)
instance Hashable VerbosityLevel
type NDCGEvalPositions = [Natural]
data Metric
= MeanAbsoluteError
| MeanSquareError
| L2_root
| QuantileRegression
| MAPELoss
| HuberLoss
| FairLoss
| PoissonNegLogLikelihood
| GammaNegLogLikelihood
| GammaDeviance
| TweedieNegLogLiklihood
| NDCG (Maybe NDCGEvalPositions)
| MAP
| AUC
| BinaryLogloss
| BinaryError
| MultiLogloss
| MultiError
| Xentropy
| XentLambda
| KullbackLeibler
deriving (Eq, Show, Generic)
instance Hashable Metric
type NumClasses = Natural
data Application
= Regression RegressionApp
| BinaryClassification [BinaryClassParam]
| MultiClass MultiClassStyle NumClasses
| CrossEntropy XEApp
| LambdaRank [LambdaRankParam]
deriving (Eq, Show, Generic)
instance Hashable Application
data DARTParam
= DropRate ProperFraction
| SkipDrop ProperFraction
| MaxDrop PositiveInt
| UniformDrop Bool
| XGBoostDARTMode Bool
| DropSeed Int
deriving (Eq, Show, Generic)
instance Hashable DARTParam
data GOSSParam
= TopRate ProperFraction
| OtherRate ProperFraction
deriving (Eq, Show, Generic)
instance Hashable GOSSParam
data ColumnSelector a
= Index a
| ColName String
deriving (Eq, Show)
colSelArgument :: Show a => ColumnSelector a -> String
colSelArgument (Index i) = show i
colSelArgument (ColName s) = s