Как мне реализовать нелинейный метод наименьших квадратов для многомерных данных в python?

#python #numpy #linear-regression #least-squares #lmfit

#python #numpy #линейная регрессия #метод наименьших квадратов #lmfit

Вопрос:

Я должен реализовать алгоритм наименьших квадратов для этой модельной функции

 Y = a_0 * e^(a_1*x_1 a_2*x_2 ... a_n*x_n)
  

Подход, который я нашел, состоял в том, чтобы определить функцию для вычисления остатков и передать ее в scipy.optimize.leastsq или lmfit. Тем не менее, я не могу заставить его работать с многомерными данными, когда параметры являются векторными, а не единичными значениями.

 def residual(variables,X,y):
    a_0 = variables[0]
    a = variables[1]

    return (y - a_0 * np.exp(X.dot(a)))**2

X = np.random.randn(100,5)
y = np.random.randint(low=0,high=2,size=100)
a_0 = 1
a = np.random.randn(X.shape[1])

leastsq(residual,[a_0,a],args=(X,y))
  

Я получаю эту ошибку.

Ошибка значения: установка элемента массива с последовательностью.

Можете ли вы указать мне правильный курс действий отсюда?

Ответ №1:

Я думаю, что что-то вроде этого должно выполнить эту работу :

 def residual(variables,X,y):
    a_0 = variables[0]
    a = variables[1:]

    return (y - a_0 * np.exp(X.dot(a)))**2

X = np.random.randn(100,5)
y = np.random.randint(low=0,high=2,size=100)
a = np.random.randn(X.shape[1] 1)
a[0] = 1

res = scipy.optimize.leastsq(residual,a,args=(X,y))
  

С уважением

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

1. Спасибо, похоже, это то решение, которое я ищу.