2016-12-24 12 views
3

scikit-learn(または他のモジュール)を使ってRのpoly()関数を複製する方法を理解しようとしています。Rポリ()関数に相当するPython?

a <- c(1:10) 

そして、私は第三次多項式を生成したい:

たとえば、のは、私はRのベクトルを持っているとしましょう

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のドキュメントで例を見て時間を費やしましたが、まだ少し混乱しています。

洞察力があれば幸いです。ありがとう!

+0

は[numpyのR(とS-Plusの)ユーザーのための](http://mathesaurus.sourceforge.net/ありr-numpy.html)チートシート。あなたは幸運になることができます。 –

+0

ありがとう!私はそれを見ましたが、それは私が探しているものを持っていないようです(または私は完全にそれを逃しています)。 –

+0

R 'poly()'関数の記述(仕様)を教えてください。 –

答えて

3

それはあなたが列p乗までの0番目の電源(すべてのもの)から入力ベクトルxの権限ある行列のQR分解を行うことにより、Rのpoly(x,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]: 
+0

非常に役に立ちます。すべての助けをありがとう! –

0

K. A. Buhrによって答えは完全かつ完全です。

Rポリ関数は、メンバーの異なる度合いの相互作用も計算します。だからこそ私はRポリ等価物を探していたのです。
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.]]) 
関連する問題