<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def train_sbrl(data_file, label_file, lambda_=20, eta=2, max_iters=300000, n_chains=20, alpha=1, seed=None, verbose=0):
 """ The basic training function of the scalable bayesian rule list. Users are suggested to use SBRL instead of this function. It takes the paths of the pre-processed data and label files as input, and return the parameters of the trained rule list. Check pysbrl.utils:categorical2pysbrl_data to see how to convert categorical data to the required format :param data_file: The data file :param label_file: The label file :param lambda_: A hyper parameter, the prior representing the expected length of the rule list :param eta: A hyper parameter, the prior representing the expected length of each rule :param max_iters: The maximum iteration of the algo :param n_chains: The number of markov chains to run :param alpha: The prior of the output probability distribution, see the paper for more detail. :return: A tuple of (`rule_ids`, `outputs`, `rule_strings`) `rule_ids`: the list of ids of rules `outputs`: the outputs matrix (prob distribution as a vector per rule) `rule_strings`: the whole list of rules in the format of strings like `u'{c2=x,c4=o,c5=b}'`. """

    if isinstance(alpha, int):
        alphas = np.array([alpha], dtype=np.int32)
    elif isinstance(alpha, list):
        for a in alpha:
            assert isinstance(a, int)
        alphas = np.array(alpha, dtype=np.int32)
    else:
        raise ValueError('the argument alpha can only be int or List[int]')
    if seed is None:
        seed = -1
    if not os.path.isfile(data_file):
        raise FileNotFoundError('data file %s does not exists!' % data_file)
    if not os.path.isfile(label_file):
        raise FileNotFoundError('label file %s does not exists!' % label_file)
    return _train(data_file, label_file, lambda_, eta, max_iters, n_chains, alphas, seed, verbose)