{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://schema.rtemis.org/hyperparameters/lightrulefit/v1/schema.json",
  "title": "rtemis LightRuleFitHyperparameters",
  "description": "LightRuleFit (LightGBM rules + GLMNET). See `setup_LightRuleFit`.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "nrounds": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 200,
      "description": "Number of boosting rounds (LightGBM step)."
    },
    "num_leaves": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 32,
      "description": "Maximum number of leaves in one tree (LightGBM step)."
    },
    "max_depth": {
      "oneOf": [
        {
          "type": "integer"
        },
        {
          "type": "array",
          "items": {
            "type": "integer"
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 4,
      "description": "Maximum tree depth (LightGBM step). -1 = no limit."
    },
    "learning_rate": {
      "oneOf": [
        {
          "type": "number",
          "maximum": 1,
          "exclusiveMinimum": 0
        },
        {
          "type": "array",
          "items": {
            "type": "number",
            "maximum": 1,
            "exclusiveMinimum": 0
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 0.1,
      "description": "Learning rate (LightGBM step)."
    },
    "subsample": {
      "oneOf": [
        {
          "type": "number",
          "maximum": 1,
          "exclusiveMinimum": 0
        },
        {
          "type": "array",
          "items": {
            "type": "number",
            "maximum": 1,
            "exclusiveMinimum": 0
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 0.666,
      "description": "Fraction of cases sampled per tree (LightGBM step)."
    },
    "subsample_freq": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 1,
      "description": "Bagging frequency (LightGBM step)."
    },
    "lambda_l1": {
      "oneOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "type": "array",
          "items": {
            "type": "number",
            "minimum": 0
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 0,
      "description": "L1 regularization (LightGBM step)."
    },
    "lambda_l2": {
      "oneOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "type": "array",
          "items": {
            "type": "number",
            "minimum": 0
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 0,
      "description": "L2 regularization (LightGBM step)."
    },
    "objective": {
      "type": ["string", "null"],
      "default": null,
      "description": "LightGBM objective. NULL = set from outcome type."
    },
    "ifw_lightgbm": {
      "oneOf": [
        {
          "type": "boolean"
        },
        {
          "type": "array",
          "items": {
            "type": "boolean"
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": false,
      "description": "Inverse Frequency Weighting in the LightGBM step."
    },
    "alpha": {
      "oneOf": [
        {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 1,
      "description": "Elastic net mixing parameter (GLMNET step)."
    },
    "lambda": {
      "type": ["array", "null"],
      "items": {
        "type": "number",
        "minimum": 0
      },
      "minItems": 1,
      "default": null,
      "description": "Regularization strength (GLMNET step). NULL = determined by cv.glmnet."
    },
    "ifw_glmnet": {
      "oneOf": [
        {
          "type": "boolean"
        },
        {
          "type": "array",
          "items": {
            "type": "boolean"
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": false,
      "description": "Inverse Frequency Weighting in the GLMNET step."
    },
    "ifw": {
      "type": "boolean",
      "default": false,
      "description": "Inverse Frequency Weighting in both steps. Cannot be combined with ifw_lightgbm or ifw_glmnet."
    }
  }
}
