【问题标题】:How to add interaction term in Python sklearn如何在 Python sklearn 中添加交互项
【发布时间】:2018-01-31 09:48:44
【问题描述】:

如果我有自变量 [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 的高度相关性。

【问题讨论】:

    标签: python scikit-learn regression linear-regression


    【解决方案1】:

    使用patsy构造设计矩阵如下:

    y, X = dmatrices('y ~ x1 + x2 + x3 + x1:x2', your_data)
    

    your_data 在哪里,例如具有响应列 y 和输入列 x1x2x3 的 DataFrame。

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

    【讨论】:

    • 喜欢 R 中 lm() 之后的设计
    【解决方案2】:

    如果你在 scikit-learn 中使用线性回归进行 y = a*x1 + b*x2 + c*x3 + intercept,我假设你会这样做:

    # 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)
    

    自变量x1x2x3为特征矩阵x的列,系数a、bc 都包含在model.coef_ 中。

    如果您想要一个交互项,请将其添加到特征矩阵中:

    x = np.c_[x, x[:, 0] * x[:, 1]]
    

    现在前三列包含变量,以下列包含交互作用x1 * x2。拟合模型后你会发现model.coef_包含四个系数abcd

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

    【讨论】:

      【解决方案3】:

      为了生成多项式特征,我假设您使用的是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

      注意:如果你有高维特征空间,那么这会导致curse of dimensionality,这可能会导致过度拟合/高方差等问题

      【讨论】:

      • 不错。我会进一步设置include_bias=False,因为偏差列可能会导致某些估计器的退化问题,而LinearRegression 无论如何都会添加自己的截距项。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多