2015-11-27 5 views
7

Я хотел бы найти решение методом наименьших квадратов для a коэффициентов вЭквивалент `polyfit` для 2D полинома в Python

z = (a0 + a1*x + a2*y + a3*x**2 + a4*x**2*y + a5*x**2*y**2 + a6*y**2 + 
    a7*x*y**2 + a8*x*y) 

массивов данных x, y и z длины 20. В основном Я ищу эквивалент numpy.polyfit, но для двумерного многочлена.

This question похоже, но решение предоставляется через MATLAB.

+0

нет извините, я добавил его туда. –

+0

sklearn имеет [регрессия хребта ядра] (http://scikit-learn.org/stable/modules/generated/sklearn.kernel_ridge.KernelRidge.html#sklearn.kernel_ridge.KernelRidge), но я не уверен, можете ли вы установить ' alpha' to 0. Будет ли это работать для вас? – simonzack

+0

Сплайны Scipy могут быть полезны: https://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html – Dietrich

ответ

9

Ниже приведен пример, показывающий, как вы можете использовать numpy.linalg.lstsq для выполнения этой задачи:

import numpy as np 

x = np.linspace(0, 1, 20) 
y = np.linspace(0, 1, 20) 
X, Y = np.meshgrid(x, y, copy=False) 
Z = X**2 + Y**2 + np.random.rand(*X.shape)*0.01 

X = X.flatten() 
Y = Y.flatten() 

A = np.array([X*0+1, X, Y, X**2, X**2*Y, X**2*Y**2, Y**2, X*Y**2, X*Y]).T 
B = Z.flatten() 

coeff, r, rank, s = np.linalg.lstsq(A, B) 

регулировочная коэффициенты coeff являются:

array([ 0.00423365, 0.00224748, 0.00193344, 0.9982576 , -0.00594063, 
     0.00834339, 0.99803901, -0.00536561, 0.00286598]) 

Обратите внимание, что coeff[3] и coeff[6] соответственно соответствуют X**2 и Y**2, и они близки к 1., потому что данные примера были созданы с помощью Z = X**2 + Y**2 + small_random_component.

+1

Какова ваша цель с каждой из этих строк? 'Z = X ** 2 + Y ** 2 + np.random.rand (* X.shape) * 0.01' ' A = np.array ([X * 0 + 1, X, Y, X * * 2, X ** 2 * Y, X ** 2 * Y ** 2, Y ** 2, X * Y ** 2, X * Y]). T' Почему вы сглаживаете эти матрицы? 'X = X.flatten()' 'Y = Y.flatten()' – xeon123

+0

@ xeon123 Цель с выражением для 'Z' заключается только в создании образца данных для проверки соответствия поверхности. Мне пришлось сгладить 'X' и' Y', так что 'A' становится двумерным массивом, который является форматом, необходимым для решателей' lstsq'. –

 Смежные вопросы

  • Нет связанных вопросов^_^