Poly(i:c):Python相当于Rpoly()函数

我试图了解如何使用 scikit-learn(或其他模块)在 R 中复制 poly()函数。

例如,假设我在 R 中有一个向量:

a <- c(1:10)

我想生成 3 次多项式:

polynomial <- poly(a, 3)

我得到以下内容:

              1           2          3
[1,] -0.49543369  0.52223297 -0.4534252
[2,] -0.38533732  0.17407766  0.1511417
[3,] -0.27524094 -0.08703883  0.3778543
[4,] -0.16514456 -0.26111648  0.3346710
[5,] -0.05504819 -0.34815531  0.1295501
[6,]  0.05504819 -0.34815531 -0.1295501
[7,]  0.16514456 -0.26111648 -0.3346710
[8,]  0.27524094 -0.08703883 -0.3778543
[9,]  0.38533732  0.17407766 -0.1511417
[10,]  0.49543369  0.52223297  0.4534252

我对 python 相对较新,我正在尝试了解如何利用 sklearn 中的PolynomiaFeatures函数来复制它。我花时间在PolynomialFeatures文档中查看示例,但我仍然有点困惑。

任何见解将不胜感激。谢谢!

13

事实证明,您可以通过对矩阵进行 QR 分解来复制 R 的poly(x,p)函数的结果,该矩阵的列是输入向量x的幂从第 0 次幂(所有)到第p次幂。Q 矩阵减去第一个常量列,得出您想要的结果。

所以,以下应该工作:

import numpy as np
def poly(x, p):
    x = np.array(x)
    X = np.transpose(np.vstack((x**k for k in range(p+1))))
    return np.linalg.qr(X)[0][:,1:]

In particular:

In [29]: poly([1,2,3,4,5,6,7,8,9,10], 3)
Out[29]: 
array([[-0.49543369,  0.52223297,  0.45342519],
       [-0.38533732,  0.17407766, -0.15114173],
       [-0.27524094, -0.08703883, -0.37785433],
       [-0.16514456, -0.26111648, -0.33467098],
       [-0.05504819, -0.34815531, -0.12955006],
       [ 0.05504819, -0.34815531,  0.12955006],
       [ 0.16514456, -0.26111648,  0.33467098],
       [ 0.27524094, -0.08703883,  0.37785433],
       [ 0.38533732,  0.17407766,  0.15114173],
       [ 0.49543369,  0.52223297, -0.45342519]])
In [30]: 
3

K. A. Buhr的答案是完整的。

R poly 函数还计算成员的不同程度的相互作用。这就是为什么我一直在寻找 R poly 等价物。
sklearn.preprocessing.PolynomialFeatures似乎提供了这样的,你可以做np.linalg.qr(X)[0][:,1:]步骤后得到正交矩阵。

类似这样:

import numpy as np
import pprint
import sklearn.preprocessing
PP = pprint.PrettyPrinter(indent=4)
MATRIX = np.array([[ 4,  2],[ 2,  3],[ 7,  4]])
poly = sklearn.preprocessing.PolynomialFeatures(2)
PP.pprint(MATRIX)
X = poly.fit_transform(MATRIX)
PP.pprint(X)

结果:

array([[4, 2],
       [2, 3],
       [7, 4]])
array([[ 1.,  4.,  2., 16.,  8.,  4.],
       [ 1.,  2.,  3.,  4.,  6.,  9.],
       [ 1.,  7.,  4., 49., 28., 16.]])

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(642)
红辣椒californication:在IntellijIdea中 方法图标周围的红辣椒图标是什么意思
上一篇
C63空开能带多少千瓦:php中的二进制 为什么是63位(binary 63)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(56条)