Выбор строки из DataFrame в лямбда-функции

Я работаю над курсом Coursera "Машинное обучение: классификация". Задание в основном использует Sframe, но я пытаюсь использовать Pandas для решения задания.

Вот проблема, с которой я столкнулся из-за разницы между SFrame и Pandas. Я могу решить проблему с помощью цикла for; Тем не менее, я хотел бы знать, есть ли более простой или эффективный подход для этого. Это назначение - создать дерево решений и рассчитать ошибку классификации.

Оригинальный код:

def classify(tree, x, annotate = False):
   # if the node is a leaf node.
    if tree['is_leaf']:
        if annotate:
            print( "At leaf, predicting %s" % tree['prediction'])
        return tree['prediction']
    else:
        # split on feature.
        split_feature_value = x[tree['splitting_feature']]
        if annotate:
            print ("Split on %s = %s" % (tree['splitting_feature'], split_feature_value))
        if split_feature_value == 0:
            return classify(tree['left'], x, annotate)
        else:
            return classify(tree['right'], x, annotate)

def evaluate_classification_error(tree, data):
    # Apply the classify(tree, x) to each row in your data
    prediction = data.apply(lambda x: classify(tree, x))

    # Once you've made the predictions, calculate the classification error and return it
    diff = data["safe_loans"] - prediction
    return len(diff[diff != 0]) / (float)(len(diff))

В evaluate_classification_error функция, она использует лямбда-функцию data.apply(lambda x: classify(tree, x)) звонить classify функция, которая использует команду SFrame для выбора split_feature_value split_feature_value = x[tree['splitting_feature']],

Однако в Pandas мне нужно будет использовать iloc или ix для выбора строки, чтобы получить split_feature_value. Итак, я использую цикл для evaluate_classification_error функционировать следующим образом:

Мой код:

def evaluate_classification_error(tree, data, target):
    # Apply the classify(tree, x) to each row in your data
    predictions = []
    for i in range(len(data)):
        prediction = classify(tree, data.iloc[i])
        predictions.append(prediction)
    # Once you've made the predictions, calculate the classification error and return it
    error = data[target] - predictions
    return len(error[error != 0]) / (float)(len(error))

0 ответов

Другие вопросы по тегам