如何在Python sklearn中添加交互术语
如果我有自变量[x1,x2,x3] 如果我在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
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列可能会导致某些估值器的简并问题,线性回归
无论如何都会添加自己的截距项