docstr: Call a trained LightGBM mixer to output predictions for the target column.
  
  :param ds: input data with values for all non-target columns.
  :param args: inference-time arguments (e.g. whether to output predicted labels or probabilities).
  
  :return: dataframe with predictions.
docstr_tok: ["Call","a","trained","LightGBM","mixer","to","output","predictions","for","the","target","column",".",":","param","ds",":","input","data","with","values","for","all","non-target","columns",".",":","param","args",":","inference-time","arguments","(","e.g",".","whether","to","output","predicted","labels","or","probabilities",")",".",":","return",":","dataframe","with","predictions","."]
code: def __call__(
      self,
      ds: EncodedDs,
      args: PredictionArguments = PredictionArguments(),
  ) -> pd.DataFrame:
      """
      Call a trained LightGBM mixer to output predictions for the target column.
  
      :param ds: input data with values for all non-target columns.
      :param args: inference-time arguments (e.g. whether to output predicted labels or probabilities).
  
      :return: dataframe with predictions.
      """
      data = None
      for input_col in self.input_cols:
          if data is None:
              data = ds.get_encoded_column_data(input_col).to(
                  self.device
              )
          else:
              data = torch.cat(
                  (
                      data,
                      ds.get_encoded_column_data(input_col).to(
                          self.device
                      ),
                  ),
                  1,
              )
  
      data = data.cpu().numpy()
      raw_predictions = self.model.predict(data)
  
      if self.ordinal_encoder is not None:
          decoded_predictions = self.ordinal_encoder.inverse_transform(
              np.argmax(raw_predictions, axis=1).reshape(-1, 1)
          ).flatten()
      else:
          decoded_predictions = raw_predictions
  
      if self.positive_domain:
          decoded_predictions = [max(0, p) for p in decoded_predictions]
  
      ydf = pd.DataFrame({"prediction": decoded_predictions})
  
      if args.predict_proba and self.ordinal_encoder is not None:
          for idx, label in enumerate(
              self.ordinal_encoder.categories_[0].tolist()
          ):
              ydf[f"__mdb_proba_{label}"] = raw_predictions[:, idx]
  
      return ydf
  
imports: import time
  import inspect
  from typing import Dict, List, Set, Optional
  import torch
  import optuna
  import lightgbm
  import numpy
  import pandas
  from sklearn.preprocessing import OrdinalEncoder
  import optuna.integration.lightgbm
  from type_infer.dtype import dtype
  from lightwood.encoder.base import BaseEncoder
  from lightwood.helpers.log import log
  from lightwood.mixer.base import BaseMixer
  from lightwood.helpers.device import get_devices
  from lightwood.api.types import PredictionArguments
  from lightwood.data.encoded_ds import EncodedDs
label_desc: Use image node_id 5 for calling the LightGBM obj's underlying member method code with example usage: obj.__call__(ds, args) and returns: ydf