У меня была синтаксическая ошибка с циклом for - PullRequest
0 голосов
/ 03 декабря 2018

Итак, прежде всего, в своем исследовании я натолкнулся на этот пост. Это звучало так, как будто у меня возникла точная проблема, поэтому я опробовал метод, предложенный в ответах.Я пытаюсь использовать алгоритм k-Nearest-Neighbor со следующим кодом:

train_data_copy['distance_to_new'] = numpy.sqrt(
    0
    for k in predictors:
        +(new_example[k]-train_data_copy[k])**2

, где предикторы - это массив переменных в моем наборе данных.

Это были последние две строки послеЯ изменил интервал:

for k in predictors:
   +(new_example[k]-train_data_copy[k])**2

Я также пытался:

for k in predictors[]:
   +(new_example[k]-train_data_copy[k])**2

Сообщение об ошибке было:

File "<ipython-input-27-a08c65d44488>", line 7
for k in predictors:
                  ^
SyntaxError: invalid syntax

Пожалуйста, помогите.Я должен закончить этот проект в ближайшее время.

РЕДАКТИРОВАТЬ: я уже рассчитал среднее.Я пытаюсь определить расстояние от среднего значения каждой конкретной переменной, чтобы определить, насколько далеко от общего среднего значения конкретная точка данных.

РЕДАКТИРОВАТЬ 2: Мне удалось решить проблемусамостоятельно, просто выписав все переменные вручную.Я просто надеялся, что будет более быстрый способ сделать это.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Вы не можете использовать блок в вызове функции.Вместо этого используйте список понимания .

train_data_copy['distance_to_new'] = numpy.sqrt(
   [(new_example[k] - train_data_copy[k])**2 for k in predictors]
)

По существу, это

train_data_copy['distance_to_new'] = [(new_example[k] - train_data_copy[k]) for k in predictors]

, поскольку **2 нейтрализуется numpy.sqrt().Однако ваш код в первом фрагменте предполагает, что вы хотите сначала сложить все числа.Вы можете сделать это, используя функцию sum.

train_data_copy['distance_to_new'] = sum((new_example[k]-train_data_copy[k])**2 for k in predictors)
0 голосов
/ 03 декабря 2018

Python отличает операторы (инструкции) от выражений (вещей, которые оценивают значение).Вы не можете использовать оператор for в контексте выражения (например, аргумент функции sqrt), потому что он ни к чему не приводит, даже к None.Это является причиной синтаксической ошибки.

Вы также не уравняли свои скобки.

Из вашего кода не ясно, что вы даже собираетесь делать.Возможно, вы хотели использовать вместо этого понимание?

...