独立変数[x1、x2、x3]がある場合、sklearnに線形回帰を当てはめると、次のようになります。
y = a*x1 + b*x2 + c*x3 + intercept
Poly = 2の多項式回帰により、次のような結果が得られます。
y = a*x1^2 + b*x1*x2 ......
X1 ^ 2のような2次の用語を持ちたくありません。
どうすれば入手することができますか
y = a*x1 + b*x2 + c*x3 + d*x1*x2
x1とx2のしきい値jの相関が大きい場合。
多項式の特徴を生成するために、 sklearn.preprocessing.PolynomialFeatures を使用していると仮定します
この方法には、相互作用のみを考慮するための議論があります。したがって、次のように書くことができます。
poly = PolynomialFeatures(interaction_only=True,include_bias = False)
poly.fit_transform(X)
これで、相互作用用語のみが考慮され、それ以上の学位は省略されます。新しい機能スペースは[x1、x2、x3、x1 * x2、x1 * x3、x2 * x3]になります
その上に回帰モデルを適合させることができます
clf = linear_model.LinearRegression()
clf.fit(X, y)
結果の方程式を作るy = a*x1 + b*x2 + c*x3 + d*x1*x + e*x2*x3 + f*x3*x1
注:高次元の特徴空間がある場合、これは 次元の呪い につながり、過剰適合/高分散
もしあなたがそうするなら y = a*x1 + b*x2 + c*x3 + intercept
線形回帰を使用したscikit-learnでは、次のようなことをすると仮定します。
# x = array with shape (n_samples, n_features)
# y = array with shape (n_samples)
from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(x, y)
独立変数x1、x2、xは、特徴行列x
の列、および係数a、b、cはmodel.coef_
。
相互作用項が必要な場合は、それを機能マトリックスに追加します。
x = np.c_[x, x[:, 0] * x[:, 1]]
最初の3列には変数が含まれ、次の列には相互作用x1 * x2が含まれます。モデルをフィッティングすると、model.coef_
には4つの係数が含まれていますa、b、c、d。
x1とx2の相関関係に関係なく、これにより常に相互作用のあるモデルが得られます(ただし、理論的には0になります)。もちろん、事前に相関を測定し、それを使用して適合するモデルを決定できます。
patsy を使用して、次のように設計マトリックスを作成します。
_X, y = dmatrices('y ~ x1 + x2 + x3 + x1:x2', your_data)
_
_your_data
_は、たとえば応答列y
および入力列_x1
_、_x2
_および_x3
_を含むDataFrame.
次に、推定器のfit
メソッドを呼び出すだけです。 LinearRegression().fit(X,y)
。