Я делаю вступление Udacity к курсу ML и у меня возникли проблемы с этим упражнением (урок 8, викторина 12).
Вопрос в следующем:
В outliers / outlier_cleaner.py вы найдете каркас для функции с именем outlierCleaner (), которую вы заполните алгоритмом очистки.Он принимает три аргумента: предсказания - это список прогнозируемых целей, полученных из вашей регрессии, возрасты - это список возрастов в наборе обучения, а net_worths - это фактическая стоимость чистых активов в наборе обучения.В каждом из этих списков должно быть 90 элементов (потому что в тренировочном наборе содержится 90 баллов).Ваша задача - вернуть список с именем cleaned_data, в котором содержится только 81 элемент, то есть 81 обучающая точка, в которой прогнозы и фактические значения (net_worths) имеют наименьшие ошибки (90 * 0,9 = 81).Форматом cleaned_data должен быть список кортежей, где каждый кортеж имеет форму (age, net_worth, error).
Вот что я получил до сих пор:
#!/usr/bin/python3
import numpy as np
p_test = np.array([1,2,3,4,50])
a_test = np.array([32,31,44,22,20])
n_test = np.array([2,3,4,5,6])
def outlierCleaner(predictions, ages, net_worths):
"""
clean away the 10% of points that have the largest
residual errors (different between the prediction
and the actual net worth)
return a list of tuples named cleaned_data where
each tuple is of the form (age, net_worth, error)
"""
cleaned_data = []
differences = predictions - net_worths
cleaned_data = zip(ages, net_worths, differences)
cleaned_data = sorted(cleaned_data, key=lambda x: x[2][0], reverse=True)
limit = int(len(net_worths)*0.1)
predictions.sort(axis=0)
net_worths.sort(axis=0)
return cleaned_data[limit:]
print(outlierCleaner(p_test,a_test,n_test))
Мне потребовалось некоторое время, чтобы понять, как использовать функцию zip()
.Насколько я вижу, это должно вернуть мой список с 4 элементами из моего списка a_test[]
.
Однако я получаю сообщение об ошибке, которое я пытаюсь отладить:
Traceback (most recent call last): File "/Users/xxx/Documents/udacity_ml/python3/ud120-projects/outliers/outlier_cleaner.py", line 37, in <module>
print(outlierCleaner(p_test,a_test,n_test)) File "/Users/xxx/Documents/udacity_ml/python3/ud120-projects/outliers/outlier_cleaner.py", line 25, in outlierCleaner
cleaned_data = sorted(cleaned_data, key=lambda x: x[2][0], reverse=True) File "/Users/xxx/Documents/udacity_ml/python3/ud120-projects/outliers/outlier_cleaner.py", line 25, in <lambda>
cleaned_data = sorted(cleaned_data, key=lambda x: x[2][0], reverse=True) IndexError: invalid index to scalar variable.