如何在Python sklearn中添加交互术语

如何在Python sklearn中添加交互术语,python,scikit-learn,regression,linear-regression,Python,Scikit Learn,Regression,Linear Regression,如果我有自变量[x1,x2,x3] 如果我在sklearn中拟合线性回归 它会给我这样的东西: y = a*x1 + b*x2 + c*x3 + intercept poly=2的多项式回归 会给我类似的东西吗 y = a*x1^2 + b*x1*x2 ...... 我不想有像x1^2这样的二级术语 我怎样才能得到它 y = a*x1 + b*x2 + c*x3 + d*x1*x2 如果x1和x2的高度相关性大于某个阈值j。如果在scikit线性回归学习中执行y=a*x1+b*x2+c*x

如果我有自变量[x1,x2,x3] 如果我在sklearn中拟合线性回归 它会给我这样的东西:

y = a*x1 + b*x2 + c*x3 + intercept
poly=2的多项式回归 会给我类似的东西吗

y = a*x1^2 + b*x1*x2 ......
我不想有像x1^2这样的二级术语

我怎样才能得到它

y = a*x1 + b*x2 + c*x3 + d*x1*x2

如果x1和x2的高度相关性大于某个阈值j。

如果在scikit线性回归学习中执行
y=a*x1+b*x2+c*x3+截距
,我假设您执行以下操作:

# 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、x3是特征矩阵
x
的列,系数a、b、c包含在
model.coef

如果需要交互术语,请将其添加到特征矩阵:

x = np.c_[x, x[:, 0] * x[:, 1]]
现在,前三列包含变量,下一列包含交互x1*x2。拟合模型后,您会发现
model.coef
包含四个系数a、b、c、d


请注意,无论x1和x2之间的相关性如何,这将始终为您提供一个具有交互作用的模型(虽然理论上可以为0)。当然,您可以事先测量相关性并使用它来决定适合哪个模型。

对于生成多项式特征,我假设您使用的是

该方法中有一个只考虑相互作用的论点。因此,您可以编写类似以下内容:

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, X = dmatrices('y ~ x1 + x2 + x3 + x1:x2', your_data)
其中,
您的_数据
是一个数据帧,具有响应列
y
和输入列
x1
x2
x3


然后只需调用估计器的
fit
方法,例如
LinearRegression().fit(X,y)

Nice。我会进一步设置
include_bias=False
,因为bias列可能会导致某些估值器的简并问题,
线性回归
无论如何都会添加自己的截距项