Борьба с удалением выбросов - PullRequest
0 голосов
/ 27 декабря 2018

Я делаю вступление 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.
...