2016-02-16 5 views
0

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

Этот пример предназначен для двумерных точек. Однако:

  • Каким образом он может быть расширен до 3D-точек?

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

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

Dan

Edit 1:

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

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

2D-массив выглядит следующим образом:

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

в то время как функция г это те из параболоида:

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

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

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

От чего возникает несогласованность?

+1

Да, просто попробуйте сделать 'model = make_pipeline (PolynomialFeatures (degree), Ridge())' then 'model.fit (X, y)' с X, имеющим более двух столбцов (и «степень» - степень вы хотите, чтобы ваша интерполяция была). Хотя визуализация может стать более сложной, прогнозирование целевых значений должно работать очень хорошо. Сообщите нам, есть ли какие-либо конкретные проблемы. –

+1

Чтобы добавить некоторую справочную информацию: [Полиномиальные функции] (http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html # sklearn.preprocessing.PolynomialFeatures) шаг предварительной обработки просто создает все возможные комбинации ваших функций, что означает, что даже для входа 2d и степени 2 пространство объектов уже 6 мерное ('1, a, b, a * b , a * a, b * b'). С большим количеством функций это число просто растет еще быстрее. –

+0

@RobinSpiess есть что-нибудь, о чем нужно заботиться, создавая массив X с более чем двумя столбцами? Как видно из моего отредактированного сообщения, появляется сообщение об ошибке, которое показывает странные размеры [10, 20]. Заранее благодарю за любые подсказки! – Daniyal

ответ

1

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

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

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

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

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