コード例 #1
0
def ensembleClassify(test_data, test_class, kClassifiers, kClassifiers_errors):
    boosted_predicted_class = []
    k_predictions = []

    for i in range(0, k):
        k_predictions.append(nb.predictClass(test_data, kClassifiers[i]))

    for i in range(0, len(test_data)):
        vote_probability = {}
        for ki in range(0, k):
            if k_predictions[ki][i] not in vote_probability:
                vote_probability[k_predictions[ki][i]] = 0
            if kClassifiers_errors[ki] == 0.0:
                vote_probability[k_predictions[ki][i]] += 0
            else:
                vote_probability[k_predictions[ki][i]] += math.log((1.0 - kClassifiers_errors[ki]) / kClassifiers_errors[ki])

        max_vote = 0
        max_class = None
        for class_label in vote_probability:
            if vote_probability[class_label] > max_vote:
                max_vote = vote_probability[class_label]
                max_class = class_label

        boosted_predicted_class.append(max_class)

    if test_class != []:
        nb.generateMeasures(test_class, boosted_predicted_class)

    return boosted_predicted_class
コード例 #2
0
def formEnsembleClassifiers(training_class, training_data, max_attribute_values, k, max_run=5):

    num_training_data = len(training_class)

    ensemble_classifiers = []
    errors_Mi = []

    tuple_weights = [(1.0 / len(training_data)) for i in range(0, len(training_data))]
    #tuple_ids = [i for i in range(0, len(training_class))]

    for rk in range(0, k):
        run_emis = []
        run_classifiers = []
        run_predictions = []
        run_training_class = []

        current_run = 0
        while True:
            new_training_data = []
            new_training_class = []
            prefixed_weights = prefixScan(tuple_weights)
            for i in range(0, num_training_data):
                pick_id = drawRandomPD(prefixed_weights)#random.choice(tuple_ids)
                new_training_data.append(training_data[pick_id])
                new_training_class.append(training_class[pick_id])

            Mi = nb.makeClassifier(new_training_class, new_training_data, max_attribute_values)
            predicted_class = nb.predictClass(new_training_data, Mi)

            eMi = findMiError(predicted_class, new_training_class, tuple_weights)

            if eMi < 0.5:# and (errors_Mi != [] and eMi < min(errors_Mi)):
                ensemble_classifiers.append(Mi)
                errors_Mi.append(eMi)
                break

            run_emis.append(eMi)
            run_classifiers.append(Mi)
            run_predictions.append(predicted_class)
            run_training_class.append(new_training_class)

            current_run += 1
            #
            # if current_run == max_run:
            #     eMi = max(run_emis)
            #     min_run_id = run_emis.index(eMi)
            #     ensemble_classifiers.append(run_classifiers[min_run_id])
            #     predicted_class = run_predictions[min_run_id]
            #     new_training_class = run_training_class[min_run_id]
            #     errors_Mi.append(eMi)
            #     break

        print eMi

        new_tuple_weights = assignNewTupleWeights(tuple_weights, eMi, predicted_class, new_training_class)
        if new_tuple_weights == None:
            rk -= 1
            continue
        tuple_weights = new_tuple_weights
        #tuple_ids = makeNewTupleIds(tuple_weights, num_training_data)

    return ensemble_classifiers, errors_Mi