scikit-learnを使用した多項式回帰


29

多項式回帰にscikit-learnを使用しようとしています。私が読んだ多項式回帰は、線形回帰の特殊なケースです。scikitの一般化された線形モデルのいずれかが、高次の多項式に適合するようにパラメーター化できるかもしれないと思っていましたが、それを行うオプションはありません。

私はポリカーネルでサポートベクターリグレッサーを使用することに成功しました。これは私のデータのサブセットでうまく機能しましたが、大きなデータセットに適合するにはかなり時間がかかりますので、(ある程度の精度を交換しても)さらに高速なものを見つける必要があります。

ここで明らかな何かを見逃していますか?

回答:


25

データ所与、列ベクトル、および、標的ベクターは、多項式の付加により多項式回帰を実行することができる。たとえば、次の場合を考えますバツyバツ

バツ=[2113]

線形回帰でこのベクトルのみを使用すると、モデルが暗示されます。

y=α1バツ

上記のベクトルのべき乗である列を追加できます。これは、回帰に多項式を追加することを表します。以下に、3乗までの多項式でこれを示します:

バツ=[24811113132133]

これは、sklearnの線形回帰で使用する新しいデータ行列であり、モデルを表します。

y=α1バツ+α2バツ2+α3バツ3

sklearnは自動的にこれを含むため、の定数ベクトルを追加しなかったことに注意してください。1


26

理論

多項式回帰は、線形回帰の特殊なケースです。どのように機能を選択するのかという主要な考えを持ちます。2つの変数を持つ多変量回帰を見てください:x1x2。線形回帰は次のようになります。y = a1 * x1 + a2 * x2.

ここで、多項式回帰が必要になります(2次多項式を作成しましょう)。いくつかの追加機能を作成します:x1*x2x1^2およびx2^2。したがって、「線形回帰」を取得します。

y = a1 * x1 + a2 * x2 + a3 * x1*x2 + a4 * x1^2 + a5 * x2^2

これは、次元の重要な概念の呪いをうまく示しています。なぜなら、新しい特徴の数は、多項式の次数の増加に伴って直線的に増加するよりもずっと速いからです。あなたは見てとることができ、ここで、この概念については

scikit-learnで練習する

scikitでこれらすべてを行う必要はありません。多項式回帰は既に利用可能です(0.15バージョン。ここで更新する方法を確認してください)。

from sklearn.preprocessing import PolynomialFeatures
from sklearn import linear_model

X = [[0.44, 0.68], [0.99, 0.23]]
vector = [109.85, 155.72]
predict= [[0.49, 0.18]]
#Edit: added second square bracket above to fix the ValueError problem

poly = PolynomialFeatures(degree=2)
X_ = poly.fit_transform(X)
predict_ = poly.fit_transform(predict)

clf = linear_model.LinearRegression()
clf.fit(X_, vector)
print clf.predict(predict_)

1
相互作用項をx1 * x2にしたくない場合は、X_を手動で作成する必要がありますか?PolynomialFeatures()コンストラクターにはパラメーター「interaction_only」があり、デフォルトではFalseです。しかし、それをTrueに設定すると、私が何をしたいの反対を作る:それは唯一の相互作用項を保ち、そしてなど、X2 ^ 2、2 ^ X1を保持していない
DenisFLASH

youtubeへのリンクは、動画がもう存在しないと主張しています。他のリンクはありますか?
マークン

@Markonのこのリストのどのビデオでも十分です:youtube.com/results
サルバドールダリ

@SalvadorDaliこれは、次元削減の対象です
user3916597

適用する前にデータを中央に配置する必要があるのPolynomialFeaturesでしょうか?
レナクレ

2

単変量回帰だけでなく多変量回帰を使用している場合は、クロス項を忘れないでください。たとえば、2つの変数と、2のべき乗までの多項式が必要な場合、を使用する必要があります。ここで、最後の項()はについて話す。バツ1バツ2y=a1バツ1+a2バツ2+a3バツ12+a4バツ22+a5バツ1バツ2a5バツ1バツ2

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.