【问题标题】:How to generate all first-order interaction terms for Lasso Logistic Regression?如何为 Lasso Logistic 回归生成所有一阶交互项?
【发布时间】:2015-02-19 01:27:30
【问题描述】:

glmnet 中有没有办法进行一阶交互?

例如,如果我的 X 矩阵是:

V1 V2 V3
0  1   0
1  0   1
1  0   0
...

有没有办法指定它在不手动创建列的情况下按照 `y~ V1 + V2 + V3 + V1*V2 + V2 *V3 + V1*V3' 执行某些操作?我的实际矩阵更大,手动创建所有一阶交叉产品会很痛苦。

【问题讨论】:

    标签: r logistic-regression glmnet


    【解决方案1】:

    此类公式的正确 R 语法是

    y~(V1+V2+V3)^2
    

    例如

    set.seed(15)
    dd <- data.frame(V1=runif(50), V2=runif(50), V3=runif(50), y=runif(50))
    lm(y~(V1+V2+V3)^2, dd)
    
    Call:
    lm(formula = y ~ (V1 + V2 + V3)^2, data = dd)
    
    Coefficients:
    (Intercept)           V1           V2           V3        V1:V2        V1:V3        V2:V3  
        0.54169     -0.10030     -0.01226     -0.10150      0.38521     -0.03159      0.01200 
    

    或者,如果您想对除y 之外的所有变量进行建模,

    lm(y~(.)^2, dd)
    
    Call:
    lm(formula = y ~ (.)^2, data = dd)
    
    Coefficients:
    (Intercept)           V1           V2           V3        V1:V2        V1:V3        V2:V3  
        0.54169     -0.10030     -0.01226     -0.10150      0.38521     -0.03159      0.01200 
    

    两者都一样

    lm(y~V1+V2+V3+V1:V2+V1:V3+V2:V3, dd)
    
    Call:
    lm(formula = y ~ V1 + V2 + V3 + V1:V2 + V1:V3 + V2:V3, data = dd)
    
    Coefficients:
    (Intercept)           V1           V2           V3        V1:V2        V1:V3        V2:V3  
        0.54169     -0.10030     -0.01226     -0.10150      0.38521     -0.03159      0.01200  
    

    您可以将这些公式与model.matrix 一起使用来创建矩阵

    model.matrix(y~(V1+V2+V3)^2,dd)
    

    【讨论】:

    • 很遗憾,glmnet 不支持公式。但是 model.matrix 是要走的路。
    猜你喜欢
    • 1970-01-01
    • 2016-06-27
    • 2023-03-16
    • 2018-11-18
    • 2015-09-17
    • 1970-01-01
    • 2015-01-18
    • 2020-05-13
    • 1970-01-01
    相关资源
    最近更新 更多