【问题标题】:scikit learn: polynomial interpolation of higher dimensionsscikit learn:更高维度的多项式插值
【发布时间】:2016-02-16 11:06:19
【问题描述】:

scikit-learn 项目的这个链接中:http://scikit-learn.org/stable/auto_examples/linear_model/plot_polynomial_interpolation.html,展示了如何应用多项式插值来逼近某个函数。

这个例子是为二维点设置的。然而:

  • 如何扩展它以适应 3D 点?

  • 或者这甚至可以通过 scikit-learn 实现吗? 在文档中我找不到任何提示。

提前感谢您提供任何信息和 致以最诚挚的问候。

编辑 1

感谢罗宾的回答!指出复杂性的快速增长也是一个有价值的提示!

到目前为止,我偶然发现了一个问题,它与model.fit(X,z)中的二维数组X有关

二维数组如下所示:

[[ 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]

不一致从何而来?

【问题讨论】:

  • 是的,只需尝试使用 model = make_pipeline(PolynomialFeatures(degree), Ridge()) 然后 model.fit(X, y) ,其中 X 有两列以上(degree 是您希望插值达到的程度)。虽然可视化可能会变得更棘手,但预测目标值应该可以正常工作。如果有任何具体问题,请告诉我们。
  • 添加一些背景信息:Polynomial Features 预处理步骤只是创建所有可能的特征组合,这意味着即使对于 2d 输入和 2 度,特征空间已经是 6 维的 (1, a, b, a*b, a*a, b*b) .随着功能的增加,这个数字增长得更快。
  • @RobinSpiess 在创建包含两列以上的数组 X 时有什么需要注意的吗?从我编辑的帖子中可以看出,我收到一条错误消息,显示奇怪的尺寸 [10, 20]。提前感谢您的任何提示!
  • 嗯,你能发布print(X.shape)print(z.shape)的输出吗? (假设 X 和 z 是 numpy 数组,否则使用 print(np.array(X).shape))我只是在一个小例子中尝试过,对我来说,即使 X 中的每一行都有一个额外的元素,它也可以工作。
  • 那么如果你创建一个数组y = z(X[:,0],X[:,1])然后使用model.fit(X,y)会发生什么? (我也不确定你如何从 100 个 linspace 元素到 X 中的 20 个元素,但这并不重要)

标签: python scikit-learn polynomial-approximations


【解决方案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]) 并在 fit 函数中使用它而不是 model.fit(X,y)

【讨论】:

    猜你喜欢
    • 2020-06-26
    • 2020-10-30
    • 2016-02-25
    • 1970-01-01
    • 2020-10-10
    • 2013-12-26
    • 2018-09-30
    • 2013-02-28
    相关资源
    最近更新 更多