#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(‘Как я должен это решить?