Python 等同于 R poly() 函数?
Python equivalent to R poly() function?
我正在尝试了解如何使用 scikit-learn(或其他模块)在 R 中复制 poly() 函数。
例如,假设我在 R 中有一个向量:
a <- c(1:10)
我想生成三次多项式:
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
文档中的示例,但我仍然有点困惑。
如有任何见解,我们将不胜感激。谢谢!
事实证明,您可以通过对矩阵执行 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 [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]:
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.]])
我正在尝试了解如何使用 scikit-learn(或其他模块)在 R 中复制 poly() 函数。
例如,假设我在 R 中有一个向量:
a <- c(1:10)
我想生成三次多项式:
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
文档中的示例,但我仍然有点困惑。
如有任何见解,我们将不胜感激。谢谢!
事实证明,您可以通过对矩阵执行 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 [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]:
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.]])