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)
,