Как написать уравнение для представления функции затрат в python?

#python

#python

Вопрос:

Привет ~ Я пытаюсь решить проблему линейного прогнозирования в python. Я получил набор данных, который представляет собой последовательность, имеет около 500 значений.

Мне нужно предсказать x (n) с помощью 2 его предыдущих выборок x (n-1) и x (n-2) как: x (n) = a1 x (n-1) a2 x (n-2) Функция затрат равна J = sum ((x (n)-a1 x (n-1)-a2 x (n-2)), 2). на самом деле мне нужно использовать метод градиентного спуска, чтобы найти наилучшие a1 и a2 для минимизации J. Я не знаю, как написать выражение для представления x (n-1) и x (n-2), поскольку они в списке и имеют только один столбец.

Вот мой код:

 import numpy as np

with open('datafile-02.txt','r') as n:

     n=n.readlines()

     def PE(a1,a2,x,n):

         return sum(np.power((- a1*n[:,0] - a2*n[:,1] x),2))

     a1=1
     a2=-1
     x=0

     alpha=0.005
     max_no_of_iter=5000

     rec_J=np.zeros(max_no_of_iter)
     rec_abc=np.zeros([max_no_of_iter,3])

     J=PE(a1,a2,x,n)
     rec_J[0]=J
     rec_abc[0,:]=[a1,a2,x]

     for i in range(1,max_no_of_iter):
         tmp=(x   a1*n[:,0]*-1   a2*n[:,1]*-1)


         a1-=2*alpha*sum(n[0]*n[1]*a2 n[0]**2*a1-x*n[0])
         a2-=2*alpha*sum(n[0]*n[1]*a1-x*n[1] n[1]**2*a2)
         x-=alpha*sum(tmp)

     J=PE(a1,a2,x,n)    

     print('After iter' str(i 1) ',Cost J is ' str(J) 'for [a1,a2,x] =' str([a1,a2,x]))
  

Комментарии:

1. Не могли бы вы поместить все строки из текстового файла в массив?

2. Я бы сказал, что стоимость — это что-то вроде `x [ 2 : : ] — a1 * x [ 1: -1 : ] — a2 * x [ : -2 : ]` … вероятно, возведено в квадрат, а затем суммировано

3. В любом случае, я не думаю, что вам нужно оценивать функцию затрат, так как вам просто нужно, чтобы градиент исчезал…. ну, как проверка работоспособности, я думаю. ОК

4. Похоже, что [:,0] для 2D-массива, а мой набор данных — это просто список, я не знаю, как записать выражение выбранных (n-1) или (n-2) данных в списке

5. Спасибо вам всем! Кажется, я знаю, как представить уравнение, но теперь я получил новую ошибку, которая заключается в том, что ufunc ‘multiply’ не содержит цикла с типами соответствия сигнатур (dtype(‘<U22’), dtype(‘<U22’)) -> dtype(‘Как я должен это решить?