Dyl*_*lan 12 python regression linear-regression scikit-learn
如果我有自变量[x1,x2,x3]如果我在sklearn中拟合线性回归,它会给我这样的东西:
y = a*x1 + b*x2 + c*x3 + intercept
Run Code Online (Sandbox Code Playgroud)
poly = 2的多项式回归会给我类似的东西
y = a*x1^2 + b*x1*x2 ......
Run Code Online (Sandbox Code Playgroud)
我不希望像x1 ^ 2那样拥有二度学位.
我怎样才能得到
y = a*x1 + b*x2 + c*x3 + d*x1*x2
Run Code Online (Sandbox Code Playgroud)
如果x1和x2具有大于某个阈值j的高相关性.
har*_*sha 17
为了生成多项式特征,我假设您正在使用sklearn.preprocessing.PolynomialFeatures
在仅考虑相互作用的方法中存在一个论点.所以,你可以这样写:
poly = PolynomialFeatures(interaction_only=True,include_bias = False)
poly.fit_transform(X)
Run Code Online (Sandbox Code Playgroud)
现在只考虑您的交互条款,并省略更高的度数.您的新要素空间变为[x1,x2,x3,x1*x2,x1*x3,x2*x3]
您可以在此基础上使用回归模型
clf = linear_model.LinearRegression()
clf.fit(X, y)
Run Code Online (Sandbox Code Playgroud)
制作你的结果方程式 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)
Run Code Online (Sandbox Code Playgroud)
自变量x1,x2,x3是特征矩阵的列,x
系数a,b,c包含在中model.coef_
。
如果需要交互项,请将其添加到特征矩阵中:
x = np.c_[x, x[:, 0] * x[:, 1]]
Run Code Online (Sandbox Code Playgroud)
现在,前三列包含变量,下列包含交互x1 * x2。拟合模型后,您会发现其中model.coef_
包含四个系数a,b,c和d。
请注意,这将始终为您提供具有交互作用的模型(尽管理论上它可以为0),而不管x1和x2之间的相关性如何。当然,您可以预先测量相关性,然后使用它来确定适合的模型。
使用patsy构造设计矩阵,如下所示:
X, y = dmatrices('y ~ x1 + x2 + x3 + x1:x2', your_data)
Run Code Online (Sandbox Code Playgroud)
哪里your_data
是如数据框与响应列y
和输入列x1
,x2
和x3
。
然后只需调用fit
估算器的方法,例如LinearRegression().fit(X,y)
。