def train_trees(data, attributes):

    clfs = []
    evls = []
    dt_y_hat = []

    unused_attributes = []

    for i, att in enumerate(attributes):

        data.class_index = i

        count_non_nans = np.count_nonzero(~np.isnan(data.values(i)))

        if count_non_nans < 5:

            unused_attributes.append(i)
            print('Not using attribute {}, only {} real values\n\n'.format(
                att, count_non_nans))
            clfs.append(None)
            evls.append(None)
            dt_y_hat.append(None)
            continue

        this_clf = Classifier(classname='weka.classifiers.trees.J48',
                              options=['-U', '-B', '-M', '2'])
        this_clf.build_classifier(data)

        this_evl = Evaluation(data)
        this_evl.crossvalidate_model(this_clf, data, 5, Random(1))

        dt_y_hat.append(this_clf.distributions_for_instances(data))
        clfs.append(this_clf)
        evls.append(this_evl)

    return clfs, evls, dt_y_hat, unused_attributes