# Using custom classifiers

The vanilla implementation of autoBOTLib uses the SGDClassifier class, suitable for fast exploration of a wide array of various models. However, should you wish to use your custom, sklearn-syntax compatible classifier, the following snippet is a good start.

    import autoBOTLib
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    from sklearn.linear_model import SGDClassifier

    ## Load example data frame
    dataframe = pd.read_csv("../data/insults/train.tsv", sep="\t")
    train_sequences = dataframe['text_a'].values.tolist()
    train_targets = dataframe['label'].values

    ## The syntax for specifying a learner and the hyperparameter space!
    ## These are the hyperparameters to be explored for each representation.
    classifier_hyperparameters = {
            "loss": ["hinge"],
            "penalty": ["elasticnet"],
            "alpha": [0.01, 0.001],
            "l1_ratio": [0, 0.001,1]
    }

    ## This is the classifier compatible with the hyperparameters.
    custom_classifier = SGDClassifier()

    autoBOTLibObj = autoBOTLib.GAlearner(
            train_sequences,  # input sequences
            train_targets,  # target space
            time_constraint=0.1,  # time in hours
            num_cpu=4,  # number of CPUs to use
            task_name="example test",  # task identifier
            hof_size=3,  # size of the hall of fame
            top_k_importances=25,  # how many top features to output as final ranking
            memory_storage="../memory",
            representation_type="symbolic",
            learner = custom_classifier,
            learner_hyperparameters = classifier_hyperparameters)  # or neurosymbolic or neural

    autoBOTLibObj.evolve(
            nind=10,  ## population size
            strategy="evolution",  ## optimization strategy
            crossover_proba=0.6,  ## crossover rate
            mutpb=0.4)  ## mutation rate