class_docstr: To load and hold UCI classification datasets:
  https://archive.ics.uci.edu/ml/datasets.php?task=cla&sort=nameUp&view=table
  Also to convert it to contextual bandits problems
  References: https://arxiv.org/abs/1103.4601
code: def __init__(self, params, device=None):
      if "file" not in params:
          raise Exception('Please define "file" in "dataset"')
      if "label_col" not in params:
          raise Exception('Please define "label_col" in "dataset"')
  
      index_col = params["index_col"] if "index_col" in params else None
      label_col = params["label_col"]
      sep = params["sep"] if "sep" in params else ","
      self._config_file = params["file"]
      self._data_frame = pd.read_csv(
          self._config_file,
          sep=sep,
          header=None,
          index_col=index_col if index_col is not None else False,
      )
      file_col_len = self._data_frame.shape[1] + (
          1 if index_col is not None else 0
      )
      if label_col < 0:
          label_col = file_col_len + label_col
      frame_label_col = label_col
      if index_col is not None and label_col > index_col:
          label_col = label_col - 1
      self._features = torch.as_tensor(
          self._data_frame.iloc[
              :,
              [
                  i
                  for i in range(self._data_frame.shape[1])
                  if i != label_col
              ],
          ].values,
          dtype=torch.float32,
          device=device,
      )
      self._classes = self._data_frame[frame_label_col].unique()
      self._classes.sort()
      self._labels = self._data_frame[frame_label_col].values
      self._class_indices = torch.tensor(
          [np.where(self._classes == i)[0][0] for i in self._labels],
          dtype=torch.long,
          device=device,
      )
      self._one_hots = torch.zeros(
          (self._class_indices.shape[0], len(self._classes)),
          dtype=torch.int,
          device=device,
      )
      self._one_hots[
          torch.arange(self._one_hots.shape[0], dtype=torch.long),
          self._class_indices,
      ] = 1
  
      self.device = device
  
imports: import argparse
  import json
  import logging
  import os
  import random
  import sys
  from dataclasses import dataclass
  from pathlib import PurePath
  from typing import Iterable, Tuple
  import numpy
  import pandas
  import torch
  from reagent.ope.estimators.contextual_bandits_estimators import Action, ActionDistribution, ActionRewards, BanditsEstimatorInput, BanditsModel, DMEstimator, DoublyRobustEstimator, IPSEstimator, LogSample
  from reagent.ope.estimators.estimator import Estimator, Evaluator
  from reagent.ope.estimators.types import ActionSpace, Policy, Trainer, TrainingData
  from reagent.ope.trainers.linear_trainers import DecisionTreeTrainer, LogisticRegressionTrainer, SGDClassifierTrainer
  from torch import Tensor
label_desc: Use image node_id 1 to create a new UCIMultiClassDataset object  with example: obj = UCIMultiClassDataset(params, device)