scikit learn: полиномиальная интерполяция высших измерений

В этой ссылке проекта scikit-learn: http://scikit-learn.org/stable/auto_examples/linear_model/plot_polynomial_interpolation.html показано, как применять полиномиальную интерполяцию для аппроксимации, например, определенной функции.

Этот пример задан для 2D-точек. Тем не мение:

  • Как его можно расширить, чтобы он подходил для 3D-точек?

  • Или это возможно с помощью scikit-learn? В документации я не нашел пока никаких подсказок.

Заранее спасибо за любую информацию и с наилучшими пожеланиями.

Дэн

Изменить 1:

Спасибо тебе, Робин, за твои ответы! Также указание на быстрый рост сложности было ценной подсказкой!

До сих пор я сталкивался с одной проблемой, которая связана с 2D-массивом X в model.fit(X,z)

2D-массив выглядит так:

[[ 0.1010101   0.35353535]
 [ 0.4040404   0.65656566]
 [ 0.80808081  1.11111111]
 [ 1.21212121  1.31313131]]

в то время как функция z соответствует функции параболоида:

(((x**2)/(4**2) + ((y**2)/(8**2))) * 2)

Бег model.fit(X,z) возвращает следующее сообщение об ошибке:

ValueError: Found arrays with inconsistent numbers of samples: [10 20]

Откуда возникает несоответствие?

1 ответ

Решение

Да, тот же самый подход может использоваться для данных более высокого измерения. Просто используйте тот же код с X содержащий больше столбцов.

# For some degree, X and y
model = make_pipeline(PolynomialFeatures(degree), Ridge())
model.fit(X, y)

Чтобы добавить некоторую справочную информацию: шаг предварительной обработки Polynomial Features просто создает все возможные комбинации ваших функций. Это означает, что даже для двумерного входа и степени 2 пространство признаков уже является 6-мерным (1, a, b, a*b, a*a, b*b), С большим количеством функций это число растет еще быстрее.

На ваш второй вопрос fit Функция принимает только векторы, а не функции. Поэтому создайте вектор y = z(X[:,0],X[:,1]) и использовать это в функции подбора вместо model.fit(X,y),

Другие вопросы по тегам