【问题标题】:Interpreting coefficient names in glmnet in R在 R 中解释 glmnet 中的系数名称
【发布时间】:2012-06-23 21:44:59
【问题描述】:

我正在使用 glmnet 使用以下代码根据一组 5 个特征预测概率。我需要实际的公式,因为我需要在不同的(非 R)程序中使用它。

deg = 3

glmnet.fit <- cv.glmnet(poly(train.matrix,degree=deg),train.result,alpha=0.05,family='binomial')

结果系数的名称有五个位置(我假设这是每个特征之一),每个位置都是 0 到 3 之间的数字(我假设这是多项式的次数)。但是我仍然对如何准确地重构公式感到困惑。

以这些为例:

> coef(glmnet.fit,s= best.lambda)  
(Intercept) -2.25e-01  
...
0.1.0.0.1    3.72e+02
1.1.0.0.1    9.22e+04
0.2.0.0.1    6.17e+02
...

我们将特征称为 A、B、C、D、E。公式应该这样解释吗?

Y =
-2.25e-01 +
...
(3.72e+02 * (B * E) +
(9.22e+04 * (A * B * E) +
(6.17e+02 * (B^2 + E)
...

如果不正确,我该如何解释?

我看到了以下question and answer,但它没有解决这些类型的系数名称。

提前感谢您的帮助。

【问题讨论】:

    标签: r machine-learning glm glmnet


    【解决方案1】:

    通常,我们使用预测函数。在您的情况下,您需要在另一个程序中使用这些系数。我们可以检查使用 predict 和将数据乘以系数的结果之间的一致性。

    # example data
    
    library(ElemStatLearn) 
    library(glmnet) 
    data(prostate) 
    
    # training data 
    
    data.train <- prostate[prostate$train,] 
    y <- data.train$lpsa 
    
    # isolate predictors
    
    data.train <- as.matrix(data.train[,-c(9,10)]) 
    
    # test data
    
    data.test <- prostate[!prostate$train,] 
    data.test <-  as.matrix(data.test[,-c(9,10)]) 
    
    # fit training model 
    
    myglmnet =cv.glmnet(data.train,y) 
    
    # predictions by using predict function 
    
    yhat_enet <- predict(myglmnet,newx=data.test, s="lambda.min") 
    
    #  get predictions by using coefficients 
    
    beta  <- as.vector( t(coef(myglmnet,s="lambda.min"))) 
    
    # Coefficients are returned on the scale of the original data. 
    # note we need to add column  of 1s for intercept
    
    testX <- cbind(1,data.test) 
    yhat2  <- testX %*% beta 
    
    # check by plotting predictions  
    
    plot(yhat2,yhat_enet)
    

    因此,每个系数对应于训练数据中的一列。第一个对应于截距。总之,您可以提取系数并乘以测试数据以获得您感兴趣的结果。

    【讨论】:

    • 感谢您的回复。不幸的是,我仍然不确定如何将这些系数名称和值转换为公式。 “所以每个系数对应于训练数据中的一列”。那不可能是真的。我有大约 80 个非零系数。但我只有 5 列训练数据。我认为这些以句点分隔的数字中的每一个都可能对应于我的一个专栏。有第二意见吗?
    • 查看以下列:polyData
    • 我明白了。这很有帮助。谢谢你。我在没有“poly”的情况下尝试过一次,在 degree = 1 的情况下尝试过一次,事情就更清楚了。当我对此进行更多研究时,似乎我对公式的一般重构是正确的,除了一件事。我认为特征 A、B、C、D、E 实际上是正交多项式(不是原始数据)。
    猜你喜欢
    • 2020-06-17
    • 2014-10-06
    • 2018-06-20
    • 2015-03-04
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2021-07-25
    相关资源
    最近更新 更多