Выбор строки из 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))